Пример #1
0
    def __init__(
                self, world, name="Player", isAI=False,
                shipFollow=False, shipToFollow=None,
                life=10, score=0, xp=0):
        '''Handles players and AI's'''
        self.name = name
        self.isAI = isAI
        self.life = life
        self.score = score
        self.xp = xp

        taskMgr.add(self.updateXp, "updates xp needed")

        '''
        Suggestions for leveling system:
        Power/strength: Changes the amount of damage you do.
        and type of weapons you can get
        Attack rating: an overall calculation of how much damage you do,
        essentially this is how much damage you do.
        I have a lot more ideas for this but i'm friggen tired right now.
        '''
        if self.isAI:
            self.ship = BasicEnemyShip(world, self.name, self, shipFollow, shipToFollow)
        else:
            self.ship = PlayerShip(world, self.name, self)
Пример #2
0
    def __init__(self):

        #initialise modules in use
        pygame.init()
        pygame.font.init()
        pygame.mixer.init()

        #game loop variables
        self.runningGame = True
        self.pausedGame = False
        self.inMainMenu = True
        self.inControlMenu = False
        self.enemiesRemaining = 0
        self.hasShield = False
        self.gameOver = False

        #create and define the screen window
        self.screenHeight, self.screenWidth = 600, 400
        self.window = pygame.display.set_mode(
            [self.screenWidth, self.screenHeight])
        pygame.display.set_caption("Logic Wars")
        pygame.display.set_icon(
            pygame.image.load("../Assets/Art/ORgateShipRevision1.png"))

        #define game background
        self.screen = pygame.Surface([self.screenWidth, self.screenHeight])
        self.imagePath = "../Assets/Art/TestDayBackground.png"
        self.backgroundImage = pygame.image.load(self.imagePath).convert()
        self.yScaler = 0
        self.changeFrame = True

        #create all sprites for the game
        #ship sprite
        self.shipxPos, self.shipyPos = 200, 400
        self.player = PlayerShip((self.shipxPos, self.shipyPos))
        #health bar sprites
        self.healthBarShadow = PlayerHealth("black", (51, 586),
                                            self.player.health)
        self.healthBar = PlayerHealth("white", (50, 585), self.player.health)
        self.playerScoreShadow = PlayerScore("black", (35, 10))
        self.playerScore = PlayerScore("white", (34, 10))
        self.playerLivesShadow = PlayerLives("black", (351, 586),
                                             self.player.lives)
        self.playerLives = PlayerLives("white", (350, 585), self.player.lives)
        #pause menu sprites
        self.pauseText1 = PauseGameText("white", "PAUSED", 36, (200, 200))
        self.pauseText2 = PauseGameText("white", "press 'p' to return", 26,
                                        (200, 250))
        #main menu sprites
        self.mainMenuText1 = PauseGameText("white", "Logic Wars", 36,
                                           (200, 200))
        self.mainMenuText2 = PauseGameText("white", "Press SPACE to Start!",
                                           26, (200, 250))
        self.mainMenuText3 = PauseGameText("white",
                                           "Press 'c' to see the controls", 26,
                                           (200, 300))
        #control menu sprites
        self.controlMenuText1 = PauseGameText("white", "SHIP CONTROLS", 36,
                                              (200, 200))
        self.controlMenuText2 = PauseGameText("white",
                                              "w,a,s,d for ship movement", 26,
                                              (200, 250))
        self.controlMenuText3 = PauseGameText("white",
                                              "arrow keys for ship movement",
                                              26, (200, 300))
        self.controlMenuText4 = PauseGameText("white", "SPACE to fire", 26,
                                              (200, 350))
        self.controlMenuText5 = PauseGameText("white", "p to pause the game",
                                              26, (200, 400))
        self.controlMenuText6 = PauseGameText("white",
                                              "press c to return to menu ", 26,
                                              (200, 500))
        self.controlMenuText7 = PauseGameText("white",
                                              "or SPACE to start game", 26,
                                              (200, 520))
        #game over sprites
        self.gameOverText1 = PauseGameText("white", "GAME OVER", 36,
                                           (200, 200))
        self.gameOverText2 = PauseGameText("white", "you lost the game", 26,
                                           (200, 400))
        self.gameOverText3 = PauseGameText("white", "press ENTER to retry", 26,
                                           (200, 420))

        #create the sprite groups to which the respective sprites belong
        self.spriteList = pygame.sprite.LayeredUpdates()
        self.spriteList.add(self.playerScoreShadow)
        self.spriteList.add(self.playerScore)
        self.spriteList.add(self.healthBarShadow)
        self.spriteList.add(self.healthBar)
        self.spriteList.add(self.playerLivesShadow)
        self.spriteList.add(self.playerLives)
        self.spriteList.add(self.player)

        self.projectileList = pygame.sprite.Group()
        self.enemyList = pygame.sprite.Group()
        self.enemyProjectileList = pygame.sprite.Group()
        self.tokenList = pygame.sprite.Group()

        #adds sprites to the pause menu group
        self.pauseMenuItems = pygame.sprite.Group()
        self.pauseMenuItems.add(self.pauseText1)
        self.pauseMenuItems.add(self.pauseText2)

        #adds sprites to the main menu group
        self.mainMenuItems = pygame.sprite.Group()
        self.mainMenuItems.add(self.mainMenuText1)
        self.mainMenuItems.add(self.mainMenuText2)
        self.mainMenuItems.add(self.mainMenuText3)

        #adds sprites to the control menu group
        self.controlMenuItems = pygame.sprite.Group()
        self.controlMenuItems.add(self.controlMenuText1)
        self.controlMenuItems.add(self.controlMenuText2)
        self.controlMenuItems.add(self.controlMenuText3)
        self.controlMenuItems.add(self.controlMenuText4)
        self.controlMenuItems.add(self.controlMenuText5)
        self.controlMenuItems.add(self.controlMenuText6)
        self.controlMenuItems.add(self.controlMenuText7)

        #adds sprites to the game over group
        self.gameOverMenuItems = pygame.sprite.Group()
        self.gameOverMenuItems.add(self.gameOverText1)
        self.gameOverMenuItems.add(self.gameOverText2)
        self.gameOverMenuItems.add(self.gameOverText3)
        self.gameOverMenuItems.add(self.playerScore)

        #define game sounds and music
        self.projectileSound = pygame.mixer.Sound(
            "../Assets/SoundEffects/laser shot.wav")
        self.shipExplosion = pygame.mixer.Sound(
            "../Assets/SoundEffects/ship explosion.wav")
        self.bomb = pygame.mixer.Sound("../Assets/SoundEffects/bomb.wav")
        self.triProjectileSound = pygame.mixer.Sound(
            "../Assets/SoundEffects/triProjectile.ogg")
        self.shieldSound = pygame.mixer.Sound(
            "../Assets/SoundEffects/shield.wav")
        self.addHealth = pygame.mixer.Sound(
            "../Assets/SoundEffects/addHealth.wav")
        self.gameOverSound = pygame.mixer.Sound(
            "../Assets/SoundEffects/gameOver.wav")
        self.oneUp = pygame.mixer.Sound("../Assets/SoundEffects/oneUp.ogg")

        #control mapping for player in game
        self.key_map = {
            pygame.K_w: [self.player.keyUp, self.player.keyDown],
            pygame.K_s: [self.player.keyDown, self.player.keyUp],
            pygame.K_a: [self.player.keyLeft, self.player.keyRight],
            pygame.K_d: [self.player.keyRight, self.player.keyLeft],
            pygame.K_UP: [self.player.keyUp, self.player.keyDown],
            pygame.K_DOWN: [self.player.keyDown, self.player.keyUp],
            pygame.K_LEFT: [self.player.keyLeft, self.player.keyRight],
            pygame.K_RIGHT: [self.player.keyRight, self.player.keyLeft]
        }

        #limit game clock
        self.gameClock = pygame.time.Clock()
        self.gameClock.tick(30)

        #spawns the first batch of enemies
        self.spawnEnemies()

        # draw and display on screen
        pygame.display.update()
        pygame.display.flip()
