Example #1
0
 def __init__(self, screen):
     self.screen = screen
     self.map_screen = self.screen.subsurface(0, 0, MAP_WIDTH, MAP_HEIGHT)
     #pygame.display.set_icon(pygame.image.load(os.path.join("images", "ui","icon.png")))
     
     self.loaded_maps = {}
     self.current_map = None
     
     pygame.mouse.set_visible(1);        
     
     self.hasKey = False
     self.animalsFreed = False
     
     self.soundUtil = SoundUtil()
     self.soundUtil.sound_on = True
     
     self.pauseMenu = PauseScreen(self)
     
     self.cursor = Sprite()
     self.cursor.rect = Rect(0,0,1,1)
     
     self.hud = Hud(self)
     
     self.player_group = Group()
     self.player = Taz(image_util.load_image("tasmanian.png"), 1, 1, self)
     self.player.inUse = True
     self.player.current_image = self.player.image
     
     self.hud.set_player(self.player)
     
     self.last_rendered_achievement = 0
     self.achievement_countdown = 0
     
     self.clock = pygame.time.Clock()
     self.achievements_done = []
     
     self.pressed = []
     for key in pygame.key.get_pressed():
         self.pressed.append( True )
         
     self.loadLevel("jail.txt")
     
     self.isGameOver = False
     self.returnToMainMenu = False
