Exemple #1
0
class GameEngine(object):

    def __init__(self, screen, screenSize):
        
        self.bg = Background(screenSize)
        self.player = Player()
        self.player.setLimits(self.bg.getMapSize())
        self.bg.updatePlayerSize(self.player.getSize())
        
        self.bg.display(screen)
        pygame.display.update()
        print("*** Screen loaded ***")
        
    
    def update(self, screen):
        '''
        1 - check where player is
        2 - listen to events
        3 - events + player loc -> player speeds
        4 - player speeds -> new player loc
        5 - player loc on bg
        6 - display
        '''
        # calculating player speed
        isPlayerOnTerrain = self.bg.isPlayerOnTerrain(self.player.getPos())
        self._listenToEvents(isPlayerOnTerrain)
        self.player.modifySpeedByPhysics(isPlayerOnTerrain)
        
        # calculating player new position, bg coordinate system
        newPlayerPos = self.player.calcNewPos()
        newPlayerPosCollided = self.bg.detectCollision(self.player.getPos(), newPlayerPos)
        self.player.setPos(newPlayerPosCollided)
        
        # display
        self.bg.moveBg(newPlayerPosCollided)
        playerScreenPos = self.bg.getPlayerScreenPos(newPlayerPosCollided)
        self.bg.display(screen)
        self.player.display(screen, playerScreenPos)
        pygame.display.update()
        
        return self.player.didWinYet()
        
    def _listenToEvents(self, isOnTerrain):
        keys = pygame.key.get_pressed() # checking pressed keys
        
        if keys[pygame.K_UP]:
            self.player.moveUp(isOnTerrain)
        if keys[pygame.K_LEFT]:
            self.player.moveLeft()
            return                  # return for dominant left moving behavior
        if keys[pygame.K_RIGHT]:
            self.player.moveRight()
        if keys[pygame.K_p]:
            if getTestMode():
                self._printStatus()
            
    def _printStatus(self):
        pos = self.player.getPos()
        print("Player pos: " + str(pos))
        mapPos = self.bg.pos
        print("Map pos: " + str(mapPos))
        
        if _isOnLine(pos[1], self.bg.charSize[1]):
            line = _getLine(self.bg.bgMap, pos[1], self.bg.charSize[1])
            _printLine(line)