def __init__(self,f,hit_paddle,TIME,X,Y,orignal,BRICK,POWER,points,level,level_time,ufo_x,ufo_y,ufo_health):
		# Thses all written below are instance variables
		# methods are the functions which are defined in the class to manipulate these attributes
		# self is an object
		self.x = X
		self.y = Y
		self.f = f
		self.hit_paddle = hit_paddle
		self.orignal = orignal
		self.bricks = BRICK
		self.power = POWER
		self.points = points
		self.level = level
		self.level_time = level_time
		self.ufo_x = ufo_x
		self.ufo_y = ufo_y
		self.ufo_health = ufo_health
		self.paddle = Paddles(self.x,self.y,self.orignal,self.bricks,self.power,self.points,self.level)
		self.ball = Balls(self.x,self.y,self.orignal,self.bricks,self.power,self.points,self.paddle)
		self.bomb = Bombs(self.x,self.y,self.orignal,self.bricks,self.power,self.paddle,self.ball,self.level,self.ufo_x,self.ufo_y,self.ufo_health)
		self.brick = Bricks(self.x,self.y,self.orignal,self.bricks,self.power,self.points,self.paddle,self.ball)
		self.powerup = PowerUps(self.x,self.y,self.orignal,self.bricks,self.power,self.points,self.paddle,self.ball,self.brick)
		self.board = Board(self.x,self.y,self.orignal,self.bricks,self.power,self.points,self.paddle,self.ball,self.brick,self.powerup)
		self.time = TIME
		self.GAMEOVER = False
Beispiel #2
0
 def __init__(self, nombre):
     self.bloques = dict()
     self.nombre = nombre
     self.stage = "STAGE1_4"
     self.PUps = PowerUps()
Beispiel #3
0
class Mapa:
    DIRECTORIO = "bgs/"
    tableros = "tableros/"
    fondo = ""
    musica = ""
    nombre = ""
    escalaX = 1
    escalaY = 1
    x = 0
    y = 0
    bloques = None
    song = None
    window = None
    sprite = None
    PUps = None
    count = 0

    def __init__(self, nombre):
        self.bloques = dict()
        self.nombre = nombre
        self.stage = "STAGE1_4"
        self.PUps = PowerUps()

    def cargarBase(self):
        tree = ET()
        tree.parse(self.tableros + self.nombre + ".xml")
        root = tree.getroot()

        self.count = int(root.find("cantPowerUps").text)
        self.fondo = root.find("fondo").text
        self.musica = root.find("musica").text
        self.stage = root.find("title").text

        for child in root.iter("bloque"):

            x = int(child.attrib["fila"])
            if not self.bloques.has_key(x):
                self.bloques[x] = dict()
            y = int(child.attrib["col"])
            tipo = child.attrib["tipo"]
            bloque = Bloque(x, y, tipo == "D")
            bloque.destruir()
            bloque.setSpriteB(child.text)
            self.bloques[x][y] = bloque

    def crearMapa(self):
        self.cargarBase()
        self.PUps.totalPowerUps = self.count
        Posiciones.init()

        if self.nombre in ["STAGE1_4", "STAGE2_4", "STAGE3_4", "STAGE4_4", "STAGE5_4"]:
            Posiciones.setTablero(self.nombre)
            for i in self.bloques.keys():
                a = self.bloques[i]
                for j in a.keys():
                    bloque = a[j]
                    if bloque.destructible:
                        tupla = self.PUps.generarSiguiente()
                        if tupla[0] != "ninguno":
                            bloque.setPowerUp(tupla[0], tupla[1])
                            bloque.tienePowerUp = True

    def setFondo(self, f):
        self.fondo = f

    def setMusica(self, song):
        self.musica = song

    def reproducirMusica(self):
        self.song = sf.Music()
        self.song.OpenFromFile(self.musica + ".ogg")
        self.song.SetLoop(True)
        self.song.Initialize(2, 44100)
        self.song.Play()

    def detenerMusica(self):
        self.song.Stop()

    def pausarMusica(self):
        self.song.Pause()

    def getSpriteBG(self):
        imagen = sf.Image()
        imagen.LoadFromFile(self.DIRECTORIO + self.fondo + ".png")
        sprite = sf.Sprite(imagen)
        sprite.SetCenter(0, 0)
        sprite.SetScale(self.escalaX, self.escalaY)
        return sprite

    def setWindow(self, wind):
        self.window = wind
        for i in range(len(self.bloques)):
            for j in range(len(self.bloques[i])):
                self.bloques[i][j].setWindow(wind)

    def getBloque(self, i, j):
        if self.bloques.has_key(i):
            t = self.bloques[i]
            if t.has_key(j):
                return self.bloques[i][j]
            else:
                return None
        else:
            return None

    def destruirBloque(self, i, j):
        if self.bloques.has_key(i):
            t = self.bloques[i]
            if t.has_key(j):
                if self.bloques[i][j].destructible:
                    self.bloques[i][j].destruir()

    def tomarPowerUp(self, i, j, player):
        if self.bloques.has_key(i):
            t = self.bloques[i]
            if t.has_key(j):
                if self.bloques[i][j].tienePowerUp:
                    self.bloques[i][j].tomarPowerUp(player)

    def destruirPowerUp(self, i, j):
        if self.bloques.has_key(i):
            t = self.bloques[i]
            if t.has_key(j):
                if self.bloques[i][j].tienePowerUp:
                    self.bloques[i][j].destruirPowerUp()

    def Draw(self, gameTime, window):
        window.Draw(self.sprite)
        for b in self.bloques:
            bl = self.bloques[b]
            for blo in bl:
                bloq = bl[blo]
                bloq.Draw(gameTime, window)

    def Update(self, gameTime):
        if self.sprite == None:
            self.sprite = self.getSpriteBG()
        self.sprite.SetPosition(self.x, self.y)
        for b in self.bloques:
            bl = self.bloques[b]
            for blo in bl:
                bloq = bl[blo]
                bloq.Update(gameTime)

    def toString(self):
        s = "ClassName: Mapa\n"
        s += "Nombre Mapa: " + self.nombre + "\n"
        s += "Fondo: " + self.fondo + "\n"
        s += "Musica: " + self.musica + "\n"
        for b in self.bloques:
            bl = self.bloques[b]
            for blo in bl:
                bloq = bl[blo]
                s += "\t" + bloq.toString() + "\n"

        return s