Пример #3
0
class MainLoop():

    #initialises Token object upon invocation
    def __init__(self):

        #initialise modules in use
        pygame.init()
        pygame.font.init()
        pygame.mixer.init()

        #game loop variables
        self.runningGame = True
        self.pausedGame = False
        self.inMainMenu = True
        self.inControlMenu = False
        self.enemiesRemaining = 0
        self.hasShield = False
        self.gameOver = False

        #create and define the screen window
        self.screenHeight, self.screenWidth = 600, 400
        self.window = pygame.display.set_mode(
            [self.screenWidth, self.screenHeight])
        pygame.display.set_caption("Logic Wars")
        pygame.display.set_icon(
            pygame.image.load("../Assets/Art/ORgateShipRevision1.png"))

        #define game background
        self.screen = pygame.Surface([self.screenWidth, self.screenHeight])
        self.imagePath = "../Assets/Art/TestDayBackground.png"
        self.backgroundImage = pygame.image.load(self.imagePath).convert()
        self.yScaler = 0
        self.changeFrame = True

        #create all sprites for the game
        #ship sprite
        self.shipxPos, self.shipyPos = 200, 400
        self.player = PlayerShip((self.shipxPos, self.shipyPos))
        #health bar sprites
        self.healthBarShadow = PlayerHealth("black", (51, 586),
                                            self.player.health)
        self.healthBar = PlayerHealth("white", (50, 585), self.player.health)
        self.playerScoreShadow = PlayerScore("black", (35, 10))
        self.playerScore = PlayerScore("white", (34, 10))
        self.playerLivesShadow = PlayerLives("black", (351, 586),
                                             self.player.lives)
        self.playerLives = PlayerLives("white", (350, 585), self.player.lives)
        #pause menu sprites
        self.pauseText1 = PauseGameText("white", "PAUSED", 36, (200, 200))
        self.pauseText2 = PauseGameText("white", "press 'p' to return", 26,
                                        (200, 250))
        #main menu sprites
        self.mainMenuText1 = PauseGameText("white", "Logic Wars", 36,
                                           (200, 200))
        self.mainMenuText2 = PauseGameText("white", "Press SPACE to Start!",
                                           26, (200, 250))
        self.mainMenuText3 = PauseGameText("white",
                                           "Press 'c' to see the controls", 26,
                                           (200, 300))
        #control menu sprites
        self.controlMenuText1 = PauseGameText("white", "SHIP CONTROLS", 36,
                                              (200, 200))
        self.controlMenuText2 = PauseGameText("white",
                                              "w,a,s,d for ship movement", 26,
                                              (200, 250))
        self.controlMenuText3 = PauseGameText("white",
                                              "arrow keys for ship movement",
                                              26, (200, 300))
        self.controlMenuText4 = PauseGameText("white", "SPACE to fire", 26,
                                              (200, 350))
        self.controlMenuText5 = PauseGameText("white", "p to pause the game",
                                              26, (200, 400))
        self.controlMenuText6 = PauseGameText("white",
                                              "press c to return to menu ", 26,
                                              (200, 500))
        self.controlMenuText7 = PauseGameText("white",
                                              "or SPACE to start game", 26,
                                              (200, 520))
        #game over sprites
        self.gameOverText1 = PauseGameText("white", "GAME OVER", 36,
                                           (200, 200))
        self.gameOverText2 = PauseGameText("white", "you lost the game", 26,
                                           (200, 400))
        self.gameOverText3 = PauseGameText("white", "press ENTER to retry", 26,
                                           (200, 420))

        #create the sprite groups to which the respective sprites belong
        self.spriteList = pygame.sprite.LayeredUpdates()
        self.spriteList.add(self.playerScoreShadow)
        self.spriteList.add(self.playerScore)
        self.spriteList.add(self.healthBarShadow)
        self.spriteList.add(self.healthBar)
        self.spriteList.add(self.playerLivesShadow)
        self.spriteList.add(self.playerLives)
        self.spriteList.add(self.player)

        self.projectileList = pygame.sprite.Group()
        self.enemyList = pygame.sprite.Group()
        self.enemyProjectileList = pygame.sprite.Group()
        self.tokenList = pygame.sprite.Group()

        #adds sprites to the pause menu group
        self.pauseMenuItems = pygame.sprite.Group()
        self.pauseMenuItems.add(self.pauseText1)
        self.pauseMenuItems.add(self.pauseText2)

        #adds sprites to the main menu group
        self.mainMenuItems = pygame.sprite.Group()
        self.mainMenuItems.add(self.mainMenuText1)
        self.mainMenuItems.add(self.mainMenuText2)
        self.mainMenuItems.add(self.mainMenuText3)

        #adds sprites to the control menu group
        self.controlMenuItems = pygame.sprite.Group()
        self.controlMenuItems.add(self.controlMenuText1)
        self.controlMenuItems.add(self.controlMenuText2)
        self.controlMenuItems.add(self.controlMenuText3)
        self.controlMenuItems.add(self.controlMenuText4)
        self.controlMenuItems.add(self.controlMenuText5)
        self.controlMenuItems.add(self.controlMenuText6)
        self.controlMenuItems.add(self.controlMenuText7)

        #adds sprites to the game over group
        self.gameOverMenuItems = pygame.sprite.Group()
        self.gameOverMenuItems.add(self.gameOverText1)
        self.gameOverMenuItems.add(self.gameOverText2)
        self.gameOverMenuItems.add(self.gameOverText3)
        self.gameOverMenuItems.add(self.playerScore)

        #define game sounds and music
        self.projectileSound = pygame.mixer.Sound(
            "../Assets/SoundEffects/laser shot.wav")
        self.shipExplosion = pygame.mixer.Sound(
            "../Assets/SoundEffects/ship explosion.wav")
        self.bomb = pygame.mixer.Sound("../Assets/SoundEffects/bomb.wav")
        self.triProjectileSound = pygame.mixer.Sound(
            "../Assets/SoundEffects/triProjectile.ogg")
        self.shieldSound = pygame.mixer.Sound(
            "../Assets/SoundEffects/shield.wav")
        self.addHealth = pygame.mixer.Sound(
            "../Assets/SoundEffects/addHealth.wav")
        self.gameOverSound = pygame.mixer.Sound(
            "../Assets/SoundEffects/gameOver.wav")
        self.oneUp = pygame.mixer.Sound("../Assets/SoundEffects/oneUp.ogg")

        #control mapping for player in game
        self.key_map = {
            pygame.K_w: [self.player.keyUp, self.player.keyDown],
            pygame.K_s: [self.player.keyDown, self.player.keyUp],
            pygame.K_a: [self.player.keyLeft, self.player.keyRight],
            pygame.K_d: [self.player.keyRight, self.player.keyLeft],
            pygame.K_UP: [self.player.keyUp, self.player.keyDown],
            pygame.K_DOWN: [self.player.keyDown, self.player.keyUp],
            pygame.K_LEFT: [self.player.keyLeft, self.player.keyRight],
            pygame.K_RIGHT: [self.player.keyRight, self.player.keyLeft]
        }

        #limit game clock
        self.gameClock = pygame.time.Clock()
        self.gameClock.tick(30)

        #spawns the first batch of enemies
        self.spawnEnemies()

        # draw and display on screen
        pygame.display.update()
        pygame.display.flip()

    """displays the main menu items"""

    def mainMenu(self):
        self.spriteList.clear(self.window, self.screen)
        self.window.fill(pygame.Color("black"))
        self.mainMenuItems.update()
        self.mainMenuItems.draw(self.window)
        pygame.display.flip()

    """stars the game"""

    def startGame(self):
        self.inMainMenu = not self.inMainMenu

    """displaus the control menu items"""

    def controlMenu(self):
        self.spriteList.clear(self.window, self.screen)
        self.window.fill(pygame.Color("black"))
        self.controlMenuItems.update()
        self.controlMenuItems.draw(self.window)
        pygame.display.flip()

    """determines whether or not the player is in the control menu"""

    def controlsEvent(self):
        self.inControlMenu = not self.inControlMenu

    """displays the pause menu items"""

    def pauseMenu(self):
        self.spriteList.clear(self.window, self.screen)
        self.window.fill(pygame.Color("black"))
        self.pauseMenuItems.update()
        self.pauseMenuItems.draw(self.window)
        pygame.display.flip()

    """displays the game over menu"""

    def gameOverMenu(self):
        pygame.display.flip()
        self.spriteList.clear(self.window, self.screen)
        self.window.fill(pygame.Color("black"))
        self.gameOverMenuItems.update()
        self.gameOverMenuItems.draw(self.window)
        pygame.display.flip()

    """game controls for when the player is in the main menu"""

    def readMainMenuControls(self):
        #read in events from queue - MAIN MENU CONTROLS
        for event in pygame.event.get():
            #on QUIT event, exit the game loop
            if event.type == pygame.QUIT:
                self.runningGame = False
                #a key is pressed - check the mapping
            elif event.type == pygame.KEYDOWN:
                self.keyPresses = pygame.key.get_pressed()
                #if space is pressed, start the game
                if self.keyPresses[K_SPACE] == 1:
                    self.startGame()
                #if c is pressed, show the controls
                elif self.keyPresses[K_c] == 1:
                    self.controlsEvent()
                #if p is pressed, pause the game
                elif self.keyPresses[K_p] == 1:
                    self.pausedGame = not self.pausedGame

    """game controls for when the player is at game over screen"""

    def readGameOverControls(self):
        #read in events from queue - GAME OVER CONTROLS
        for event in pygame.event.get():
            #on QUIT event, exit the game loop
            if event.type == pygame.QUIT:
                self.runningGame = False
            #press enter to restart the game
            elif event.type == pygame.KEYDOWN:
                self.keyPresses = pygame.key.get_pressed()
                if self.keyPresses[K_RETURN] == 1:
                    self.spriteList.empty()
                    self.__init__()

    """game controls for when the player is playing the game"""

    def readGameControls(self):
        #read in events from queue - IN GAME CONTROLS
        for event in pygame.event.get():
            #on QUIT event, exit the game loop
            if event.type == pygame.QUIT:
                self.runningGame = False
            #if a key is pressed, act based on library definition
            elif event.type == pygame.KEYDOWN and event.key in self.key_map:
                self.key_map[event.key][0]()
            #if a key is released, act based on library definition
            elif event.type == pygame.KEYUP and event.key in self.key_map:
                self.key_map[event.key][1]()
            #if a space bar is pressed, fire the projectile
            #if p is pressed, pause the game
            elif event.type == pygame.KEYDOWN:
                self.keyPresses = pygame.key.get_pressed()
                #if a space bar is pressed, fire the projectile
                if self.keyPresses[K_SPACE] == 1:
                    self.bullet = Projectile(
                        [self.player.rect.x + 17, self.player.rect.y])
                    self.spriteList.add(self.bullet)
                    self.projectileList.add(self.bullet)
                    self.projectileSound.play()
                #if p is pressed, pause the game
                elif self.keyPresses[K_p] == 1:
                    self.pausedGame = not self.pausedGame

    """spawns 20 enemies in random locations"""

    def spawnEnemies(self):
        #spawn 20 enemies above the screen frame
        for i in range(20):
            self.enemyShipType = random.randrange(0, 2)
            self.enemy = EnemyShip((random.randrange(
                0, 350, 50), random.randrange(-100, -33, 40)),
                                   self.enemyShipType)
            self.spriteList.add(self.enemy)
            self.enemyList.add(self.enemy)
            self.enemiesRemaining += 1

    """loops until player quit the game"""

    def gameLoop(self):
        #game loop
        while self.runningGame:

            #if the game is in the main menu
            if self.inMainMenu:

                #read in the controls for the start menu
                self.readMainMenuControls()

                #controls menu access from main menu
                if self.inControlMenu:
                    self.controlMenu()
                else:
                    self.mainMenu()

            #if the game is paused
            elif self.pausedGame:
                self.pauseMenu()
                self.readGameControls()

            #if you lose the game - display game over screen
            elif self.gameOver:
                self.gameOverMenu()
                self.readGameOverControls()

            #whilst the game is not paused or in the main menu or on the game over screen
            if (not self.pausedGame and not self.inMainMenu
                    and not self.gameOver):

                #read controls for the player ship
                self.readGameControls()

                #if the player runs out of lives - game over
                if self.player.lives == -1:
                    self.gameOver = True
                    self.gameOverSound.play()

                #if there are <=5 enemies left, spawn more
                if (self.enemiesRemaining <= 5):
                    self.spawnEnemies()

                #adjust the current coords of a shield, if the player has it
                if self.hasShield:
                    self.shield.updateLocation(
                        (self.player.rect.x + 15, self.player.rect.y - 2))

                #move the background image - yTranslation
                if self.changeFrame:
                    self.yScaler += 1
                    self.changeFrame = False  #moves every other frame
                else:
                    self.changeFrame = True

                if self.yScaler == 1400:
                    self.yScaler = 0

                #sprite collision detection between sprites and projectiles
                for projectile in self.projectileList:

                    #for every collision, remove the sprite and increase player score
                    self.hitList = pygame.sprite.spritecollide(
                        projectile, self.enemyList, True)

                    #if the projectile goes out of bounds - remove it
                    if projectile.rect.y <= -20 or projectile.rect.x <= -10 or projectile.rect.x >= 400:
                        projectile.kill()

                    #for every projectile that hits an enemy
                    for hits in self.hitList:
                        #killing enemy has a 1/20 chance of producing a power up
                        self.tokenChance = random.randrange(0, 20)
                        if (self.tokenChance == 0):
                            self.levelUpToken = PowerUp(
                                projectile.rect.center, random.randrange(1, 6))
                            self.tokenList.add(self.levelUpToken)
                            self.spriteList.add(self.levelUpToken)

                        #remove projectile, reduce enemy count and increase score
                        projectile.kill()
                        self.playerScore.increase()
                        self.playerScoreShadow.increase()
                        self.shipExplosion.play()
                        self.enemiesRemaining -= 1

                #enemy random fire pattern - unpredictable
                for enemyShip in self.enemyList:

                    #if they reach the bottom of the map - remove enemy
                    if enemyShip.rect.y >= 700:
                        enemyShip.kill()
                        self.enemiesRemaining -= 1

                    #each enemy will have a 1/300 chance of firing a projectile at the player
                    self.number = random.randrange(0, 300)
                    if (self.number == 5):
                        self.enemyProjectile = EnemyProjectile(
                            (enemyShip.rect.x, enemyShip.rect.y))
                        self.spriteList.add(self.enemyProjectile)
                        self.enemyProjectileList.add(self.enemyProjectile)

                #hit detection of enemy projectiles with player
                self.enemyProjectileCollideList = pygame.sprite.spritecollide(
                    self.player, self.enemyProjectileList, True)

                #reduce health if hit
                self.player.takeHit(5 * len(self.enemyProjectileCollideList))
                self.enemiesRemaining -= len(self.enemyProjectileCollideList)
                self.healthBar.newHealth(self.player.health)
                self.healthBarShadow.newHealth(self.player.health)
                self.playerLives.newLives(self.player.lives)
                self.playerLivesShadow.newLives(self.player.lives)

                #if enemy ship collides with player ship
                self.enemyShipCollideList = pygame.sprite.spritecollide(
                    self.player, self.enemyList, True)

                #reduce player health if collides with enemy ship
                self.player.takeHit(5 * len(self.enemyShipCollideList))
                self.healthBar.newHealth(self.player.health)
                self.healthBarShadow.newHealth(self.player.health)
                self.playerLives.newLives(self.player.lives)
                self.playerLivesShadow.newLives(self.player.lives)

                #collision of enemy projectiles and shields
                for enemyProjectile in self.enemyProjectileList:

                    #if enemy projectile goes out of range remove it
                    if enemyProjectile.rect.y >= 610:
                        enemyProjectile.kill()

                    #remove shield if it is hit by a projectile
                    if self.hasShield and pygame.sprite.collide_rect(
                            self.shield, enemyProjectile):
                        enemyProjectile.kill()
                        self.shield.kill()
                        self.hasShield = not self.hasShield

                #hit detection of tokens with player ship
                self.tokenCollideList = pygame.sprite.spritecollide(
                    self.player, self.tokenList, True)

                for token in self.tokenCollideList:

                    #each token in the token list will grant the player a bonus
                    #increase playerLives by one
                    if (token.tokenType == 1):
                        self.player.addLives(1)
                        self.playerLives.newLives(self.player.lives)
                        self.playerLivesShadow.newLives(self.player.lives)
                        self.oneUp.play()
                    #increase playerHealth by 20
                    elif (token.tokenType == 2):
                        self.addHealth.play()
                        self.player.addHealth(20)
                    #spawn 3 projectiles that travel in 3 directions
                    elif (token.tokenType == 3):
                        self.triProjectileSound.play()
                        projectile = TriProjectile(
                            (self.player.rect.x, self.player.rect.y), 0)
                        projectile1 = TriProjectile(
                            (self.player.rect.x, self.player.rect.y), 1)
                        projectile2 = TriProjectile(
                            (self.player.rect.x, self.player.rect.y), 2)
                        self.projectileList.add(projectile)
                        self.projectileList.add(projectile1)
                        self.projectileList.add(projectile2)
                        self.spriteList.add(projectile)
                        self.spriteList.add(projectile1)
                        self.spriteList.add(projectile2)
                    #spawns a shield for the player, if they don't already have one
                    elif (token.tokenType == 4 and not self.hasShield):
                        self.shieldSound.play()
                        self.shield = Shield(
                            (self.player.rect.x + 15, self.player.rect.y - 2))
                        self.spriteList.add(self.shield)
                        self.hasShield = True
                    #drops a bomb that destroys all enemy ships
                    elif (token.tokenType == 5):
                        self.enemiesRemaining = 0
                        self.playerScore.increase2(25)
                        self.playerScoreShadow.increase2(25)
                        self.bomb.play()
                        for enemy in self.enemyList:
                            enemy.remove([self.spriteList, self.enemyList])

                #animate the wallpaper on screen
                self.window.blit(self.backgroundImage, (0, self.yScaler))
                self.window.blit(self.backgroundImage,
                                 (0, self.yScaler - 1400))

                #animate the sprites
                self.spriteList.update()
                self.spriteList.draw(self.window)
                pygame.display.flip()
                self.spriteList.clear(self.window, self.screen)
                self.gameClock.tick(120)
