Exemple #1
0
pauseMenuResume = Image.get('PauseMenuResume')
pauseMenuRestart = Image.get('PauseMenuRestart')
pauseMenuExit = Image.get('PauseMenuExit')
gameOverRetry = Image.get('GameOverRetry')
gameOverExit = Image.get('GameOverExit')
highScoreBackground = Image.get('HighScoreBackground')
highScoresFile = open('scores.txt', 'r+')
sidebar = Sidebar()
game = Engine(screen, sidebar)
Enemy.setSidebar(sidebar)
player = Player(game)


# Initializing stuff on boot
clock = pygame.time.Clock()
game.frame = 0
gameOpen = True
currentMenuScreen = mainMenuNewGame
currentPauseScreen = pauseMenuResume
currentQuitScreen = gameOverRetry
screenSelect = [True, False]
pauseSelect = [True, False, False]
quitSelect = [True, False]
highScores = []
for score in highScoresFile:
	highScores.append(score)
	
scoresFont = pygame.font.SysFont("monospace", 18)

def gameOverScreen():
	currentQuitScreen = gameOverRetry
Exemple #2
0
class Game(object):
    """Game logic class.

    Manage all the logics related with single and multi games."""

    def __init__(self):

        # First tank is always the player tank
        self.tanks = []
        self.shoots = []
        self.gametype = GAMETYPE_SINGLE

    def single(self):
        """Starts a single player mode."""

        # Prepare pygame, screen and clock.
        pygame.init()
        self.engine = Engine()
        self.screen_size = self.engine.screen_size
        self.clock = pygame.time.Clock()

        # Used by the keyboard input filter
        self.player_keys = [False, False, False, False]

        # Spawns the player tank in the upper-left corner.
        player_tank = Tank(
            self,
            [TANK_RADIUS + TANK_MARGIN, TANK_RADIUS + TANK_MARGIN],
            FACING_EAST,
            SPRITE_PLAYER
        )

        # Spawns a single enemy in the bottom-right corner.
        enemy_tank = Tank(
            self,
            [self.screen_size[0] - TANK_RADIUS + TANK_MARGIN,
                self.screen_size[1] - TANK_RADIUS + TANK_MARGIN],
            FACING_WEST,
            SPRITE_ENEMY
        )

        # Append the tanks and start the game
        self.tanks.append(player_tank)
        self.tanks.append(enemy_tank)
        self.running = True
        self.game_loop()

    def game_loop(self):
        """Main game loop."""

        while self.running:
            self.manage_events()
            self.update()
            self.engine.frame()
            self.clock.tick(GAME_TPS)

    def update(self):
        """Update all the game entities (tick)."""

        # Update tanks
        for tank in self.tanks:
            tank.update()

        # Update shoots
        for shoot in self.shoots:
            shoot.update()

    def manage_events(self):
        """Manage pygame events."""

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False
            elif event.type == pygame.KEYDOWN or event.type == pygame.KEYUP:
                self.keyboard_event(event)

    def keyboard_event(self, event):
        """
        Manage pygame events related with the keyboard.

        Pretty UP DOWN LEFT RIGHT arrows filter here. The trick is done with
        an instance variable holding the last status between key events.
        """

        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            if self.tanks[0].ball_reload < 1:
                if self.tanks[0].orientation == FACING_EAST:
                    new_shoot = Shoot(
                        self,
                        [self.tanks[0].position[0] + TANK_RADIUS + 1,
                        self.tanks[0].position[1]],
                        FACING_EAST
                    )
                elif self.tanks[0].orientation == FACING_SOUTH:
                    new_shoot = Shoot(
                        self,
                        [self.tanks[0].position[0],
                        self.tanks[0].position[1] + TANK_RADIUS + 1],
                        FACING_SOUTH
                    )
                elif self.tanks[0].orientation == FACING_WEST:
                    new_shoot = Shoot(
                        self,
                        [self.tanks[0].position[0] - TANK_RADIUS + 1,
                        self.tanks[0].position[1]],
                        FACING_WEST
                    )
                elif self.tanks[0].orientation == FACING_NORTH:
                    new_shoot = Shoot(
                        self,
                        [self.tanks[0].position[0],
                        self.tanks[0].position[1] - TANK_RADIUS + 1],
                        FACING_NORTH
                    )
                self.tanks[0].ball_reload = BULLET_DELAY
                self.shoots.append(new_shoot)

        if event.type == pygame.KEYDOWN and (
            event.key == pygame.K_RIGHT or
            event.key == pygame.K_DOWN or
            event.key == pygame.K_LEFT or
            event.key == pygame.K_UP
        ):
            if event.key == pygame.K_RIGHT:
                self.tanks[0].orientation = FACING_EAST
                self.player_keys[0] = True
            if event.key == pygame.K_DOWN:
                self.tanks[0].orientation = FACING_SOUTH
                self.player_keys[1] = True
            if event.key == pygame.K_LEFT:
                self.tanks[0].orientation = FACING_WEST
                self.player_keys[2] = True
            if event.key == pygame.K_UP:
                self.tanks[0].orientation = FACING_NORTH
                self.player_keys[3] = True

        if event.type == pygame.KEYUP and (
            event.key == pygame.K_RIGHT or
            event.key == pygame.K_DOWN or
            event.key == pygame.K_LEFT or
            event.key == pygame.K_UP
        ):
            if event.key == pygame.K_RIGHT:
                self.player_keys[0] = False
            if event.key == pygame.K_DOWN:
                self.player_keys[1] = False
            if event.key == pygame.K_LEFT:
                self.player_keys[2] = False
            if event.key == pygame.K_UP:
                self.player_keys[3] = False
            if (self.player_keys[0] or self.player_keys[1] or
                self.player_keys[2] or self.player_keys[3]):
                if self.player_keys[0]:
                    self.tanks[0].orientation = FACING_EAST
                elif self.player_keys[1]:
                    self.tanks[0].orientation = FACING_SOUTH
                elif self.player_keys[2]:
                    self.tanks[0].orientation = FACING_WEST
                elif self.player_keys[3]:
                    self.tanks[0].orientation = FACING_NORTH

        if (
            event.key == pygame.K_RIGHT or
            event.key == pygame.K_DOWN or
            event.key == pygame.K_LEFT or
            event.key == pygame.K_UP
        ):
            self.tanks[0].trust = (
                self.player_keys[0] or self.player_keys[1] or
                self.player_keys[2] or self.player_keys[3]
            )