Example #1
0
    def initGame(self):

        #create player object
        self._spaceShip = SpriteLib.SpaceShip(self._screenRect)
        #create UI interface objects
        self._interface = SpriteLib.Interface(self._screenRect, self._screen)
        self._interface.setHitPoints(100, 100)

        #init the first level
        self.initLevel(1)
Example #2
0
 def onButton(self, event):
     button = event.GetEventObject()
     name = button.GetName()
     if name == "1":
         temp = SpriteLib.Alien(1)
         type = 1
         subType = 1
     elif name == "2":
         temp = SpriteLib.Alien(2)
         type = 1
         subType = 2
     elif name == "3":
         temp = SpriteLib.Alien(3)
         type = 1
         subType = 3
     elif name == "4":
         temp = SpriteLib.Alien(4)
         type = 1
         subType = 4
     elif name == "5":
         temp = SpriteLib.Alien(5)
         type = 1
         subType = 5
     elif name == "Env1":
         temp = SpriteLib.EnviornmentComponent(1)
         type = 2
         subType = 1
     print self.levelPanel.CalcScrolledPosition(5, 5)
     print self.levelPanel.CalcUnscrolledPosition(5, 5)
     self.staticBitmap.AddImage(
         temp, type, subType, self.levelPanel.CalcUnscrolledPosition(5, 5))
Example #3
0
    def __init__(self, parent, ID):
        wx.ScrolledWindow.__init__(self, parent, ID)

        self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))

        self.mainSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.scrollPnlSizer = wx.BoxSizer(wx.VERTICAL)
        self.contentSizer = wx.FlexGridSizer(rows=2, cols=2, hgap=10, vgap=5)

        #create panel for level data
        self.levelPanel = scrolled.ScrolledPanel(self,
                                                 -1,
                                                 size=(350, 400),
                                                 style=wx.TAB_TRAVERSAL
                                                 | wx.SUNKEN_BORDER,
                                                 name="levelPanel")

        self.staticBitmap = DragableCanvasBitmap(self.levelPanel)

        self.scrollPnlSizer.Add(self.staticBitmap, 0, wx.ALL, 5)
        self.levelPanel.SetSizer(self.scrollPnlSizer)

        self.mainSizer.Add(self.levelPanel, flag=wx.EXPAND)

        #add buttons for images
        self.contentSizer.Add(self.addButton(SpriteLib.Alien(1), "1"))
        self.contentSizer.Add(self.addButton(SpriteLib.Alien(2), "2"))
        self.contentSizer.Add(self.addButton(SpriteLib.Alien(3), "3"))
        self.contentSizer.Add(self.addButton(SpriteLib.Alien(4), "4"))
        self.contentSizer.Add(self.addButton(SpriteLib.Alien(5), "5"))
        self.contentSizer.Add(
            self.addButton(SpriteLib.EnviornmentComponent(1), "Env1"))

        b = wx.Button(self, 10, "Save Level", (20, 20))
        self.Bind(wx.EVT_BUTTON, self.OnSaveClick, b)
        b.SetDefault()
        b.SetSize(b.GetBestSize())
        self.contentSizer.Add(b)

        self.mainSizer.Add(self.contentSizer)

        self.SetSizer(self.mainSizer)

        self.levelPanel.SetupScrolling()