class Game():
	# __init__ is a constructor and is used to initalize the attributes of the class.
	def __init__(self,f,hit_paddle,TIME,X,Y,orignal,BRICK,POWER,points,level,level_time,ufo_x,ufo_y,ufo_health):
		# Thses all written below are instance variables
		# methods are the functions which are defined in the class to manipulate these attributes
		# self is an object
		self.x = X
		self.y = Y
		self.f = f
		self.hit_paddle = hit_paddle
		self.orignal = orignal
		self.bricks = BRICK
		self.power = POWER
		self.points = points
		self.level = level
		self.level_time = level_time
		self.ufo_x = ufo_x
		self.ufo_y = ufo_y
		self.ufo_health = ufo_health
		self.paddle = Paddles(self.x,self.y,self.orignal,self.bricks,self.power,self.points,self.level)
		self.ball = Balls(self.x,self.y,self.orignal,self.bricks,self.power,self.points,self.paddle)
		self.bomb = Bombs(self.x,self.y,self.orignal,self.bricks,self.power,self.paddle,self.ball,self.level,self.ufo_x,self.ufo_y,self.ufo_health)
		self.brick = Bricks(self.x,self.y,self.orignal,self.bricks,self.power,self.points,self.paddle,self.ball)
		self.powerup = PowerUps(self.x,self.y,self.orignal,self.bricks,self.power,self.points,self.paddle,self.ball,self.brick)
		self.board = Board(self.x,self.y,self.orignal,self.bricks,self.power,self.points,self.paddle,self.ball,self.brick,self.powerup)
		self.time = TIME
		self.GAMEOVER = False


	def input(self,timeout=1):
		signal.signal(signal.SIGALRM, alarmHandler)
		signal.alarm(timeout)	
		
		try:
			inp = getch()
			signal.alarm(0)

			if inp == 'q':
				sys.exit()

			# Level-Up
			if inp == 'l':
				return 'l'

			if inp == 'p':
				getch()	
	
			if inp == 'a':			
				self.paddle.movePaddle(self,-2)
				if self.level == 3:
					self.bomb.moveUFO(self,-1)

			elif inp == 'd':		
				self.paddle.movePaddle(self,2)
				if self.level == 3:
					self.bomb.moveUFO(self,1)			

			elif inp == 's':		
				self.f=1	

			else:
				pass 

			return ''	

		except AlarmException:
			signal.signal(signal.SIGALRM, signal.SIG_IGN)
			return ''

	def update(self):
		self.time += 1
		self.level_time += 1

		# Sound for hitting the paddle is already in bombs.py file
		if self.level == 3:
			self.bomb.savage_bricks(self)
			self.bomb.bombfall(self)
			if self.f == 1:
				self.hit_paddle = self.bomb.ball_ufo_collision(self)
			else:
				self.ball.Ball_on_Paddle(self)

		else:
			self.brick.Ball_Brick_Collision(self)
			self.powerup.Update_PowerUp(self)
			self.powerup.Remove_PowerUp(self)

			if self.f == 1:
				self.hit_paddle =self.ball.moveBall(self)
				self.f = self.ball.Update_Flag(self)
			else:
				self.ball.Ball_on_Paddle(self)

			if self.hit_paddle == 1:
				# Input an existing mp3 filename
				mp3File = "./sounds/hit.WAV"
				# Play the mp3 file
				playsound(mp3File)

				# Falling bricks
				if self.level_time > 500:
					for i in reversed(range(self.y-4)):
						for j in range(1, self.x-2):
							if (self.orignal[i][j] == 'b1') or (self.orignal[i][j] == 'b2') or (self.orignal[i][j] == 'b3') or (self.orignal[i][j] == 'U') or (self.orignal[i][j] == '$') or (self.orignal[i][j] == 'r'):
								# self.y -5 is 1 level above of ball(here games get over)
								if i == self.y - 5:
									thankyou()
									sys.exit()

								self.orignal[i+1][j] = self.orignal[i][j]
								self.orignal[i][j] = ' '

		os.system("clear")

	def updatedboard(self):
		return self.board.Updated_org_Array(self)


	def updatedbricks(self):
		return self.board.Updated_Bricks_Array(self)

	def updatedpoints(self):
		return self.brick.Updated_Points(self)


	def updatedpower(self):
		return self.board.Updated_Power_Array(self)

	def updatedhealth(self):
		return self.bomb.updatedhealth(self)

	def gameOver(self):
		os.system("clear")
		self.board.display()
		# Input an existing mp3 filename
		mp3File = "./sounds/Gameover.mp3"
		# Play the mp3 file
		playsound(mp3File)
		if self.level == 3:
			print("Bomb exploded on you :-(")
		else:
			print("Ball missed the paddle :-(")

		self.GAMEOVER = True
		print("Press any key to continue")
		getch()
	

	def gameWon(self):
		print("Congrats you won the game")
		trophy()	
		# Input an existing mp3 filename
		mp3File = "./sounds/game_won.WAV"
		# Play the mp3 file
		playsound(mp3File)
		getch()

	def scoreboard(self):
		print("Lives:",end='')
		for _ in range(lives):
			cprint("\u2764 ",'red',attrs=['bold'],end='')
		
		points=self.brick.Updated_Points(self)
		print("     Level:",self.level,"     SCORE:",points,"     time:",self.time)

		if self.level == 3:
			ufo_health = self.bomb.updatedhealth(self)
			maxHealth = 200    # Max Health
			healthDashes = 37  # Max Displayed dashes

			
			dashConvert = int(maxHealth/healthDashes)            # Get the number to divide by to convert health to dashes (being 10)
			currentDashes = int(ufo_health/dashConvert)              # Convert health to dash count: 80/10 => 8 dashes
			remainingHealth = healthDashes - currentDashes       # Get the health remaining to fill as space => 12 spaces

			healthDisplay = '-' * currentDashes                  # Convert 8 to 8 dashes as a string:   "--------"
			remainingDisplay = ' ' * remainingHealth             # Convert 12 to 12 spaces as a string: "            "
			percent = str(int((ufo_health/maxHealth)*100)) + "%"     # Get the percent as a whole number:   40%

			print("UFO Health:  ",end='')
			print("|" + healthDisplay + remainingDisplay + "|")  # Print out textbased healthbar
			print("                             " + percent)                    
