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 __init__(self, nombre): self.bloques = dict() self.nombre = nombre self.stage = "STAGE1_4" self.PUps = PowerUps()
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)
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
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()):