Example #4
0
def main(winstyle=0):
    # Initialize pygame
    pygame.init()
    if pygame.mixer and not pygame.mixer.get_init():
        print "Warning, no sound"
        pygame.mixer = None

    # Set the display mode
    winstyle = 0  # |FULLSCREEN
    bestdepth = pygame.display.mode_ok(Globals.SCREENRECT.size, winstyle, Globals.BIT_DEPTH)
    screen = pygame.display.set_mode(Globals.SCREENRECT.size, winstyle, bestdepth)

    # Load images, assign to sprite classes
    # (do this before the classes are used, after screen setup)
    Globals.GameData.setupContainers()
    Globals.GameData.loadSounds()
    Globals.GameData.doStaticInits()
    Globals.GameData.loadImages()
    Globals.GameData.setBaseShelters()

    # decorate the game window
    icon = pygame.transform.scale(SpriteLib.InvaderA.image_list[0], (Globals.ICON_WIDTH, Globals.ICON_HEIGHT))
    pygame.display.set_icon(icon)
    pygame.display.set_caption(Globals.GAME_NAME)
    pygame.mouse.set_visible(0)

    # create the background, tile the bgd image
    bgdtile = SpriteLib.load_image(Globals.BACKGROUND_IMAGE)
    background = pygame.Surface(Globals.SCREENRECT.size)
    for x in range(0, Globals.SCREENRECT.width, bgdtile.get_width()):
        background.blit(bgdtile, (x, 0))
    screen.blit(background, (0, 0))
    pygame.display.flip()

    # move the below to the formation object
    invader_thump = SoundUtil.load_sound(Globals.INVADER_THUMP[0])

    if pygame.mixer and Globals.MUSIC_TOGGLE:
        music = os.path.join(Globals.ART_DIR, Globals.INVADER_THUMP[0])
        pygame.mixer.music.load(music)
        pygame.mixer.music.play(-1)

    # Create Some Starting Values
    alienreload = 0
    clock = pygame.time.Clock()

    # initialize our starting sprites
    player = SpriteLib.Player()

    if pygame.font:
        Score = SpriteLib.Score()
        Globals.GameData.all.add(Score)

    # pygame.time.set_timer(pygame.USEREVENT, 13)
    invader_thump.play(Globals.SOUND_LOOP_FOREVER)
    ufo = 0

    while player.alive():

        # get input
        for event in pygame.event.get():
            if event.type == pygame.locals.QUIT or (
                event.type == pygame.locals.KEYDOWN and event.key == pygame.locals.K_ESCAPE
            ):
                return
            # elif event.type == pygame.USEREVENT:
            #        pygame.time.set_timer(pygame.USEREVENT, 750)
            #        invader_thump.play()

        keystate = pygame.key.get_pressed()

        # clear/erase the last drawn sprites
        Globals.GameData.all.clear(screen, background)

        # update all the sprites
        Globals.GameData.all.update()

        # handle player input
        direction = keystate[pygame.locals.K_RIGHT] - keystate[pygame.locals.K_LEFT]
        player.move(direction)
        firing = keystate[pygame.locals.K_SPACE]

        if not player.reloading and firing and len(Globals.GameData.shots) < Globals.MAX_SHOTS:
            player.fire()

        player.reloading = firing

        # Create new alien
        if alienreload:
            alienreload = alienreload - 1
        elif not int(random.random() * Globals.ALIEN_ODDS):
            inv_type = int(random.random() * 3)
            if inv_type == 0:
                SpriteLib.InvaderA()
            elif inv_type == 1:
                SpriteLib.InvaderB()
            elif inv_type == 2:
                SpriteLib.InvaderC()
            else:
                print "error inv_type %d" % inv_type
            alienreload = Globals.ALIEN_RELOAD

        SpriteLib.Ufo.reload_time = SpriteLib.Ufo.reload_time - 1

        if not SpriteLib.Ufo.ufo_overhead and SpriteLib.Ufo.reload_time <= 0:
            SpriteLib.Ufo.ufo_overhead = True
            ufo = SpriteLib.Ufo()
            SpriteLib.Ufo.reload_time = Globals.UFO_RELOAD_TIME

        # Detect collisions
        for alien in pygame.sprite.spritecollide(player, Globals.GameData.aliens, 1):
            Score.addToScore(alien.score)
            player.handleDeath()

        for bomb in pygame.sprite.groupcollide(Globals.GameData.bombs, Globals.GameData.shots, 1, 1).keys():
            SpriteLib.BombHitsLaserExplosion(bomb)
            Score.addToScore(1)

        if SpriteLib.Ufo.ufo_overhead:
            for laser_shot in pygame.sprite.spritecollide(ufo, Globals.GameData.shots, 1):
                ufo.takeHit()
                Score.addToScore(ufo.score)

        if len(Globals.GameData.bombs):
            for bomb in Globals.GameData.bombs:
                for shelter in pygame.sprite.groupcollide(Globals.GameData.base_shelters, [bomb], 0, 0).keys():
                    shelter.bombHit(bomb, False)

        if len(Globals.GameData.shots):
            for shot in Globals.GameData.shots:
                for shelter in pygame.sprite.groupcollide(Globals.GameData.base_shelters, [shot], 0, 0).keys():
                    shelter.bombHit(shot, True)

        for alien in pygame.sprite.groupcollide(Globals.GameData.aliens, Globals.GameData.shots, 1, 1).keys():
            Score.addToScore(alien.score)

        for bomb in pygame.sprite.spritecollide(player, Globals.GameData.bombs, 1):
            SpriteLib.PlayerExplosion(player)
            player.kill()

        # draw the scene
        dirty = Globals.GameData.all.draw(screen)
        pygame.display.update(dirty)

        # cap the framerate
        clock.tick(Globals.FRAMES_PER_SEC)

    if pygame.mixer:
        pygame.mixer.music.fadeout(Globals.ONE_SECOND)
    pygame.time.wait(Globals.ONE_SECOND)