Beispiel #5
0
    def __init__(self,
                 renderingSurface,
                 bgcolor=(0, 0, 0),
                 size=(1280, 720),
                 thickness=3,
                 autoscroll=[2, 0],
                 ratio=(1, 1),
                 successound=None):
        self.renderingSurface = renderingSurface
        self.surface = pygame.Surface(size)
        self.ratio = ratio
        self.bgcolor = bgcolor

        self.spawnpoint = 600 * ratio[1], 200 * ratio[1]

        self.player = Player(self.surface,
                             x=self.spawnpoint[0],
                             y=self.spawnpoint[1],
                             speed=autoscroll[0],
                             ratio=self.ratio)
        self.flamewall = animatedPng(self.renderingSurface,
                                     "./graphic/flamewall", 50, (40, size[1]))
        self.raspberry = pygame.image.load("graphic/raspberry.png").convert()
        self.raspberry = pygame.transform.scale(
            self.raspberry, (int(100 * ratio[1]), int(126 * ratio[1])))
        self.raspberry.set_colorkey((255, 255, 255))

        #self.ground = (x,y,length,(r,b,g))
        #self.walls = (x,y,height,(r,b,g)) height nach unten gerichtet
        #self.decolines = [x1, y1, x2, y2, z, thickness,(r,g,b)]
        #self.texts = [x,y, "text", size, [r,g,b]]
        #self.coins = (x,y,(r,b,g), wert)

        self.ground = [[1, 600 * self.ratio[1], 800, [64, 169, 64]]]
        self.stumble = []

        self.walls = []
        self.decolines = []
        self.powerups = [
        ]  #[[1200,500,"random"], [1400,500,"random"], [1800,500,"random"]]
        self.enemies = []

        self.groundManager = Grounds(self.surface, self.ground, self.ratio)
        self.wallManager = Walls(self.surface, self.walls, self.ratio)
        self.decolineManager = Decolines(self.surface, self.decolines,
                                         self.ratio)
        self.PowerUpManager = PowerUps(self.surface, self, self.powerups,
                                       self.ratio, successound)
        self.enemieManager = Enemies(
            self.surface, self, self.enemies)  # are not fully integrated, yet
        self.stumbleManager = Stumbles(self.surface, self.stumble, self.ratio,
                                       self.player)

        self.partloader = levelloader()

        self.gravity = 0.3
        self.thickness = thickness

        self.viewport = [0, 0]
        self.speedlencounter = self.viewport[0]
        self.autoscroll = autoscroll
        self.size = size

        self.genHeight = 200
        self.genWide = 80
        self.points = 0
        self.pointmultiplier = 1

        self.maxSpeedPoints = 40000
        self.speedStep = 10000
        self.timer = 1
