def __init__(self, dimensions): width, height = dimensions IsoGrid.__init__(self, dimensions, [[Cell(x, y) for y in range(height)] for x in range(width)]) self.groundGrid = GroundGrid(dimensions) self.playerGrid = PlayerGrid(dimensions) self.camera = [0, 0] self.layers = [self.groundGrid, self.playerGrid] self.renderOrder = [self[coord] for coord in isoGridRenderOrder(self.width, self.height)] self.selection = None self.hud = Hud(dimensions) self.selectedPlayer = None self.select(self.camera)
def __init__(self, MapSize, MapType, Dude): TileGrid = [] # contains MapTile objects representing the level GameHud = Hud.Hud() GameMap = Map.Map(TileGrid, MapSize, MapType, GameHud, Dude) frameCount = 0 # for use in idle sprite animation Done = False # main game loop while not Done: for event in pygame.event.get(): if event.type == pygame.QUIT: Done = True elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: GameMap.MovePlayer("LEFT") if event.key == pygame.K_RIGHT: GameMap.MovePlayer("RIGHT") if event.key == pygame.K_UP: GameMap.MovePlayer("UP") if event.key == pygame.K_DOWN: GameMap.MovePlayer("DOWN") Screen.fill(BLACK) # zoomed in scrolling camera effect startRowBoundary = GameMap.Dude.Row - 2 startColumnBoundary = GameMap.Dude.Column - 2 if startRowBoundary < 0: startRowBoundary = 0 if startColumnBoundary < 0: startColumnBoundary = 0 endRowBoundary = startRowBoundary + (VisibleArea - 1) endColumnBoundary = startColumnBoundary + (VisibleArea - 1) if endRowBoundary > MapSize: endRowBoundary = MapSize if endColumnBoundary > MapSize: endColumnBoundary = MapSize startRowBoundary = endRowBoundary - (VisibleArea - 1) startColumnBoundary = endColumnBoundary - (VisibleArea - 1) rowCount = 0 colCount = 0 # draws the sprite for each tile on the screen for Row in range(startRowBoundary, endRowBoundary+1): colCount = 0 for Column in range(startColumnBoundary, endColumnBoundary+1): sprite = pygame.image.load("graphics/ForestLevel/blank.png") spriterect = sprite.get_rect() if GameMap.TileGrid[Column][Row].Name == "Wall": sprite = GameMap.TileGrid[Column][Row].Sprite if GameMap.TileGrid[Column][Row].Name == "Dude": if frameCount < 15: sprite = GameMap.TileGrid[Column][Row].Sprite1 else: sprite = GameMap.TileGrid[Column][Row].Sprite2 if GameMap.TileGrid[Column][Row].Name == "Energy": sprite = pygame.image.load("graphics/energy.png") if GameMap.TileGrid[Column][Row].Name == "Ground": sprite = GameMap.TileGrid[Column][Row].Sprite if GameMap.TileGrid[Column][Row].Name == "Enemy": sprite = GameMap.TileGrid[Column][Row].Sprite if GameMap.TileGrid[Column][Row].Name == "Portal": sprite = GameMap.TileGrid[Column][Row].Sprite spriterect = sprite.get_rect() spriterect.x = TileSize * colCount spriterect.y = TileSize * rowCount Screen.blit(sprite, spriterect) colCount = colCount + 1 rowCount = rowCount + 1 GameHud.draw(Screen, GameMap.Dude) frameCount = frameCount + 1 if frameCount == 30: frameCount = 0 Clock.tick(30) pygame.display.flip() GameMap.update() pygame.quit()
def new(self, mapPath): self.mapPath = mapPath self.map = tiledMap(mapPath) self.mapImg = self.map.makeMap(self) self.mapRect = self.mapImg.get_rect() self.camera = Camera(self.mapRect.x, self.mapRect.y) self.frontSprites = pygame.sprite.Group() self.backSprites = pygame.sprite.Group() self.allSprites = pygame.sprite.Group() self.triggers = pygame.sprite.Group() self.holes = pygame.sprite.Group() self.players = pygame.sprite.Group() self.walls = pygame.sprite.Group() self.spikes = pygame.sprite.Group() self.bullets = pygame.sprite.Group() self.enemies = pygame.sprite.Group() self.enemyBullet = pygame.sprite.Group() self.chests = pygame.sprite.Group() self.allUpgrades = pygame.sprite.Group() self.allDrops = pygame.sprite.Group() self.savers = pygame.sprite.Group() self.texts = {} self.hasBoss = False if name == 'nt': if mapPath == '../Maps\\mapBoss1.tmx': self.hasBoss = True else: if mapPath == '../Maps/mapBoss1.tmx': self.hasBoss = True if self.hasBoss: self.boss = BossController(self) for i in self.map.tmdata.objects: if i.name == 'spawn': self.player = Player(self, 1, i.x, i.y) if self.hasBoss: self.boss.setSpawn(i.x, i.y) elif i.name == 'wall': Wall(self, i.x, i.y, i.width, i.height) elif i.name == 'end': End(self, i.x, i.y, i.width, i.height) elif i.name == 'hole': Hole(self, i.x, i.y, i.width, i.height) elif i.name == 'spike': Spike(self, i.x, i.y, i.width, i.height, i.type) elif i.name == 'enemy': if not self.hasBoss: Enemy(self, i.x, i.y, i.width, i.height) else: self.boss.addEnemiesArena(i.x, i.y, i.width, i.height) elif i.name == 'chest': Chest(self, i.x, i.y, i.width, i.height) elif i.name == 'save': Save(self, self.menu, i.x, i.y, i.width, i.height) elif i.name == 'boss': self.boss.setPos(i.x, i.y) elif i.name == 'bossCopy': self.boss.addCopy(i.x, i.y) elif i.name == 'spawn1': self.boss.setSpawn1(i.x, i.y) elif i.name == 'spawn2': self.boss.setSpawn2(i.x, i.y) elif i.name == 'bossSpawn': self.boss.setBossSpawn(i.x, i.y) elif i.name == 'enemyAfter': self.boss.addEnemiesAfter(i.x, i.y) self.hud = Hud(self) self.camera = Camera(self.mapRect.width, self.mapRect.height) print(self.walls) print(self.triggers) print(self.mapsAlreadyPlayed)
class game(): def __init__(self, menu): #Variaveis iniciais pygame.init() self.menu = menu self.eventDamage = pygame.USEREVENT + 1 self.action = False self.tempVar = 0 self.textGui = textGui() self.data = Interpreter('configs') self.speedB = 5 self.screenSize = self.data.getParameter('screenSize') self.fps = self.data.getParameter('fps') self.screen = pygame.display.set_mode(self.screenSize) self.screen.set_alpha(128) pygame.display.set_caption("Dungeons And Caves") self.clock = pygame.time.Clock() self.done = False self.mag = 10 self.debugStatus = self.data.getParameter('debug') if name == 'nt': self.mapsAlreadyPlayed = ['../Maps\\map1.tmx'] else: self.mapsAlreadyPlayed = ['../Maps/map1.tmx'] def new(self, mapPath): self.mapPath = mapPath self.map = tiledMap(mapPath) self.mapImg = self.map.makeMap(self) self.mapRect = self.mapImg.get_rect() self.camera = Camera(self.mapRect.x, self.mapRect.y) self.frontSprites = pygame.sprite.Group() self.backSprites = pygame.sprite.Group() self.allSprites = pygame.sprite.Group() self.triggers = pygame.sprite.Group() self.holes = pygame.sprite.Group() self.players = pygame.sprite.Group() self.walls = pygame.sprite.Group() self.spikes = pygame.sprite.Group() self.bullets = pygame.sprite.Group() self.enemies = pygame.sprite.Group() self.enemyBullet = pygame.sprite.Group() self.chests = pygame.sprite.Group() self.allUpgrades = pygame.sprite.Group() self.allDrops = pygame.sprite.Group() self.savers = pygame.sprite.Group() self.texts = {} self.hasBoss = False if name == 'nt': if mapPath == '../Maps\\mapBoss1.tmx': self.hasBoss = True else: if mapPath == '../Maps/mapBoss1.tmx': self.hasBoss = True if self.hasBoss: self.boss = BossController(self) for i in self.map.tmdata.objects: if i.name == 'spawn': self.player = Player(self, 1, i.x, i.y) if self.hasBoss: self.boss.setSpawn(i.x, i.y) elif i.name == 'wall': Wall(self, i.x, i.y, i.width, i.height) elif i.name == 'end': End(self, i.x, i.y, i.width, i.height) elif i.name == 'hole': Hole(self, i.x, i.y, i.width, i.height) elif i.name == 'spike': Spike(self, i.x, i.y, i.width, i.height, i.type) elif i.name == 'enemy': if not self.hasBoss: Enemy(self, i.x, i.y, i.width, i.height) else: self.boss.addEnemiesArena(i.x, i.y, i.width, i.height) elif i.name == 'chest': Chest(self, i.x, i.y, i.width, i.height) elif i.name == 'save': Save(self, self.menu, i.x, i.y, i.width, i.height) elif i.name == 'boss': self.boss.setPos(i.x, i.y) elif i.name == 'bossCopy': self.boss.addCopy(i.x, i.y) elif i.name == 'spawn1': self.boss.setSpawn1(i.x, i.y) elif i.name == 'spawn2': self.boss.setSpawn2(i.x, i.y) elif i.name == 'bossSpawn': self.boss.setBossSpawn(i.x, i.y) elif i.name == 'enemyAfter': self.boss.addEnemiesAfter(i.x, i.y) self.hud = Hud(self) self.camera = Camera(self.mapRect.width, self.mapRect.height) print(self.walls) print(self.triggers) print(self.mapsAlreadyPlayed) def gameRun(self, loading=None): a = randint(0, 1) if name == 'nt': mapPath = '../Maps\\map1.tmx' else: mapPath = '../Maps/map1.tmx' if a == 0: self.menu.sound.playMusic(0, 0) else: self.menu.sound.playMusic(0, 1) if loading is None: self.saveName = 'Slot 0' self.saves = saveGetter(self, 'Slot 0') else: if loading == 'Slot 0': self.saveName = 'Slot 0' self.mapsAlreadyPlayed.clear() self.saves = saveGetter(self, 'Slot 0') else: self.saveName = loading self.saves = saveGetter(self, loading, loadind=True) mapPath = self.mapsAlreadyPlayed[-1] self.new(mapPath=mapPath) while not self.done: self.events() self.update() self.debug() self.draw() self.done = False def events(self): key = pygame.key.get_pressed() for e in pygame.event.get(): if e.type == pygame.QUIT: self.done = True if e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE: if len(self.savers.sprites()) > 0: if not self.savers.sprites()[0].opened: self.done = True ''' if e.type == pygame.KEYDOWN and e.key == pygame.K_0: self.player.life += 1 elif e.type == pygame.KEYDOWN and e.key == pygame.K_9: self.player.life -= 1 for i in self.spikes: i.invert() elif e.type == pygame.KEYDOWN and e.key == pygame.K_8: self.player.maxLife += 2 self.tempVar += 1 if self.tempVar == 3: self.tempVar = 0 elif e.type == pygame.KEYDOWN and e.key == pygame.K_7: self.player.maxLife -= 2 self.tempVar -= 1 elif e.type == pygame.KEYDOWN and e.key == pygame.K_p: for i in self.enemies: i.kill() elif e.type == pygame.KEYDOWN and e.key == pygame.K_o: for i in self.boss.copies: i.kill() ''' if e.type == pygame.KEYDOWN and e.key == pygame.K_e: self.action = True elif e.type == self.eventDamage: self.player.life -= 1 self.player.events() def update(self): self.clock.tick(self.fps) self.savers.update() self.camera.update(self.player) self.allSprites.update() self.triggers.update() self.holes.update() self.spikes.update() self.enemies.update() self.chests.update() self.allUpgrades.update() self.hud.update() self.allDrops.update() self.menu.sound.update() if self.hasBoss: self.boss.update() # pygame.display.set_caption(str(self.player.getPos()) + 'FPS = ' + str(self.clock.get_fps())) #str(self.player.getPos()) + 'FPS = ' + str(self.clock.get_fps()) def draw(self): self.screen.fill((0, 0, 0)) self.screen.blit(self.map.underLayer, self.camera.apply_rect(self.mapRect)) for i in self.spikes: self.screen.blit(i.spikeStates[i.getRenderImg()], self.camera.apply(i)) for i in self.enemies: self.screen.blit(i.enemiesTypes[i.enemyType], self.camera.apply(i)) for i in self.chests: self.screen.blit(i.image, self.camera.apply(i)) for i in self.allSprites.sprites(): self.screen.blit(i.getImg(), self.camera.apply(i)) if self.hasBoss: self.boss.draw() self.screen.blit(self.map.upperLayer, self.camera.apply_rect(self.mapRect)) for i in self.allUpgrades.sprites(): self.screen.blit(i.itemImg, self.camera.apply(i)) for i in self.allDrops.sprites(): i.draw() for i in self.savers.sprites(): i.draw() for key, text in self.texts.items(): textSurface = self.textGui.text(text[0], color=(255, 255, 255)) textSize = self.textGui.size(text[0]) textSurface = pygame.transform.scale( textSurface, (int(textSize[0] / 3), int(textSize[1] / 3))) textPos = [text[1][0], text[1][1]] self.screen.blit(textSurface, self.camera.applyPos(textPos)) self.hud.draw() pygame.display.flip() def debug(self): if self.debugStatus: temp = pygame.Surface( (self.player.rect.width, self.player.rect.height)) temp.fill((255, 255, 255)) self.screen.blit(temp, self.camera.apply(self.player))
enfermeira_direita = Enfermeira.EnfermeiraDireita(janela_largura, janela_altura) enfermeira_esquerda = Enfermeira.EnfermeiraEsquerda(janela_largura, janela_altura) # Cirurgia cirurgia = Cirurgia(janela) # Soldado soldados = [] for i in range(150, 500, 85): soldados.append(Soldado.SoldadoEsquerda(janela, i)) soldados.append(Soldado.SoldadoDireita(janela, i)) # Hud hud = Hud(janela) # Penicilina penicilina = Penicilina(hud, janela) # Bandagem bandagem = Bandagem(hud, janela) # Barras barras = Barras(hud) barra_fome = BarraFome(barras) barra_sono = BarraSono(barras) inicio_espaco = cirurgia.objeto.y + cirurgia.altura - ( (3 * enfermeira.altura) / 4) + enfermeira.altura fim_espaco = hud.objeto.y + (2 * enfermeira.altura / 5)
class IsoScene(IsoGrid): def __init__(self, dimensions): width, height = dimensions IsoGrid.__init__(self, dimensions, [[Cell(x, y) for y in range(height)] for x in range(width)]) self.groundGrid = GroundGrid(dimensions) self.playerGrid = PlayerGrid(dimensions) self.camera = [0, 0] self.layers = [self.groundGrid, self.playerGrid] self.renderOrder = [self[coord] for coord in isoGridRenderOrder(self.width, self.height)] self.selection = None self.hud = Hud(dimensions) self.selectedPlayer = None self.select(self.camera) def render(self, dimensions): surface = pygame.Surface(dimensions, pygame.SRCALPHA, 32) centeringOffset = isoCoordinates(self.camera[0], self.camera[1]) offsetX = dimensions[0]/2 - (Config.tileWidth/2) - centeringOffset[0] offsetY = dimensions[1]/2 - (Config.tileHeight/2) - centeringOffset[1] for cell in self.renderOrder: self.renderCell(surface, cell, (offsetX, offsetY), cell == self.selection) self.hud.render(surface) return surface def renderCell(self, surface, cell, offset, selected=False): for layer in self.layers: layer.renderCell(surface, cell, offset, selected) def addPlayer(self): self.playerGrid def shiftCamera(self, x, y): self.camera[0] += x self.camera[1] += y def playerWalkTo(self, player, target): here = self.playerGrid.find(player) path = self.pathTo(here, target) if path: return self.playerGrid.shiftPlayer(player, path[1][0]-here[0], path[1][1]-here[1]) return False def select(self, coord): if self.validCoord(coord): self.selection = self[coord] self.hud.selectedPlayerA = self.playerGrid[coord] self.camera = list(coord) def pathTo(self, a, b): if a == b: return None class Node: def __init__(self, root): self.root = root def neighbours(coord): x, y = coord return [(x+1,y), (x,y+1), (x-1,y), (x,y-1)] def getPath(grid, pathNodes, node): path = [n] node = nodes[n] while node.root != None: path.insert(0, node.root) node = nodes[node.root] return path WALKED = 2 WALKABLE = 0 WALL = 1 dist = [[WALKABLE for y in range(self.height)] for x in range(self.width)] q = [a] for y in range(self.height): for x in range(self.width): if self.playerGrid[(x,y)] != None: dist[x][y] = WALL dist[a[0]][a[1]] = WALKED nodes = {a : Node(None)} while len(q) > 0: here = q.pop(0) for n in neighbours(here): if self.validCoord(n) and self[here].h+Config.maxJumpHeight-self[n].h >= 0: if n == b: nodes[n] = Node(here) return getPath(dist, nodes, here) x, y = n if dist[x][y] == WALKABLE: q.append(n) dist[x][y] = WALKED nodes[n] = Node(here) return None def triggerSelection(self): if self.selectedPlayer: self.walkToSelection() self.selectedPlayer = None else: self.selectedPlayer = self.playerGrid[self.selection.xy()] def walkToSelection(self): if self.selectedPlayer: self.selectedPlayer.doAction(WalkAction(Config.playerWalkSpriteIds, 0, 0, self.selection.xy()))