Example #5
0
    def doGamePlay(self):
        #update level data
        envImages, enemies = self._currentLevel.update(1)

        for envImage in envImages:
            SpriteLib.EnviornmentComponent(
                int(envImage.type), self._screenRect, (-100, envImage.xPos),
                (envImage.movementX, envImage.movementY))

        for enemy in enemies:
            SpriteLib.Alien(int(enemy.type), self._screenRect,
                            (-10, enemy.xPos))

        #get key state
        keystate = pygame.key.get_pressed()

        #handle player movement
        self._spaceShip.handleInput(keystate)

        #Temp - for testing
        if keystate[K_q]:
            SpriteLib.Alien(1, self._screenRect, (10, 10))
        if keystate[K_w]:
            SpriteLib.Alien(2, self._screenRect, (50, 10))
        if keystate[K_h]:
            SpriteLib.Alien(3, self._screenRect, (70, 10))
        if keystate[K_o]:
            SpriteLib.Alien(4, self._screenRect, (10, 10))
        if keystate[K_y]:
            SpriteLib.PowerUp(self._screenRect, self._screen, (0, 50), (0, 10),
                              1)
        if keystate[K_k]:
            SpriteLib.Alien(5, self._screenRect, (10, 10))

        #Collision Detection - shots vs aliens
        collision = pygame.sprite.groupcollide(self._playerShotsGroup,
                                               self._aliensGroup, False, False)
        for shot in collision.iterkeys():
            if pygame.sprite.collide_mask(shot, collision[shot][0]):
                shot.hit(collision[shot][0])
                shot.kill()

        #Collision Detection - shots vs background
        pygame.sprite.groupcollide(self._playerShotsGroup,
                                   self._backgroundGroup, True, False,
                                   pygame.sprite.collide_mask)

        #Collision Detection - player vs aliens
        for alien in pygame.sprite.spritecollide(self._spaceShip,
                                                 self._aliensGroup, False):
            if alien.hit(self._spaceShip):
                #game over - TODO, menu system
                print "Game Over!!!"
                return
            self._interface.setHitPoints(self._spaceShip.getMaxHP(),
                                         self._spaceShip.getHP())
            alien.kill()

        #Collision Detection - player vs background
        for backgroundImage in pygame.sprite.spritecollide(
                self._spaceShip, self._backgroundGroup, False):
            if pygame.sprite.collide_mask(self._spaceShip, backgroundImage):
                if backgroundImage.hit(self._spaceShip):
                    print "ouch."
                    return
                self._interface.setHitPoints(self._spaceShip.getMaxHP(),
                                             self._spaceShip.getHP())

        # clear/erase the last drawn sprites
        self._allGroup.clear(self._screen, self._background)

        #update all the sprites
        self._allGroup.update()

        #draw the scene
        dirty = self._allGroup.draw(self._screen)
        #pygame.display.update(dirty)
        pygame.display.update()