Example #2
0
class Game:
    
    
    
    def __init__(self, screen):
        self.screen = screen
        self.map_screen = self.screen.subsurface(0, 0, MAP_WIDTH, MAP_HEIGHT)
        #pygame.display.set_icon(pygame.image.load(os.path.join("images", "ui","icon.png")))
        
        self.loaded_maps = {}
        self.current_map = None
        
        pygame.mouse.set_visible(1);        
        
        self.hasKey = False
        self.animalsFreed = False
        
        self.soundUtil = SoundUtil()
        self.soundUtil.sound_on = True
        
        self.pauseMenu = PauseScreen(self)
        
        self.cursor = Sprite()
        self.cursor.rect = Rect(0,0,1,1)
        
        self.hud = Hud(self)
        
        self.player_group = Group()
        self.player = Taz(image_util.load_image("tasmanian.png"), 1, 1, self)
        self.player.inUse = True
        self.player.current_image = self.player.image
        
        self.hud.set_player(self.player)
        
        self.last_rendered_achievement = 0
        self.achievement_countdown = 0
        
        self.clock = pygame.time.Clock()
        self.achievements_done = []
        
        self.pressed = []
        for key in pygame.key.get_pressed():
            self.pressed.append( True )
            
        self.loadLevel("jail.txt")
        
        self.isGameOver = False
        self.returnToMainMenu = False
        
    def reset(self):
        self.player_group.remove(self.player)
        self.current_map.game_objects.remove(self.player)
        self.player = self.player.newPlayer()
        self.player.inUse = True
        self.player.current_image = self.player.image
        self.pressed = []
        for key in pygame.key.get_pressed():
            self.pressed.append( False )
            
        self.loadLevel("jail.txt")
        self.player.x = TILE_SIZE
        self.player.y = TILE_SIZE
        self.player.rect.left = self.player.x + self.player.left_offset
        self.player.rect.top = self.player.y + self.player.top_offset
    
    def loadLevel(self, file):
        self.pressed = []
        for key in pygame.key.get_pressed():
            self.pressed.append( False )
        
        if file in self.loaded_maps:
            self.current_map = self.loaded_maps[file]
            self.current_map.reset()
        else:
            self.current_map = Map(file, self.screen, self)
            self.loaded_maps[file] = self.current_map
            self.current_map.intialize()
    
    def change_maps(self, dest, x, y):
        if self.player.isInCar:
            self.current_map.game_objects.remove(self.player.car)
            self.current_map.not_player.remove(self.player.car)
        
        self.loadLevel(dest)
        self.player.x = x * TILE_SIZE
        self.player.y = y * TILE_SIZE
        self.player.rect.left = self.player.x + self.player.left_offset
        self.player.rect.top = self.player.y + self.player.top_offset
        
        if self.player.isInCar:
            if isinstance(self.player.car, ImperviousCar):
                self.player.car = Car(None,0,0,self)
                self.player.car.driver = self.player
                self.player.car.driving = True
            self.player.car.x = x * TILE_SIZE
            self.player.car.y = y * TILE_SIZE
            self.player.car.rect.left = self.player.car.x
            self.player.car.rect.top = self.player.car.y
            self.player.car.avoidMapLinks()
            self.current_map.game_objects.add(self.player.car)
        elif self.player.isInTree:
            self.player.getOutOfTree()
            self.player.x = TILE_SIZE
            self.player.y = TILE_SIZE
            self.player.rect.left = self.player.x + self.player.left_offset
            self.player.rect.top = self.player.y + self.player.top_offset
    
    def change_player(self, newPlayer):
        self.player.inUse = False
        self.player.leave_car()
        self.current_map.game_objects.add(self.player)
        self.player = newPlayer;
        self.player.inUse = True
        self.player.current_image = self.player.image
        self.hud.set_player(self.player)
    
    def free_all_animals(self):
        self.free_animal("Koala")
        self.free_animal("Tasmanian Devil")
        self.free_animal("Kangaroo")
        self.free_animal("Brown Snake")
        self.free_animal("Dingo")
    
    def free_animal(self, animal_name):
        animals_freed[animal_name] = image_util.load_image(animal_info.info[animal_name][3])
        self.hud.draw()
        if len(animals_freed) is 5 and self.animalsFreed is False:
            cutscene = Cutscene(self, "escape the zoo", \
                                 [image_util.load_image(os.path.join("cutscenes","escape_the_zoo.png"))], \
                                 image_util.load_sliced_sprites(210, 80, os.path.join("cutscenes","press_enter.png")));
            cutscene.fire(self.player)
            self.animalsFreed = True
    
    def gameloop(self):
        self.returnToMainMenu = False
        self.hud.draw()
        while self.returnToMainMenu is False:
            self.clock.tick(60)
            self.get_input()
            self.update_state()
            self.draw()
        print "GAME ENDING!"
            
    
    def achievement(self):
        killed = self.hud.visitors_killed
        if killed >= 1000 and 1000 not in self.achievements_done:#not killed == self.last_rendered_achievement:
            #self.last_rendered_achievement = killed
            self.achievements_done.append(1000)
            self.achievement_image = image_util.load_image("achievement_1000.png")
            self.achievement_countdown = 200
        elif killed >= 500 and 500 not in self.achievements_done:## and not killed == self.last_rendered_achievement:
            self.achievements_done.append(500)
            #self.last_rendered_achievement = killed
            self.achievement_image = image_util.load_image("achievement_500.png")
            self.achievement_countdown = 200
        elif killed >= 100 and 100 not in self.achievements_done:## and not killed == self.last_rendered_achievement:
            self.achievements_done.append(100)
            #self.last_rendered_achievement = killed
            self.achievement_image = image_util.load_image("achievement_100.png")
            self.achievement_countdown = 200
        elif killed >= 10 and 10 not in self.achievements_done:## and not killed == self.last_rendered_achievement:
            self.achievements_done.append(10)
            #self.last_rendered_achievement = killed
            self.achievement_image = image_util.load_image("achievement_10.png")
            self.achievement_countdown = 200
        
        
        if self.achievement_countdown > 0:
            self.screen.blit(self.achievement_image, (250,100))
            self.achievement_countdown -= 1
    
    def get_input(self):
        self.getEvents()
        self.getButtonPresses()
        return
    
    def getEvents(self):
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit()
    
    def getButtonPresses(self):
        keys = pygame.key.get_pressed()

        # quit
        if(keys[K_ESCAPE]):
            if not self.pressed[K_ESCAPE]:
                self.pressed[K_ESCAPE] = True
                self.pauseMenu.loop()
                #figure out what we wanted to do
                if self.pauseMenu.index is CONTINUE:
                    self.hud.draw()
                elif self.pauseMenu.index is MAIN_MENU:
                    self.returnToMainMenu = True
        else:
            self.pressed[K_ESCAPE] = False
    
        # attack
        if(keys[K_SPACE]):
            if not self.pressed[K_SPACE]:
                self.pressed[K_SPACE] = True
                self.player.attack()
        else:
            self.pressed[K_SPACE] = False
    
        # use ability
        if(keys[K_RETURN]):
            if not self.pressed[K_RETURN]:
                self.pressed[K_RETURN] = True
                self.player.use_ability()
        else:
            self.pressed[K_RETURN] = False
            
        # use ability
        if(keys[K_F1]):
            if not self.pressed[K_F1]:
                self.pressed[K_F1] = True
                self.free_all_animals()
        else:
            self.pressed[K_F1] = False
    
        # get into and out of car
        if(keys[K_q]):
            if not self.pressed[K_q]:
                self.pressed[K_q] = True
                self.player.use_object()
        else:
            self.pressed[K_q] = False
        
        # move
        if(keys[K_w]):
            if not self.pressed[K_w]:
                self.player.move(0, -1)
        else:
            self.pressed[K_w] = False
    
        if(keys[K_s]):
            if not self.pressed[K_s]:
                self.player.move(0, 1)
        else:
            self.pressed[K_s] = False
            
        if(keys[K_a]):
            if not self.pressed[K_a]:
                self.player.move(-1, 0)
        else:
            self.pressed[K_a] = False
            
        if(keys[K_d]):
            if not self.pressed[K_d]:
                self.player.move(1, 0)
        else:
            self.pressed[K_d] = False
        
        if(keys[K_UP]):
            if not self.pressed[K_UP]:
                self.player.move(0, -1)
        else:
            self.pressed[K_UP] = False
    
        if(keys[K_DOWN]):
            if not self.pressed[K_DOWN]:
                self.player.move(0, 1)
        else:
            self.pressed[K_DOWN] = False
            
        if(keys[K_LEFT]):
            if not self.pressed[K_LEFT]:
                self.player.move(-1, 0)
        else:
            self.pressed[K_LEFT] = False
            
        if(keys[K_RIGHT]):
            if not self.pressed[K_RIGHT]:
                self.player.move(1, 0)
        else:
            self.pressed[K_RIGHT] = False
        
        if(keys[K_o]):
            if not self.pressed[K_o]:
                self.pressed[K_o] = True
                if self.soundUtil.sound_on:
                    self.soundUtil.sound_on = False
                else:
                    self.soundUtil.sound_on = True
        else:
            self.pressed[K_o] = False
            
            
    def update_state(self):
        if self.current_map is not None:
            self.current_map.update_objects()
            
        for p in self.player_group:
            p.update()
    
    def draw_without_flip(self):
        self.map_screen.fill((0,0,0))
        if self.current_map is not None:
            self.current_map.draw_tiles()
            self.current_map.draw_objects()
        
        #for p in self.player_group:
        #    p.draw()
        self.player.draw()
        self.achievement()
    
    def draw(self):
        self.draw_without_flip()
        for cutscene in self.current_map.start_cutscenes:
            self.current_map.start_cutscenes.remove(cutscene)
            cutscene.fire(self.player)
        pygame.display.flip()