Пример #4
0
class Player(object):

    playerLevel = 1
    xpToLvl = (playerLevel * ((playerLevel * playerLevel) / 2)) * 100

    def __init__(
                self, world, name="Player", isAI=False,
                shipFollow=False, shipToFollow=None,
                life=10, score=0, xp=0):
        '''Handles players and AI's'''
        self.name = name
        self.isAI = isAI
        self.life = life
        self.score = score
        self.xp = xp

        taskMgr.add(self.updateXp, "updates xp needed")

        '''
        Suggestions for leveling system:
        Power/strength: Changes the amount of damage you do.
        and type of weapons you can get
        Attack rating: an overall calculation of how much damage you do,
        essentially this is how much damage you do.
        I have a lot more ideas for this but i'm friggen tired right now.
        '''
        if self.isAI:
            self.ship = BasicEnemyShip(world, self.name, self, shipFollow, shipToFollow)
        else:
            self.ship = PlayerShip(world, self.name, self)

    def updateXp(self, task):

        self.xpToLvl = ((self.playerLevel *
                            ((self.playerLevel * self.playerLevel) / 2))
                            * 100)

        return task.cont

    def setLife(self, life):
        self.life = life
        print (self.life)
        if self.life <= 0:
            self.ship.respawn(True)
            self.life = 10

    def getLife(self):

        return self.life

    def setExp(self, xp):
        self.xp = xp
        if self.xp >= self.xpToLvl:
            self.playerLevel += 1
            self.xp = 0
            print self.playerLevel

    def getExp(self):
        return self.xp

    def getLevel(self):
        return self.playerLevel

    def getShip(self):
        return self.ship.getShip()

    def getName(self):
        return self.name

    def returnPos(self):
        return self.ship.returnPos()

    def returnHpr(self):
        return self.ship.returnHpr()
