Beispiel #1
0
 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)
Beispiel #2
0
    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()
Beispiel #3
0
    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)
Beispiel #4
0
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))
Beispiel #5
0
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)
Beispiel #6
0
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()))