Example #6
0
    def doGameMenu(self):
        # Fill background
        background = pygame.Surface(self._screen.get_size())
        background = background.convert()
        background.fill((250, 250, 250))

        #load logo image
        if not hasattr(self, '_logo'):
            self._logo = SpriteLib.SimpleSprite(236, 103, "Logo.png",
                                                self._screenRect)
            self._menuFont = pygame.font.Font(None, 40)
            self._selectedMenuItem = 0
            self._keypressed = False

        # Display menu
        if self._selectedMenuItem == 0:
            menu1 = self._menuFont.render("Start Game", 1, (10, 10, 240))
        else:
            menu1 = self._menuFont.render("Start Game", 1, (10, 10, 10))
        if self._selectedMenuItem == 1:
            menu2 = self._menuFont.render("Quit Game", 1, (10, 10, 240))
        else:
            menu2 = self._menuFont.render("Quit Game", 1, (10, 10, 10))

        textpos = menu1.get_rect()
        textpos.centerx = background.get_rect().centerx
        textpos.centery = (background.get_rect().centery) - textpos.height
        background.blit(menu1, textpos)
        textpos = menu2.get_rect()
        textpos.centerx = background.get_rect().centerx
        textpos.centery = (background.get_rect().centery) + textpos.height
        background.blit(menu2, textpos)
        pos = self._logo.image.get_rect()
        pos.centerx = background.get_rect().centerx
        background.blit(self._logo.image, pos)

        #handle input
        keystate = pygame.key.get_pressed()
        keypressed = False
        if keystate[K_UP]:
            keypressed = True
            self._keypressed = True
            self._selectedMenuItem -= 1
            if self._selectedMenuItem < 0:
                self._selectedMenuItem = 0
        if keystate[K_DOWN]:
            keypressed = True
            self._keypressed = True
            self._selectedMenuItem += 1
            if self._selectedMenuItem > 1:
                self._selectedMenuItem = 1
        if keystate[K_RETURN]:
            if self._selectedMenuItem == 0:
                self._currentMode = GameState.GamePlay
                background.fill((0, 0, 0))
            elif self._selectedMenuItem == 1:
                return True

        if not keypressed:
            self._keypressed = keypressed

        # Blit everything to the screen
        self._screen.blit(background, (0, 0))
        pygame.display.flip()

        return False