Пример #5
0
        def __init__(self):
		
		#initialise modules in use
		pygame.init()
		pygame.font.init()
		pygame.mixer.init()
		
		#game loop variables
	        self.runningGame = True
		self.pausedGame = False
		self.inMainMenu = True
		self.inControlMenu = False
		self.enemiesRemaining = 0	
		self.hasShield = False
		self.gameOver = False
	
		#create and define the screen window
		self.screenHeight, self.screenWidth = 600, 400
		self.window = pygame.display.set_mode([self.screenWidth, self.screenHeight])
		pygame.display.set_caption("Logic Wars")
		pygame.display.set_icon(pygame.image.load("../Assets/Art/ORgateShipRevision1.png"))

		#define game background
		self.screen = pygame.Surface([self.screenWidth, self.screenHeight])
		self.imagePath = "../Assets/Art/TestDayBackground.png"			
		self.backgroundImage = pygame.image.load(self.imagePath).convert()		
		self.yScaler = 0
		self.changeFrame = True	

		#create all sprites for the game
		#ship sprite
		self.shipxPos, self.shipyPos = 200, 400						
		self.player = PlayerShip((self.shipxPos, self.shipyPos))		
		#health bar sprites
		self.healthBarShadow = PlayerHealth("black", (51,586), self.player.health)			
		self.healthBar = PlayerHealth("white", (50,585), self.player.health)
		self.playerScoreShadow = PlayerScore("black", (35,10))					
		self.playerScore = PlayerScore("white", (34,10))					
		self.playerLivesShadow = PlayerLives("black", (351,586), self.player.lives) 			
		self.playerLives = PlayerLives("white", (350,585), self.player.lives) 		
		#pause menu sprites	
		self.pauseText1 = PauseGameText("white", "PAUSED", 36, (200,200))
		self.pauseText2 = PauseGameText("white", "press 'p' to return", 26, (200, 250))	
		#main menu sprites
		self.mainMenuText1 = PauseGameText("white", "Logic Wars", 36, (200, 200))
		self.mainMenuText2 = PauseGameText("white", "Press SPACE to Start!", 26, (200, 250))
		self.mainMenuText3 = PauseGameText("white", "Press 'c' to see the controls", 26, (200, 300))
		#control menu sprites
		self.controlMenuText1 = PauseGameText("white", "SHIP CONTROLS", 36, (200, 200))
		self.controlMenuText2 = PauseGameText("white", "w,a,s,d for ship movement", 26, (200, 250))
		self.controlMenuText3 = PauseGameText("white", "arrow keys for ship movement", 26, (200, 300))
		self.controlMenuText4 = PauseGameText("white", "SPACE to fire", 26, (200, 350))
		self.controlMenuText5 = PauseGameText("white", "p to pause the game", 26, (200, 400))
		self.controlMenuText6 = PauseGameText("white", "press c to return to menu ", 26, (200, 500))
		self.controlMenuText7 = PauseGameText("white", "or SPACE to start game", 26, (200, 520))
		#game over sprites
		self.gameOverText1 = PauseGameText("white", "GAME OVER", 36, (200, 200))
		self.gameOverText2 = PauseGameText("white", "you lost the game", 26, (200, 400))
		self.gameOverText3 = PauseGameText("white", "press ENTER to retry", 26, (200, 420))
		
		#create the sprite groups to which the respective sprites belong
		self.spriteList = pygame.sprite.LayeredUpdates()
		self.spriteList.add(self.playerScoreShadow)
		self.spriteList.add(self.playerScore)
		self.spriteList.add(self.healthBarShadow)
		self.spriteList.add(self.healthBar)
		self.spriteList.add(self.playerLivesShadow)
		self.spriteList.add(self.playerLives)
		self.spriteList.add(self.player)

		self.projectileList = pygame.sprite.Group()
		self.enemyList = pygame.sprite.Group()
		self.enemyProjectileList = pygame.sprite.Group()
		self.tokenList = pygame.sprite.Group()	

		#adds sprites to the pause menu group
		self.pauseMenuItems = pygame.sprite.Group()
		self.pauseMenuItems.add(self.pauseText1)
		self.pauseMenuItems.add(self.pauseText2)

		#adds sprites to the main menu group
		self.mainMenuItems = pygame.sprite.Group()
		self.mainMenuItems.add(self.mainMenuText1)
		self.mainMenuItems.add(self.mainMenuText2)
		self.mainMenuItems.add(self.mainMenuText3)

		#adds sprites to the control menu group
		self.controlMenuItems = pygame.sprite.Group()
		self.controlMenuItems.add(self.controlMenuText1)
		self.controlMenuItems.add(self.controlMenuText2)
		self.controlMenuItems.add(self.controlMenuText3)
		self.controlMenuItems.add(self.controlMenuText4)
		self.controlMenuItems.add(self.controlMenuText5)
		self.controlMenuItems.add(self.controlMenuText6)
		self.controlMenuItems.add(self.controlMenuText7)

		#adds sprites to the game over group
		self.gameOverMenuItems = pygame.sprite.Group()
		self.gameOverMenuItems.add(self.gameOverText1)
		self.gameOverMenuItems.add(self.gameOverText2)
		self.gameOverMenuItems.add(self.gameOverText3)
		self.gameOverMenuItems.add(self.playerScore)
		

		#define game sounds and music		
		self.projectileSound = pygame.mixer.Sound("../Assets/SoundEffects/laser shot.wav")
		self.shipExplosion = pygame.mixer.Sound("../Assets/SoundEffects/ship explosion.wav")
		self.bomb = pygame.mixer.Sound("../Assets/SoundEffects/bomb.wav")
		self.triProjectileSound = pygame.mixer.Sound("../Assets/SoundEffects/triProjectile.ogg")
		self.shieldSound = pygame.mixer.Sound("../Assets/SoundEffects/shield.wav")
		self.addHealth = pygame.mixer.Sound("../Assets/SoundEffects/addHealth.wav")
		self.gameOverSound = pygame.mixer.Sound("../Assets/SoundEffects/gameOver.wav")
		self.oneUp = pygame.mixer.Sound("../Assets/SoundEffects/oneUp.ogg")

		#control mapping for player in game
		self.key_map = {
			pygame.K_w: [self.player.keyUp, self.player.keyDown],
			pygame.K_s: [self.player.keyDown, self.player.keyUp],
			pygame.K_a: [self.player.keyLeft, self.player.keyRight],
			pygame.K_d: [self.player.keyRight, self.player.keyLeft],
			pygame.K_UP: [self.player.keyUp, self.player.keyDown],
	                pygame.K_DOWN: [self.player.keyDown, self.player.keyUp],
	                pygame.K_LEFT: [self.player.keyLeft, self.player.keyRight],
	                pygame.K_RIGHT: [self.player.keyRight, self.player.keyLeft]
		}
	
		#limit game clock 
		self.gameClock = pygame.time.Clock()
		self.gameClock.tick(30)

		#spawns the first batch of enemies
		self.spawnEnemies()
	
		# draw and display on screen
		pygame.display.update()
		pygame.display.flip()