Beispiel #6
0
class World(object):
    def __init__(self,
                 renderingSurface,
                 bgcolor=(0, 0, 0),
                 size=(1280, 720),
                 thickness=3,
                 autoscroll=[2, 0],
                 ratio=(1, 1),
                 successound=None):
        self.renderingSurface = renderingSurface
        self.surface = pygame.Surface(size)
        self.ratio = ratio
        self.bgcolor = bgcolor

        self.spawnpoint = 600 * ratio[1], 200 * ratio[1]

        self.player = Player(self.surface,
                             x=self.spawnpoint[0],
                             y=self.spawnpoint[1],
                             speed=autoscroll[0],
                             ratio=self.ratio)
        self.flamewall = animatedPng(self.renderingSurface,
                                     "./graphic/flamewall", 50, (40, size[1]))
        self.raspberry = pygame.image.load("graphic/raspberry.png").convert()
        self.raspberry = pygame.transform.scale(
            self.raspberry, (int(100 * ratio[1]), int(126 * ratio[1])))
        self.raspberry.set_colorkey((255, 255, 255))

        #self.ground = (x,y,length,(r,b,g))
        #self.walls = (x,y,height,(r,b,g)) height nach unten gerichtet
        #self.decolines = [x1, y1, x2, y2, z, thickness,(r,g,b)]
        #self.texts = [x,y, "text", size, [r,g,b]]
        #self.coins = (x,y,(r,b,g), wert)

        self.ground = [[1, 600 * self.ratio[1], 800, [64, 169, 64]]]
        self.stumble = []

        self.walls = []
        self.decolines = []
        self.powerups = [
        ]  #[[1200,500,"random"], [1400,500,"random"], [1800,500,"random"]]
        self.enemies = []

        self.groundManager = Grounds(self.surface, self.ground, self.ratio)
        self.wallManager = Walls(self.surface, self.walls, self.ratio)
        self.decolineManager = Decolines(self.surface, self.decolines,
                                         self.ratio)
        self.PowerUpManager = PowerUps(self.surface, self, self.powerups,
                                       self.ratio, successound)
        self.enemieManager = Enemies(
            self.surface, self, self.enemies)  # are not fully integrated, yet
        self.stumbleManager = Stumbles(self.surface, self.stumble, self.ratio,
                                       self.player)

        self.partloader = levelloader()

        self.gravity = 0.3
        self.thickness = thickness

        self.viewport = [0, 0]
        self.speedlencounter = self.viewport[0]
        self.autoscroll = autoscroll
        self.size = size

        self.genHeight = 200
        self.genWide = 80
        self.points = 0
        self.pointmultiplier = 1

        self.maxSpeedPoints = 40000
        self.speedStep = 10000
        self.timer = 1

    def setTimer(self, timer):
        self.timer = timer
        self.player.timer = timer

    def calcYmoving(self, object, correction=0):
        possibleMoving = [None, None]
        moving = 0

        #get groundheights
        groundHeight = self.groundManager.getGroundheight(object, correction)
        groundHeight = self.wallManager.getGroundheight(
            object, correction, groundHeight)

        if groundHeight != None:
            possibleMoving[0] = groundHeight - (object.y + object.height)
        else:
            possibleMoving[0] = None

        #search for ceiling
        ceilingHeight = self.wallManager.getCeilingheight(object, correction)
        ceilingHeight = self.groundManager.getCeilingheight(
            object, correction, ceilingHeight)

        if ceilingHeight != None:
            possibleMoving[1] = -(object.y - ceilingHeight)
        else:
            possibleMoving[1] = None

        #calc real y moving
        if object.moving[1] > 0:
            if possibleMoving[
                    0] == None or object.moving[1] < possibleMoving[0]:
                moving = object.moving[1]
            else:
                moving = possibleMoving[0]
        else:
            if possibleMoving[
                    1] == None or object.moving[1] > possibleMoving[1]:
                moving = object.moving[1]
            else:
                moving = possibleMoving[1]

        return moving, possibleMoving

    def calcXmoving(self, object, correction=0):
        possibleMoving = [None, None]
        moving = 0

        #calc possbile x moving
        wallpos = self.wallManager.getWallPos(object, correction, [None, None])
        wallpos = self.groundManager.getWallPos(object, correction, wallpos)

        if wallpos[0] != None:
            possibleMoving[0] = wallpos[0] - (object.x + object.width)
        if wallpos[1] != None:
            possibleMoving[1] = -(object.x - wallpos[1])

        #calc real x moving
        if object.moving[0] > 0:
            if possibleMoving[
                    0] == None or object.moving[0] < possibleMoving[0]:
                moving = object.moving[0]
            else:
                moving = possibleMoving[0]
        else:
            if possibleMoving[0][
                    1] == None or object.moving[0] > possibleMoving[1]:
                moving = object.moving[0]
            else:
                moving = possibleMoving[1]

        return moving, possibleMoving

    def calcGravity(self, object, list=None):
        #calc all movings
        if object.jumping:  #jumping
            object.specMoving.append(
                (0, self.ratio[1] * 2 *
                 (-(object.jumpEnergy +
                    (object.superjumpEnergy if object.superJump else 0)))))

        if object.affectedByGravity and not object.standOnGround:  #gravity
            object.specMoving.append(
                (0, self.ratio[1] * 2 *
                 (self.gravity * object.jumpTime * self.timer)))
            object.jumpTime += 1

        object.calcMoving()

        #calc possible moving
        #calc possbile y moving
        possibleMoving = [0, 0]
        moving = [0, 0]

        if abs(object.moving[0]) > abs(object.moving[1]):
            moving[0], possibleMoving[0] = self.calcXmoving(object)
            moving[1], possibleMoving[1] = self.calcYmoving(
                object, moving[0])  #y berechnung anpassen
        else:
            moving[1], possibleMoving[1] = self.calcYmoving(object)
            moving[0], possibleMoving[0] = self.calcXmoving(
                object, moving[1])  #x berechnung anpassen

        #check if stands on Ground
        if possibleMoving[1][0] == moving[1]:
            object.standOnGround = True
            object.jumping = False
            object.superJump = False
            object.jumpTime = 0
            object.jumpEnergy = object.minJumpEnergy
        elif possibleMoving[1][1] == moving[
                1] and object.moving[1] < 0:  #check if hangs under ceiling
            object.jumping = False
            object.superJump = False
            object.jumpTime = 0
            object.standOnGround = False
            object.jumpEnergy = object.minJumpEnergy
        else:
            object.standOnGround = False

        #do real moving
        object.y += moving[1]
        object.x += moving[0]

        #fallen down
        if object.y > self.size[1]:
            if not object.player:
                list.remove(object)

        if object.player:
            #prevent walking outside at left side
            if object.x - self.viewport[0] < 25 or object.y > self.size[1]:
                object.life = False
            self.autoscroll[0] = 2 + (float(self.speedlencounter) /
                                      float(self.speedStep))
            object.speed = self.autoscroll[0]
            #get Coins
            self.PowerUpManager.power()
            self.PowerUpManager.collectPowerUps()

            if self.stumbleManager.stumbled():
                self.speedlencounter = self.speedlencounter - self.speedStep if not self.speedlencounter < self.speedStep else 0
                self.player.jumpTime = 0
                superbuffer = self.player.superJumpenabled
                self.player.superJump = False
                self.player.superJumpenabled = False
                self.player.jump()
                self.player.turn()
                self.player.superJumpenabled = superbuffer

            self.player.rect.left = object.x
            self.player.rect.top = object.y

        #update viewports
        object.viewport = self.viewport
        self.wallManager.viewport = self.viewport
        self.groundManager.viewport = self.viewport
        self.PowerUpManager.viewport = self.viewport
        self.decolineManager.viewport = self.viewport
        self.stumbleManager.viewport = self.viewport

    def render(self):
        self.surface.fill(self.bgcolor)
        #do autoscroll
        self.viewport[0] += self.timer * self.autoscroll[0] * self.ratio[1] * 2
        self.viewport[1] += self.timer * self.autoscroll[1] * self.ratio[1] * 2
        self.speedlencounter = self.speedlencounter + self.timer * self.autoscroll[
            0] if self.speedlencounter + self.timer * self.autoscroll[
                0] <= self.maxSpeedPoints else self.maxSpeedPoints

        #render gameobjects
        self.decolineManager.render(0)
        position = self.groundManager.render()
        posbuffer = self.wallManager.render()
        self.PowerUpManager.render()
        self.PowerUpManager.renderBar()
        self.decolineManager.render(1)

        self.calcGravity(self.player)
        self.player.render()

        self.stumbleManager.render()
        self.decolineManager.render(2)
        self.renderingSurface.blit(self.surface, (0, 0))

        self.renderingSurface.blit(self.raspberry, (50, 0))
        self.flamewall.render(0, 0)

        if posbuffer > position:
            position = posbuffer
        self.generateWorld(position)
        self.points += self.pointmultiplier * self.timer * (self.player.speed /
                                                            2)**2

    def generateWorld(self, position):
        if self.viewport[0] + self.size[0] + 200 > position:
            partbuffer = self.partloader.getRandPart(self.player.speed)

            self.groundManager.load(partbuffer["grounds"], position)
            self.wallManager.load(partbuffer["walls"], position)
            self.decolineManager.load(partbuffer["decolines"], position)
            self.stumbleManager.load(partbuffer["stumbles"], position)
            self.PowerUpManager.load(partbuffer["powerups"], position)
            """for enemie in json.loads(file.readline()):