Example #7
0
def main(winstyle = 0):
    # Initialize pygame
    pygame.init()
    if pygame.mixer and not pygame.mixer.get_init():
        print 'Warning, no sound'
        pygame.mixer = None

    # Set the display mode
    winstyle = 0  # |FULLSCREEN
    bestdepth = pygame.display.mode_ok(SCREENRECT.size, winstyle, BIT_DEPTH)
    screen = pygame.display.set_mode(SCREENRECT.size, winstyle, bestdepth)

    #Load images, assign to sprite classes
    #(do this before the classes are used, after screen setup)
    SpriteMgr.loadImages();
    """
    SpriteLib.Player.loadImage(LASER_BASE_FILE)
    SpriteLib.Explosion.loadImage(EXPLOSION_FILE)
    SpriteLib.BaseInvader.loadImages()
    #SpriteLib.InvaderA.loadImages()
    #SpriteLib.InvaderB.loadImages()
    #SpriteLib.InvaderC.loadImages()
    SpriteLib.InvaderBomb.loadImage(BOMB_FILE)
    SpriteLib.LaserShot.loadImage(LASER_SHOT_FILE)
    """

    #decorate the game window
    icon = pygame.transform.scale(SpriteLib.InvaderA.image_list[0], (ICON_WIDTH, ICON_HEIGHT))
    pygame.display.set_icon(icon)
    pygame.display.set_caption(GAME_NAME)
    pygame.mouse.set_visible(0)

    #create the background, tile the bgd image
    bgdtile = SpriteLib.load_image(BACKGROUND_IMAGE)
    background = pygame.Surface(SCREENRECT.size)
    for x in range(0, SCREENRECT.width, bgdtile.get_width()):
        background.blit(bgdtile, (x, 0))
    screen.blit(background, (0, 0))
    pygame.display.flip()

    #load the sound effects
    boom_sound = load_sound(BOOM_SOUND)
    shoot_sound = load_sound(SHOOT_SOUND)

    if pygame.mixer and MUSIC_TOGGLE:
        music = os.path.join(ART_DIR, GAME_MUSIC)
        pygame.mixer.music.load(music)
        pygame.mixer.music.play(-1)

    SpriteMgr.setupContainers()
    """
    # Initialize Game Groups
    #aliens = pygame.sprite.Group()
    aliens = SpriteLib.InvaderGroup()
    shots = pygame.sprite.Group()
    bombs = pygame.sprite.Group()
    all = pygame.sprite.RenderUpdates()
    lastalien = pygame.sprite.GroupSingle()

    #assign default groups to each sprite class
    SpriteLib.Player.containers = all
    SpriteLib.InvaderA.containers = aliens, all, lastalien
    SpriteLib.InvaderB.containers = aliens, all, lastalien
    SpriteLib.InvaderC.containers = aliens, all, lastalien
    SpriteLib.LaserShot.containers = shots, all
    SpriteLib.InvaderBomb.containers = bombs, all
    SpriteLib.Explosion.containers = all
    SpriteLib.Score.containers = all
    """

    #Create Some Starting Values
    alienreload = ALIEN_RELOAD
    clock = pygame.time.Clock()

    # initialize our starting sprites
    player = SpriteLib.Player()
    player
    SpriteLib.InvaderA() #note, this 'lives' because it goes into a sprite group
    if pygame.font:
        Score = SpriteLib.Score()
        all.add(Score)

    while player.alive():

        #get input
        for event in pygame.event.get():
            if event.type == QUIT or \
                (event.type == KEYDOWN and event.key == K_ESCAPE):
                    return
        keystate = pygame.key.get_pressed()

        # clear/erase the last drawn sprites
        all.clear(screen, background)

        #update all the sprites
        all.update()

        #handle player input
        direction = keystate[K_RIGHT] - keystate[K_LEFT]
        player.move(direction)
        firing = keystate[K_SPACE]
        if not player.reloading and firing and len(shots) < MAX_SHOTS:
            SpriteLib.LaserShot(player.gunpos())
            shoot_sound.play()
        player.reloading = firing

        # Create new alien
        if alienreload:
            alienreload = alienreload - 1
        elif not int(random.random() * ALIEN_ODDS):
            inv_type = int(random.random() * 3)
            if inv_type == 0:
                SpriteLib.InvaderA()
            elif inv_type == 1:
                SpriteLib.InvaderB()
            elif inv_type == 2:
                SpriteLib.InvaderC()
            else:
                print "error inv_type %d" % inv_type
            alienreload = ALIEN_RELOAD

        # Drop bombs
        if lastalien and not int(random.random() * BOMB_ODDS):
            SpriteLib.InvaderBomb(lastalien.sprite)

        # Detect collisions
        for alien in pygame.sprite.spritecollide(player, aliens, 1):
            boom_sound.play()
            SpriteLib.Explosion(alien)
            SpriteLib.Explosion(player)
            Score.addToScore(1)
            player.kill()

        for bomb in pygame.sprite.groupcollide(shots, bombs, 1, 1).keys():
            boom_sound.play()
            SpriteLib.Explosion(bomb)

        for alien in pygame.sprite.groupcollide(shots, aliens, 1, 1).keys():
            boom_sound.play()
            SpriteLib.Explosion(alien)
            Score.addToScore(1)

        for bomb in pygame.sprite.spritecollide(player, bombs, 1):
            boom_sound.play()
            SpriteLib.Explosion(player)
            SpriteLib.Explosion(bomb)
            player.kill()

        #draw the scene
        dirty = all.draw(screen)
        pygame.display.update(dirty)

        #cap the framerate
        clock.tick(FRAMES_PER_SEC)

    if pygame.mixer:
        pygame.mixer.music.fadeout(1000)
    pygame.time.wait(1000)