Пример #6
0
class MainLoop():
	
	#initialises Token object upon invocation
        def __init__(self):
		
		#initialise modules in use
		pygame.init()
		pygame.font.init()
		pygame.mixer.init()
		
		#game loop variables
	        self.runningGame = True
		self.pausedGame = False
		self.inMainMenu = True
		self.inControlMenu = False
		self.enemiesRemaining = 0	
		self.hasShield = False
		self.gameOver = False
	
		#create and define the screen window
		self.screenHeight, self.screenWidth = 600, 400
		self.window = pygame.display.set_mode([self.screenWidth, self.screenHeight])
		pygame.display.set_caption("Logic Wars")
		pygame.display.set_icon(pygame.image.load("../Assets/Art/ORgateShipRevision1.png"))

		#define game background
		self.screen = pygame.Surface([self.screenWidth, self.screenHeight])
		self.imagePath = "../Assets/Art/TestDayBackground.png"			
		self.backgroundImage = pygame.image.load(self.imagePath).convert()		
		self.yScaler = 0
		self.changeFrame = True	

		#create all sprites for the game
		#ship sprite
		self.shipxPos, self.shipyPos = 200, 400						
		self.player = PlayerShip((self.shipxPos, self.shipyPos))		
		#health bar sprites
		self.healthBarShadow = PlayerHealth("black", (51,586), self.player.health)			
		self.healthBar = PlayerHealth("white", (50,585), self.player.health)
		self.playerScoreShadow = PlayerScore("black", (35,10))					
		self.playerScore = PlayerScore("white", (34,10))					
		self.playerLivesShadow = PlayerLives("black", (351,586), self.player.lives) 			
		self.playerLives = PlayerLives("white", (350,585), self.player.lives) 		
		#pause menu sprites	
		self.pauseText1 = PauseGameText("white", "PAUSED", 36, (200,200))
		self.pauseText2 = PauseGameText("white", "press 'p' to return", 26, (200, 250))	
		#main menu sprites
		self.mainMenuText1 = PauseGameText("white", "Logic Wars", 36, (200, 200))
		self.mainMenuText2 = PauseGameText("white", "Press SPACE to Start!", 26, (200, 250))
		self.mainMenuText3 = PauseGameText("white", "Press 'c' to see the controls", 26, (200, 300))
		#control menu sprites
		self.controlMenuText1 = PauseGameText("white", "SHIP CONTROLS", 36, (200, 200))
		self.controlMenuText2 = PauseGameText("white", "w,a,s,d for ship movement", 26, (200, 250))
		self.controlMenuText3 = PauseGameText("white", "arrow keys for ship movement", 26, (200, 300))
		self.controlMenuText4 = PauseGameText("white", "SPACE to fire", 26, (200, 350))
		self.controlMenuText5 = PauseGameText("white", "p to pause the game", 26, (200, 400))
		self.controlMenuText6 = PauseGameText("white", "press c to return to menu ", 26, (200, 500))
		self.controlMenuText7 = PauseGameText("white", "or SPACE to start game", 26, (200, 520))
		#game over sprites
		self.gameOverText1 = PauseGameText("white", "GAME OVER", 36, (200, 200))
		self.gameOverText2 = PauseGameText("white", "you lost the game", 26, (200, 400))
		self.gameOverText3 = PauseGameText("white", "press ENTER to retry", 26, (200, 420))
		
		#create the sprite groups to which the respective sprites belong
		self.spriteList = pygame.sprite.LayeredUpdates()
		self.spriteList.add(self.playerScoreShadow)
		self.spriteList.add(self.playerScore)
		self.spriteList.add(self.healthBarShadow)
		self.spriteList.add(self.healthBar)
		self.spriteList.add(self.playerLivesShadow)
		self.spriteList.add(self.playerLives)
		self.spriteList.add(self.player)

		self.projectileList = pygame.sprite.Group()
		self.enemyList = pygame.sprite.Group()
		self.enemyProjectileList = pygame.sprite.Group()
		self.tokenList = pygame.sprite.Group()	

		#adds sprites to the pause menu group
		self.pauseMenuItems = pygame.sprite.Group()
		self.pauseMenuItems.add(self.pauseText1)
		self.pauseMenuItems.add(self.pauseText2)

		#adds sprites to the main menu group
		self.mainMenuItems = pygame.sprite.Group()
		self.mainMenuItems.add(self.mainMenuText1)
		self.mainMenuItems.add(self.mainMenuText2)
		self.mainMenuItems.add(self.mainMenuText3)

		#adds sprites to the control menu group
		self.controlMenuItems = pygame.sprite.Group()
		self.controlMenuItems.add(self.controlMenuText1)
		self.controlMenuItems.add(self.controlMenuText2)
		self.controlMenuItems.add(self.controlMenuText3)
		self.controlMenuItems.add(self.controlMenuText4)
		self.controlMenuItems.add(self.controlMenuText5)
		self.controlMenuItems.add(self.controlMenuText6)
		self.controlMenuItems.add(self.controlMenuText7)

		#adds sprites to the game over group
		self.gameOverMenuItems = pygame.sprite.Group()
		self.gameOverMenuItems.add(self.gameOverText1)
		self.gameOverMenuItems.add(self.gameOverText2)
		self.gameOverMenuItems.add(self.gameOverText3)
		self.gameOverMenuItems.add(self.playerScore)
		

		#define game sounds and music		
		self.projectileSound = pygame.mixer.Sound("../Assets/SoundEffects/laser shot.wav")
		self.shipExplosion = pygame.mixer.Sound("../Assets/SoundEffects/ship explosion.wav")
		self.bomb = pygame.mixer.Sound("../Assets/SoundEffects/bomb.wav")
		self.triProjectileSound = pygame.mixer.Sound("../Assets/SoundEffects/triProjectile.ogg")
		self.shieldSound = pygame.mixer.Sound("../Assets/SoundEffects/shield.wav")
		self.addHealth = pygame.mixer.Sound("../Assets/SoundEffects/addHealth.wav")
		self.gameOverSound = pygame.mixer.Sound("../Assets/SoundEffects/gameOver.wav")
		self.oneUp = pygame.mixer.Sound("../Assets/SoundEffects/oneUp.ogg")

		#control mapping for player in game
		self.key_map = {
			pygame.K_w: [self.player.keyUp, self.player.keyDown],
			pygame.K_s: [self.player.keyDown, self.player.keyUp],
			pygame.K_a: [self.player.keyLeft, self.player.keyRight],
			pygame.K_d: [self.player.keyRight, self.player.keyLeft],
			pygame.K_UP: [self.player.keyUp, self.player.keyDown],
	                pygame.K_DOWN: [self.player.keyDown, self.player.keyUp],
	                pygame.K_LEFT: [self.player.keyLeft, self.player.keyRight],
	                pygame.K_RIGHT: [self.player.keyRight, self.player.keyLeft]
		}
	
		#limit game clock 
		self.gameClock = pygame.time.Clock()
		self.gameClock.tick(30)

		#spawns the first batch of enemies
		self.spawnEnemies()
	
		# draw and display on screen
		pygame.display.update()
		pygame.display.flip()

	"""displays the main menu items"""
	def mainMenu(self):
		self.spriteList.clear(self.window, self.screen)
		self.window.fill(pygame.Color("black"))
		self.mainMenuItems.update()	
		self.mainMenuItems.draw(self.window)
		pygame.display.flip()

	"""stars the game"""
	def startGame(self):
		self.inMainMenu = not self.inMainMenu

	"""displaus the control menu items"""
	def controlMenu(self):
		self.spriteList.clear(self.window, self.screen)
		self.window.fill(pygame.Color("black"))
		self.controlMenuItems.update()	
		self.controlMenuItems.draw(self.window)
		pygame.display.flip()

	"""determines whether or not the player is in the control menu"""
	def controlsEvent(self):
		self.inControlMenu = not self.inControlMenu

	"""displays the pause menu items"""
	def pauseMenu(self):
		self.spriteList.clear(self.window, self.screen)
		self.window.fill(pygame.Color("black"))
		self.pauseMenuItems.update()
		self.pauseMenuItems.draw(self.window)
		pygame.display.flip()

	"""displays the game over menu"""
	def gameOverMenu(self):
		pygame.display.flip()
		self.spriteList.clear(self.window, self.screen)
		self.window.fill(pygame.Color("black"))
		self.gameOverMenuItems.update()
		self.gameOverMenuItems.draw(self.window)
		pygame.display.flip()

	"""game controls for when the player is in the main menu"""
	def readMainMenuControls(self):
		#read in events from queue - MAIN MENU CONTROLS
		for event in pygame.event.get():
			#on QUIT event, exit the game loop
			if event.type == pygame.QUIT:
				self.runningGame = False
				#a key is pressed - check the mapping
			elif event.type == pygame.KEYDOWN:
				self.keyPresses = pygame.key.get_pressed()
				#if space is pressed, start the game
				if self.keyPresses[K_SPACE] == 1:
					self.startGame()
				#if c is pressed, show the controls
				elif self.keyPresses[K_c] == 1:
					self.controlsEvent()
				#if p is pressed, pause the game
				elif self.keyPresses[K_p] == 1:
					self.pausedGame = not self.pausedGame

	"""game controls for when the player is at game over screen"""
	def readGameOverControls(self):
		#read in events from queue - GAME OVER CONTROLS
		for event in pygame.event.get():
			#on QUIT event, exit the game loop
			if event.type == pygame.QUIT:
				self.runningGame = False
			#press enter to restart the game
			elif event.type == pygame.KEYDOWN:
				self.keyPresses = pygame.key.get_pressed()
				if self.keyPresses[K_RETURN] == 1:
					self.spriteList.empty()
					self.__init__()
	
	"""game controls for when the player is playing the game"""
	def readGameControls(self):
		#read in events from queue - IN GAME CONTROLS
		for event in pygame.event.get():
			#on QUIT event, exit the game loop
			if event.type == pygame.QUIT:
				self.runningGame = False
			#if a key is pressed, act based on library definition
			elif event.type == pygame.KEYDOWN and event.key in self.key_map:
				self.key_map[event.key][0]()
			#if a key is released, act based on library definition
			elif event.type == pygame.KEYUP and event.key in self.key_map:
				self.key_map[event.key][1]() 
			#if a space bar is pressed, fire the projectile
			#if p is pressed, pause the game
			elif event.type == pygame.KEYDOWN:
				self.keyPresses = pygame.key.get_pressed()
				#if a space bar is pressed, fire the projectile
				if self.keyPresses[K_SPACE] == 1:
					self.bullet = Projectile([self.player.rect.x + 17, self.player.rect.y])
					self.spriteList.add(self.bullet)
        				self.projectileList.add(self.bullet)
					self.projectileSound.play()
				#if p is pressed, pause the game
				elif self.keyPresses[K_p] == 1:
					self.pausedGame = not self.pausedGame

	"""spawns 20 enemies in random locations"""
	def spawnEnemies(self):
		#spawn 20 enemies above the screen frame
		for i in range(20):
			self.enemyShipType = random.randrange(0, 2)
			self.enemy = EnemyShip((random.randrange(0, 350, 50), random.randrange(-100, -33, 40)), self.enemyShipType)
			self.spriteList.add(self.enemy)
			self.enemyList.add(self.enemy)
			self.enemiesRemaining += 1
	
	"""loops until player quit the game"""
	def gameLoop(self):
		#game loop
		while self.runningGame:
			
			#if the game is in the main menu
			if self.inMainMenu:	
	
				#read in the controls for the start menu
				self.readMainMenuControls()

				#controls menu access from main menu
				if self.inControlMenu:
					self.controlMenu()
				else:				
					self.mainMenu()
			
			#if the game is paused
			elif self.pausedGame:
				self.pauseMenu()
				self.readGameControls()

			#if you lose the game - display game over screen
			elif self.gameOver:
				self.gameOverMenu()
				self.readGameOverControls()			

			#whilst the game is not paused or in the main menu or on the game over screen
			if (not self.pausedGame and not self.inMainMenu and not self.gameOver):
	
				#read controls for the player ship
				self.readGameControls()

				#if the player runs out of lives - game over
				if self.player.lives == -1:
					self.gameOver = True
					self.gameOverSound.play()

				#if there are <=5 enemies left, spawn more
				if (self.enemiesRemaining <= 5):
					self.spawnEnemies()

				#adjust the current coords of a shield, if the player has it
				if self.hasShield:
					self.shield.updateLocation((self.player.rect.x + 15, self.player.rect.y - 2))
						
				#move the background image - yTranslation
				if self.changeFrame:
					self.yScaler += 1
					self.changeFrame = False#moves every other frame
				else: 
					self.changeFrame = True 
			
				if self.yScaler == 1400:
					self.yScaler = 0		

				#sprite collision detection between sprites and projectiles
				for projectile in self.projectileList:
		
					#for every collision, remove the sprite and increase player score
					self.hitList = pygame.sprite.spritecollide(projectile, self.enemyList, True)
					
					#if the projectile goes out of bounds - remove it
					if projectile.rect.y <= -20 or projectile.rect.x <= -10 or projectile.rect.x >= 400:
						projectile.kill()

					#for every projectile that hits an enemy
					for hits in self.hitList:
						#killing enemy has a 1/20 chance of producing a power up				
						self.tokenChance = random.randrange(0,20)				
						if (self.tokenChance == 0):
							self.levelUpToken = PowerUp(projectile.rect.center, random.randrange(1,6))
							self.tokenList.add(self.levelUpToken)
							self.spriteList.add(self.levelUpToken)
		
						#remove projectile, reduce enemy count and increase score
						projectile.kill()
						self.playerScore.increase()
						self.playerScoreShadow.increase()
						self.shipExplosion.play()
						self.enemiesRemaining -= 1
		
				#enemy random fire pattern - unpredictable
				for enemyShip in self.enemyList:
		
					#if they reach the bottom of the map - remove enemy
					if enemyShip.rect.y >= 700:
						enemyShip.kill()
						self.enemiesRemaining -= 1

					#each enemy will have a 1/300 chance of firing a projectile at the player
					self.number = random.randrange(0, 300)
					if (self.number == 5):
						self.enemyProjectile = EnemyProjectile((enemyShip.rect.x, enemyShip.rect.y))
						self.spriteList.add(self.enemyProjectile)
						self.enemyProjectileList.add(self.enemyProjectile)
		
				#hit detection of enemy projectiles with player
				self.enemyProjectileCollideList = pygame.sprite.spritecollide(self.player, self.enemyProjectileList, True)
				
				#reduce health if hit
				self.player.takeHit(5 * len(self.enemyProjectileCollideList))
				self.enemiesRemaining -= len(self.enemyProjectileCollideList)
				self.healthBar.newHealth(self.player.health)
				self.healthBarShadow.newHealth(self.player.health)
				self.playerLives.newLives(self.player.lives)
				self.playerLivesShadow.newLives(self.player.lives)
				
				#if enemy ship collides with player ship
				self.enemyShipCollideList = pygame.sprite.spritecollide(self.player, self.enemyList, True)
				
				#reduce player health if collides with enemy ship
				self.player.takeHit(5* len(self.enemyShipCollideList))
				self.healthBar.newHealth(self.player.health)
				self.healthBarShadow.newHealth(self.player.health)
				self.playerLives.newLives(self.player.lives)
				self.playerLivesShadow.newLives(self.player.lives)

				#collision of enemy projectiles and shields 
				for enemyProjectile in self.enemyProjectileList:

					#if enemy projectile goes out of range remove it
					if enemyProjectile.rect.y >= 610:
						enemyProjectile.kill()
					
					#remove shield if it is hit by a projectile
					if self.hasShield and pygame.sprite.collide_rect(self.shield, enemyProjectile):
						enemyProjectile.kill()
						self.shield.kill()
						self.hasShield = not self.hasShield 
		
				#hit detection of tokens with player ship
				self.tokenCollideList = pygame.sprite.spritecollide(self.player, self.tokenList, True)
		
				for token in self.tokenCollideList:							

					#each token in the token list will grant the player a bonus
					#increase playerLives by one
					if (token.tokenType == 1):
						self.player.addLives(1)
						self.playerLives.newLives(self.player.lives)
						self.playerLivesShadow.newLives(self.player.lives)
						self.oneUp.play()
					#increase playerHealth by 20
					elif (token.tokenType == 2):
						self.addHealth.play()
						self.player.addHealth(20)
					#spawn 3 projectiles that travel in 3 directions		
					elif (token.tokenType == 3):
						self.triProjectileSound.play()
						projectile = TriProjectile((self.player.rect.x, self.player.rect.y), 0)
						projectile1 = TriProjectile((self.player.rect.x, self.player.rect.y), 1)
						projectile2 = TriProjectile((self.player.rect.x, self.player.rect.y), 2)
						self.projectileList.add(projectile)
						self.projectileList.add(projectile1)
						self.projectileList.add(projectile2)
						self.spriteList.add(projectile)
						self.spriteList.add(projectile1)
						self.spriteList.add(projectile2)
					#spawns a shield for the player, if they don't already have one
					elif (token.tokenType == 4 and not self.hasShield):
						self.shieldSound.play()
						self.shield = Shield((self.player.rect.x + 15, self.player.rect.y - 2))
						self.spriteList.add(self.shield)
						self.hasShield = True	
					#drops a bomb that destroys all enemy ships
					elif (token.tokenType == 5):
						self.enemiesRemaining = 0
						self.playerScore.increase2(25)
						self.playerScoreShadow.increase2(25)
						self.bomb.play()
						for enemy in self.enemyList:
							enemy.remove([self.spriteList, self.enemyList])
		
				#animate the wallpaper on screen
	        	        self.window.blit(self.backgroundImage, (0, self.yScaler))
	        	        self.window.blit(self.backgroundImage, (0,self.yScaler - 1400))
			
				#animate the sprites
				self.spriteList.update()
	        	        self.spriteList.draw(self.window)
			        pygame.display.flip()
				self.spriteList.clear(self.window, self.screen)
				self.gameClock.tick(120)	
 def buildMission(self, mission):
     self.elapsedTime = 0.0
     #add the trigger list
     self.triggerList = mission.triggerList[:]
     #self.rootSprite = pygame.sprite.OrderedUpdates()
     self.shipSpriteGroup = OrderedUpdatesRect()
     self.destroyedSpriteGroup = OrderedUpdatesRect()
     self.backgroundSpriteGroup = OrderedUpdatesRect() #pygame.sprite.OrderedUpdates()
     self.foregroundSpriteGroup = OrderedUpdatesRect() #pygame.sprite.OrderedUpdates()
     self.physics = Physics()
     self.messageList = []
     for key in self.keys: 
         self.setKey(key, 0)
     
     #convert spawns to player or enemy
     for spawn in mission.spawnList:
         
         if spawn.type == 'player': # this is the player ship
             tp = self.getPlayerSpawn()
             tempShip = PlayerShip(proto = tp, context = self)
             tempShip.team = spawn.team
             self.playerShip = tempShip
             self.linkTriggers(spawn, tempShip)
         else:
             if spawn.id >= 0 and spawn.id < len(self.shipList):
                 if self.shipList[spawn.id].hard_points:
                     tempShip = StationShip(spawn.x, spawn.y, proto = self.shipList[spawn.id], context = self)
                     for pt in self.shipList[spawn.id].hard_points:
                         hpt = AIShip(spawn.x + pt['x'], spawn.y + pt['y'], spawn.r + pt['rot'], proto = self.shipList[pt['id']], parent = tempShip, context = self)
                         hpt.team = tempShip.team
                         tempShip.hard_points.append(hpt)
                 else:
                     tempShip = AIShip(spawn.x, spawn.y, spawn.r, proto = self.shipList[spawn.id], context = self)
                 tempShip.team = spawn.team
                 
                 self.linkTriggers(spawn, tempShip)
                 
                 
             elif spawn.id == -1:
                 if spawn.hard_points:
                     tempShip = StationShip(spawn.x, spawn.y, spawn.r, proto = spawn.proto, context = self)
                 
                     for pt in spawn.hard_points:
                         if pt.id >= 0 and pt.id < len(self.shipList):
                             hpt = AIShip(spawn.x + pt.x, spawn.y + pt.y, spawn.r + pt.r, proto = self.shipList[pt.id], parent = tempShip, context = self)    
                             hpt.team = tempShip.team     
                             tempShip.hard_points.append(hpt)
                 else:
                     tempShip = AIShip(spawn.x, spawn.y, spawn.r, proto = spawn.proto, context = self)
                     
                 tempShip.team = spawn.team
                 self.linkTriggers(spawn, tempShip)
                 
         if spawn.squad:
             spawn.squad.append(tempShip)
             tempShip.squad = spawn.squad
         self.shipSpriteGroup.add(tempShip)
         self.foregroundSpriteGroup.add(tempShip.hard_points)
         self.physics.addChild(tempShip)
         tempShip.set_position(spawn.x, spawn.y)
         tempShip.set_rotation(spawn.r)
         tempShip.tag = spawn.tag
         tempShip.spawn = spawn
         tempShip.apply_upgrade(spawn.upgrade)
         
     # first, set up any auto-backgrounds
     if mission.background_style == 'tiled':
         # set up a tiled background using background_file and width, height
         x = 0
         y = 0
         mission.background_image, dfrect = Utils.load_image(mission.background_file)
         
     
     #convert bglist to backgrounds
     for bg in mission.backgroundList:
         tempBg = pygame.sprite.Sprite()
         tempBg.image, tempBg.rect = Utils.load_image(bg.filename)
         tempBg.rect.topleft = (bg.x, bg.y)
         self.backgroundSpriteGroup.add(tempBg)
         
     self.updateTriggers()