Exemplo n.º 1
0
class GameState:
    def __init__(self):
        self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
        self.hero = Hero(YELLOW, START_POSITION)
        self.balls = []
        self.last_time = 0
        self.score = 0
        self.font = pygame.font.Font(None, BASE_FONT_SIZE)

    def process(self):
        if time.time() - self.last_time >= 1:
            self.balls.append(Ball(BASE_RADIUS))
            self.last_time = time.time()
        for ball in self.balls:
            if ball.collision(
                (self.hero.x, self.hero.y, self.hero.width, self.hero.height)):
                self.score += 1
                self.balls.remove(ball)
                del ball
                continue
            if ball.collision((0, HEIGHT + ball.radius * 2, WIDTH, 0)):
                self.balls.remove(ball)
                del ball
                continue

            ball.move()

    def draw(self):
        self.screen.fill(BLACK)
        for ball in self.balls:
            ball.draw(self.screen)

        text = self.font.render("score: " + str(self.score), 1, RED)
        self.screen.blit(text, (WIDTH - text.get_size()[0] - 20, 20))
        self.hero.draw(self.screen)
    def __init__(self, width, height):
        pygame.init()
        self.width = width
        self.height = height
        self.screen = pygame.display.set_mode((width, height))
        self.clock = pygame.time.Clock()
        done = False

        hero = Hero(self, width / 2, height - 20)
        generator = Generator(self)
        rocket = None

        while not done:
            if len(self.aliens) == 0:
                self.displayText("Você Venceu!")

            pressed = pygame.key.get_pressed()
            if pressed[pygame.K_LEFT]:
                hero.x -= 2 if hero.x > 20 else 0
            elif pressed[pygame.K_RIGHT]:
                hero.x += 2 if hero.x < width - 20 else 0

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    done = True
                if event.type == pygame.KEYDOWN and event.key == pygame.K_UP and not self.lost:
                    self.rockets.append(Rocket(self, hero.x, hero.y))

            pygame.display.flip()
            self.clock.tick(60)
            self.screen.fill((0, 0, 0))

            for alien in self.aliens:
                alien.draw()
                alien.checkCollision(self)
                if (alien.y > height):
                    self.lost = True
                    self.displayText("Game Over")

            for rocket in self.rockets:
                rocket.draw()

            if not self.lost: hero.draw()
Exemplo n.º 3
0
class Level(object):
    '''TwistedMold level'''

    def __init__(self, screen, father, level, total_points):

        self.screen = screen
        self.father = father
        self.level = level
        self.background = utils.load_image(levels[level]['background'])
      
        #parameters
        self.energy_leap = levels[level]['energy_leap']
        self.mold_density = levels[level]['mold_density']
        self.mold_velocity = levels[level]['mold_velocity']
        self.max_time = levels[level]['max_time']
        #menu control
        self.options = [("Yes", self.father),("No", None)]
        self.exit = False
    
        #Create the game clock
        self.clock = pygame.time.Clock()

        self.mm = MoldsManager(self.mold_density, self.mold_velocity)
        self.bm = BottleManager(*levels[self.level]['bottle_density'])
        self.bm.mm = self.mm

        self.total_points = total_points
        
        self.pointsCounter = Points(self.total_points)
        self.levelIndicator = LevelIndicator(self.level)
        self.mm.level = self
        self.tics = 0

        self.snow_slim = pygame.sprite.Group()
        self.snow_fat = pygame.sprite.Group()        

        for x in range(75):
            sprite = Wheather(1,2)
            self.snow_slim.add(sprite)

        for x in range(75):
            sprite = Wheather(3,5)
            self.snow_fat.add(sprite)
    
        self.energy_bar = EnergyBar(self.energy_leap)
        self.bm.energy_bar = self.energy_bar
        self.mm.energy_bar = self.energy_bar

        self.level_time = LevelTime(self.max_time)

        self.gadgets = pygame.sprite.RenderUpdates()
        self.gadgets.add(self.pointsCounter)
        self.gadgets.add(self.energy_bar)
        self.gadgets.add(self.level_time)
        self.gadgets.add(self.levelIndicator)

        self.hero = Hero()
        self.bm.hero=self.hero
        self.mm.hero=self.hero

        self.explotion = Explotion()

        self.control_down = -1
        self.control_up = -1
        self.control_left = -1
        self.control_right = -1
        self.control_tiempo = 5

        self.next_scream = random.randrange(400,500)

        #Show level image
        Visual(self.screen, [utils.load_image(levels[self.level]['img'])], [2], None).loop()

    def loop(self):  
        music.play_music(PLAYMUSIC)
        while not self.finish():
            self.tics += 1  

            if not self.next_scream:
                music.play_random_scream()            
                self.next_scream = random.randrange(400,500)
            else:
                self.next_scream -= 1               
   
            self.screen.blit(self.background, (-(self.tics % 700),0)) 
            self.update()
            self.draw()

            #Control
            for event in pygame.event.get():
                self.control(event)

            self.clock.tick(CLOCK_TICS)

            if self.control_down == 0: self.hero.down()
            if self.control_up == 0: self.hero.up()
            if self.control_right == 0: self.hero.right()
            if self.control_left == 0: self.hero.left()

            if self.control_down >= 0:
                self.control_down += 1
                if self.control_down >= self.control_tiempo:
                    self.control_down = 0
                    
            if self.control_up >= 0:
                self.control_up += 1
                if self.control_up >= self.control_tiempo:
                    self.control_up = 0

            if self.control_right >= 0:
                self.control_right += 1
                if self.control_right >= self.control_tiempo:
                    self.control_right = 0

            if self.control_left >= 0:
                self.control_left += 1
                if self.control_left >= self.control_tiempo:
                    self.control_left = 0

            self.clock.tick(CLOCK_TICS)

            pygame.display.flip()
    
        if self.exit:
            return self.father
        elif not self.level_time.seconds:                   
            #music.stop_music()

            if self.level < LEVELS:
                def f(screen):
                    return Level(screen, self.father, self.level + 1, self.total_points)
                return f
            else:
                
                def f(screen):
                    def g(screen):
                        return HighScores(self.screen, self.father, self.total_points)
                    music.play_music(WINMUSIC)
                    return Visual(screen,utils.load_image(WIN),-1,g)
                return f

        elif self.energy_bar.energy_percent <= 0:
            def f(screen):
                def g(screen):
                    return HighScores(self.screen, self.father, self.total_points) 
                music.play_gameover()
                return Visual(screen, [utils.load_image(GAMEOVER)], [3], g)               

            return f

    def update(self):
        if self.level in(4,5):
            self.snow_slim.update()               

        self.energy_bar.update(self.tics)
        self.level_time.update(self.tics)

        self.bm.update()        

        self.mm.gen(self.tics)
        self.mm.move(self.tics)

        if self.level in(4,5):
            self.snow_fat.update() 

        #Blood Explotion
        self.explotion.update(self.tics, self.screen)
 
        #Verify collision
        if self.mm.is_fitting(self.hero, self.tics):
            self.explotion.boom(self.hero.get_center())
            self.total_points += 1

        self.pointsCounter.update(self.total_points)  
        self.levelIndicator.update(self.level)          
            
    
    def draw(self):
        self.snow_slim.draw(self.screen)
        
        self.bm.draw(self.screen)
        self.mm.draw(self.screen)
        
        self.hero.draw(self.screen)
        self.snow_fat.draw(self.screen)    
        self.gadgets.draw(self.screen)

    def control(self, event):
        
        if event.type == QUIT:
            sys.exit(0)

        if event.type == KEYDOWN:
            if event.key == K_DOWN:
                self.control_down = 0
            if event.key == K_UP:
                self.control_up = 0
            if event.key == K_RIGHT:
                self.control_right = 0
            if event.key == K_LEFT:
                self.control_left = 0
            if event.key in(K_SPACE, K_s):
                self.hero.twist_right()
                music.play_scream()
            if event.key == K_a:
                self.hero.twist_left()
                music.play_scream()

            if event.key == K_ESCAPE:
                pygame.mixer.music.set_volume(0.5)
                mem = Menu(self.screen, self.options, "Do you want to quit?").loop()
                pygame.mixer.music.set_volume(1.0)

                if mem == self.father:
                    music.stop_music()
                    self.exit = True

        if event.type == KEYUP:
            if event.key == K_DOWN:
                self.control_down = -1
            if event.key == K_UP:
                self.control_up = -1
            if event.key == K_RIGHT:
                self.control_right = -1
            if event.key == K_LEFT:
                self.control_left = -1

    def finish(self):
        if self.level_time.seconds == 0 or self.energy_bar.energy_percent <= 0 or self.exit:
            return True

        return False
Exemplo n.º 4
0
class Game:
    def __init__(self):
        self.hero = Hero()
        self.enemies = []
        self.bullets = []
        self.distance = 0
        self.score_font = pygame.font.Font("freesansbold.ttf", 16)
        self.game_over_font = pygame.font.Font("freesansbold.ttf", 32)
        self.health_font = pygame.font.Font("freesansbold.ttf", 16)

    def init(self):
        self.create_enemies()

    def show_health_bar(self):
        health_bar = self.health_font.render(f"Health: {self.hero.health}",
                                             True, (255, 255, 255))
        screen.blit(health_bar, (300, 16))

    def show_score(self):
        score = self.score_font.render(f"Score: {self.distance}", True,
                                       (255, 255, 255))
        screen.blit(score, (16, 16))

    def game_over_screen(self):
        score = self.game_over_font.render(f"Final Score: {self.distance}",
                                           True, (255, 255, 255))
        screen.blit(
            score,
            (round(SCREEN_WIDTH / 2 - 132), round(SCREEN_HEIGHT / 2 - 15)),
        )

    def create_enemies(self):
        for position_x in POSSIBLE_X:
            if random.randint(1, 2) < 1.5:
                continue
            self.enemies.append(Enemy(position_x, 30))

    def check_collision(self, first_item, second_item):
        return (first_item.x < second_item.x + second_item.width
                and first_item.x + first_item.width > second_item.x
                and first_item.y < second_item.y + second_item.height
                and first_item.y + first_item.height > second_item.y)

    def start(self):
        self.init()
        running = True
        game_over = False

        while running:
            screen.fill((0, 0, 0))
            screen.blit(backgroundImg, (0, 0))

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    running = False

                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        self.hero.move("left")
                    elif event.key == pygame.K_RIGHT:
                        self.hero.move("right")

                    if event.key == pygame.K_SPACE:
                        bullet = Bullet(self.hero.x + self.hero.width / 2 - 12,
                                        self.hero.y)
                        bullet_sound.play()
                        self.bullets.append(bullet)

            self.distance += 1

            if self.distance % 100 == 0:
                self.create_enemies()

            self.hero.draw()

            for bullet in self.bullets:
                bullet.draw()
                bullet.update()

            for bullet in self.bullets:
                if bullet.y <= 0:
                    self.bullets.remove(bullet)

            for enemy in self.enemies:
                enemy.draw()
                enemy.update()
                if self.check_collision(self.hero, enemy):
                    self.hero.decrease_health()
                    self.enemies.remove(enemy)

            for enemy in self.enemies:
                if enemy.y >= SCREEN_HEIGHT or enemy.health <= 0:
                    self.enemies.remove(enemy)
                    if enemy.health <= 0:
                        explosion_sound.play()

            for enemy in self.enemies:
                for bullet in self.bullets:
                    if self.check_collision(enemy, bullet):
                        enemy.decrease_health()
                        self.bullets.remove(bullet)

            if self.hero.health <= 0:
                running = False
                game_over = True

            self.show_score()
            self.show_health_bar()
            pygame.display.update()
            clock.tick(60)

        while game_over:
            screen.fill((0, 0, 0))
            self.game_over_screen()

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    game_over = False

            pygame.display.update()
Exemplo n.º 5
0
        hero.i = hero.i + 1
    elif e.keycode == 83:
        hero.j = hero.j + 1
    elif e.keycode == 87:
        hero.j = hero.j - 1
    print(hero.i)
    print(hero.j)
    hero.draw(canvas, background, image_size)
    # and lower if the key that was pressed the down arrow
    # draw the box again in the new position


# Tell the canvas that we prepared a function that can deal with the key press events
canvas.bind("<KeyPress>", on_key_press)
canvas.pack()

# Select the canvas to be in focused so it actually recieves the key hittings
canvas.focus_set()
canvas.delete("all")
grid.draw(canvas, background, image_size)
hero.draw(canvas, background, image_size)
enemy.draw(canvas, background, image_size)
boss.draw(canvas, background, image_size)

# This bind window to keys so that move is called when you press a key

# Create a function that can be called when a key pressing happens
# Draw the box in the initial position

root.mainloop()
Exemplo n.º 6
0
def main():


    open_canvas()
    global mainback
    mainback = Mainback()
    global start
    start = False

    while(start == False):
        handle_events()
        clear_canvas()
        mainback.draw()
        update_canvas()
        delay(0.08)

    #클래스 선언
    global hero
    hero = Hero()
    rabbit = Rabbit()
    rabbit_group = [Rabbit() for i in range(600)]
    land = Land()
    wood = Wood()
    global torch
    torch = Torch()
    global fire
    fire = Fire()
    eskimo = Eskimo()
    attack_fire = Attack_fire()
    attack_fire_group = [Attack_fire() for i in range(100)]
    background = BackGround()
    global ui
    ui = Ui()
    firewood = Firewood()
    firewood_group = [Firewood() for i in range(600)]

    #변수 선언
    rabbit_group_counter = 0
    rabbit_group_collision_counter = 0
    attack_group_counter = 0
    attack_group_update_counter = 0
    attack_group_collision_counter = 0
    rabbit_alive_counter = 0
    attack_group_alive_check = False
    attack_group_alive_counter = 0
    attack_group_limit = 20
    rabbit_group_draw_counter = 0
    firewood_num_counter = 0
    firewood_num_update_counter = 0
    firewood_collide_counter = 0
    rabbit_group_counter2 = 0
    rabbit_jump = False
    rabbit_num = 10
    firewood_num = 10
    rack_block = 0
    eskimo_counter = 0


    global running
    running = True



    while running:
        #핸들 이벤트
        handle_events()

        #업데이트
        hero.update()
        background.update()
        land.update()
        wood.update()
        fire.update()
        torch.update()
        eskimo.update()
        ui.update(hero.x, hero.y, hero.ability)
        for rabbit in rabbit_group: # 토끼 업데이트
            if(rabbit_group_counter == rabbit_num):
                rabbit_group_counter = 0
                break
            if(rabbit.alive):
                rabbit.update()
            rabbit_group_counter += 1

        # for rabbit in rabbit_group: # 토끼 업데이트
        #     if(rabbit_group_counter2 == 1):
        #         print("%d" % rabbit.x)
        #         break
        #     rabbit_group_counter2 += 1

        for attack_fire in attack_fire_group: # 공격불 업데이트
            if(attack_group_update_counter == hero.attack_num):
                attack_fire.init_direction()
                attack_fire.alive = True # 공격불이 활성화 됨
                attack_fire.init_fire()
                attack_group_update_counter = 0
                break
            if(attack_fire.alive):
                attack_fire.update()
            attack_group_update_counter += 1

        for firewood in firewood_group: # 장작 업데이트
            if(firewood_num_update_counter == firewood_num):
                firewood_num_update_counter = 0
                break
            firewood.update()
            firewood_num_update_counter += 1

        #함수
        for rabbit in rabbit_group: #토끼와 히어로의 충돌체크
            if(rabbit_group_collision_counter == rabbit_num):
                rabbit_group_collision_counter = 0
                break
            if(collision(rabbit, hero)):
                rabbit.y += 50
                mainback.hero_die = True
                mainback.die_sound()
                running = False
            rabbit_group_collision_counter += 1

        for rabbit in rabbit_group: # 토끼와 공격불의 충돌체크
            if(rack_block == rabbit_num):
                rack_block = 0
                break
            for attack_fire in attack_fire_group:
                if(attack_group_collision_counter == hero.attack_num):
                    attack_group_collision_counter = 0
                    break
                if(collision(rabbit, attack_fire) and rabbit.alive and attack_fire.alive):
                    attack_fire.alive = False
                    rabbit.alive = False
                    rabbit.die = True
                    hero.kill += 1
                attack_fire.die = False
                attack_group_collision_counter += 1
            rack_block += 1

        for attack_fire in attack_fire_group:
            if(eskimo_counter == hero.attack_num):
                eskimo_counter = 0
                break
            if(collision(eskimo, attack_fire)):
                 attack_fire.alive = False
                 eskimo.x -= 10
                 eskimo.hp -= 1
                 if(eskimo.hp == 0):
                    mainback.eskimo_die = True
                    running = False
                    mainback.win_sound()
            attack_fire.die = False
            eskimo_counter += 1
        if(collision(wood, hero)): # 나무와 주인공 충돌체크
            fire.collide = True
            if(ui.firewood_num != 0):
                fire.life += ui.firewood_num*250
                ui.firewood_num = 0
        else:
            fire.collide = False


        if(collision(eskimo, hero)): # 주인공과 에스키모 충돌체크
            mainback.hero_die = True
            running = False
            mainback.die_sound()

        for firewood in firewood_group: # 장작과 주인공 충돌체크
            if(firewood_collide_counter == firewood_num):
                firewood_collide_counter = 0
                break
            if(collision(firewood, hero) and firewood.die == False):
                ui.firewood_num += 1
                firewood.die = True
            firewood_collide_counter += 1

        for rabbit in rabbit_group: # 토끼 출현!
            if(rabbit_alive_counter == rabbit_num):
                break
            if(rabbit.die == False):
                rabbit.alive = True
                rabbit_alive_counter += 1

        if(fire.die): # 불이 꺼지면 토끼들이 마구마구 몰려온다.
            rabbit_num = 500

        for attack_fire in attack_fire_group: # 불 스킬 존재 유무
            if(attack_fire.alive):
                attack_group_alive_counter = 0
                break
            attack_group_alive_counter += 1
            if(attack_group_alive_counter == hero.attack_num):
                hero.attack_num = 0


        for attack_fire in attack_fire_group: # 화면 밖을 벗어나면 불 스킬 사망 판정
            if(attack_fire.x >= 900 or attack_fire.x <= -100):
                attack_fire.alive = False
        print("stage = %d" % background.stage)
        #스테이지
        if(hero.kill == 10 and background.stage == 1):
            print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
            rabbit_num += 20
            hero.ability += 10
            firewood_num += 5
            background.stage = 2
        if(hero.kill == 30 and background.stage == 2):
            rabbit_num += 30
            firewood_num += 10
            hero.ability += 10
            background.stage = 3
            background.stage3_music()
        if(hero.kill == 60 and background.stage == 3):
            rabbit_num += 40
            firewood_num += 15
            hero.ability += 10
            background.stage = 4
        if(hero.kill == 80 and background.stage == 4):
            rabbit_num += 50
            firewood_num += 20
            hero.ability += 10
            background.stage = 5
            eskimo.alive = True
            background.stage5_music()
        if(background.stage == 5):
            rabbit_jump = True

        if(rabbit_jump):
             for rabbit in rabbit_group:
                 rabbit.y += 5

        # print("%d" % hero.attack_num)
        print("킬 수 : %d num : %d" % (hero.kill, rabbit_num))
        clear_canvas()


        #그리기
        background.draw()
        fire.draw()
        wood.draw()
        torch.draw()
        hero.draw()
        eskimo.draw()
        # eskimo.draw_bb()
        # hero.draw_bb()
        for rabbit in rabbit_group: # 적토끼 출력
            if(rabbit_group_draw_counter == rabbit_num):
                rabbit_group_draw_counter = 0
                break
            if(rabbit.alive):
                rabbit.draw()
            rabbit_group_draw_counter += 1
            # rabbit.draw_bb()
        for attack_fire in attack_fire_group: # 공격 불 출력
            if(attack_group_counter == hero.attack_num):
                attack_group_counter = 0
                break
            if(attack_fire.alive):
                attack_fire.draw()
            # attack_fire.draw_bb()
            attack_group_counter += 1
        for firewood in firewood_group: # 장작 출력
            if(firewood_num_counter == firewood_num):
                firewood_num_counter = 0
                break
            firewood.draw()
            firewood_num_counter += 1
        land.draw()
        ui.draw()



        update_canvas()

        delay(0.06)

    while(mainback.hero_die or mainback.eskimo_die):
        handle_events()
        clear_canvas()
        mainback.draw()
        update_canvas()
        delay(0.08)



    close_canvas()
Exemplo n.º 7
0
        time.sleep(10)
        isRun = False
    if game_score == tmp_score + 400:
        min_speed += 1
        max_speed += 2
        tmp_score = game_score
        hero.speed_up()
    keys = pg.key.get_pressed()
    # mouse_click = pygame.mouse.get_pressed(3)

    screen.blit(sky, (0, 0))
    screen.blit(score, (10, 10))
    score_text = font.render(str(game_score), True, WHITE)
    text_x = score.get_rect().center[0] - score_text.get_width() // 2 + 10
    text_y = score.get_rect().center[1] - score_text.get_height() // 2 + 10
    screen.blit(score_text, (text_x, text_y))

    for heart in hearts_list:
        screen.blit(heart, (W - 10 - heart.get_width() * (hearts_list.index(heart) + 1), 10))

    screen.blit(ground, rect_ground)
    hero.draw(screen)
    hero.move(keys, screen)
    hero.jump(keys, rect_ground)
    balls.draw(screen)
    balls.update(hearts_list, H)
    collideBalls()

    pg.display.update()
    clock.tick(FPS)
Exemplo n.º 8
0
class Engine:

#-------------------------------------------------------------------------------------------------------
	def __init__( self ):

		self.core = Core( 60, 1024, 768, "Ninja" )

		self.intro = Intro()

		self.menu_background = Texture( "menu/background.png" )
		self.menu_title = Menu_title()
		self.menu_play_button = Menu_play_button()
		self.menu_git_button = Menu_link_button( "menu/git.png", "https://github.com/Adriqun" )
		self.menu_google_button = Menu_link_button( "menu/google.png", "https://en.wikipedia.org/wiki/Ninja" )
		self.menu_facebook_button = Menu_link_button( "menu/facebook.png", "nothing", True )
		self.menu_twitter_button = Menu_link_button( "menu/twitter.png", "nothing", True )
		self.menu_music_button = Menu_music_button( "menu/music.png" )
		self.menu_chunk_button = Menu_music_button( "menu/chunk.png", 1 )
		self.menu_exit_log = Menu_exit_log()
		self.menu_author_log = Menu_author_log()
		self.menu_game_log = Menu_link_button( "menu/game.png", "nothing", True )
		self.menu_settings_log = Menu_link_button( "menu/settings.png", "nothing", True )
		self.menu_score_log = Menu_score_log()
		self.menu_music = Menu_music( "menu/Rayman Legends OST - Moving Ground.mp3" )
		
		self.wall = Wall()
		self.hero = Hero()
		self.menu_log = Menu_log()
		self.map = Map()
	
#-------------------------------------------------------------------------------------------------------

	def load( self ):

		self.core.setState( -1 )

		self.intro.load( self.core.getWidth(), self.core.getHeight() )

		self.menu_title.load( self.core.getWidth() )
		self.menu_play_button.load( self.core.getWidth(), self.core.getHeight() )
		self.menu_git_button.load( self.core.getWidth(), 10 )
		self.menu_google_button.load( self.core.getWidth(), self.menu_git_button.getBot() )
		self.menu_facebook_button.load( self.core.getWidth(), self.menu_google_button.getBot() )
		self.menu_twitter_button.load( self.core.getWidth(), self.menu_facebook_button.getBot() )
		self.menu_music_button.load( 10 )
		self.menu_chunk_button.load( self.menu_music_button.getBot() )
		self.menu_exit_log.load( self.core.getWidth(), self.core.getHeight() )
		self.menu_author_log.load( self.menu_play_button.getLeft()+5, self.core.getWidth(), self.menu_title.getBot() +150, self.menu_play_button.getBot() )
		self.menu_game_log.load( self.menu_author_log.getRight(), self.menu_play_button.getBot() +10, True )
		self.menu_settings_log.load( self.menu_game_log.getRight(), self.menu_play_button.getBot() +10, True )
		self.menu_score_log.load( self.menu_settings_log.getRight(), self.core.getWidth(), self.menu_title.getBot() +150, self.menu_play_button.getBot() )

		self.wall.load()
		self.hero.load( self.core.getWidth(), self.core.getHeight() )
		self.menu_log.load( self.core.getWidth(), self.core.getHeight() )
		self.map.load()

#-------------------------------------------------------------------------------------------------------	

	def handle( self ):
		for event in pygame.event.get():

			if event.type == pygame.QUIT:
				self.core.setQuit()

#-------------------------------------------------------------------------------------------------------

			if self.core.getState() == 0:
				
				if self.menu_play_button.getState() == 0:
					self.menu_exit_log.handle( event )

				#HANDLE IF AUTHOR BUTTON == OFF AND SCORE BUTTON == OFF
				if self.menu_author_log.getState() == 0 and self.menu_score_log.getState() == 0:
					self.menu_play_button.handle( event )
					self.menu_git_button.handle( event )
					self.menu_google_button.handle( event )
					self.menu_music_button.handle( event )
					self.menu_chunk_button.handle( event )
				if self.menu_score_log.getState() == 0:
					self.menu_author_log.handle( event )
				if self.menu_author_log.getState() == 0:
					self.menu_score_log.handle( event )

#-------------------------------------------------------------------------------------------------------

			if self.core.getState() == 1:
				
				self.menu_log.handle( event )
				#HANDLE IF MENU_LOG == OFF
				if self.menu_log.getState() == 0:
					self.hero.handle( event )
				
#-------------------------------------------------------------------------------------------------------

	def states( self ):

#-------------------------------------------------------------------------------------------------------STATE -1

		if self.core.getState() == -1:
			self.intro.draw( self.core.getWindow() )
			if self.intro.getQuit():
				self.intro.free()
				del self.intro
				self.menu_music.play()#MENU MUSIC
				self.core.setState( 0 )
		

#-------------------------------------------------------------------------------------------------------STATE 0

		if self.core.getState() == 0:

			#FADE IN
			if self.menu_play_button.getState() != 1 and self.menu_exit_log.getState() == 0:
				self.menu_background.fadein( 5 )
				self.menu_title.fadein( 5 )
				self.menu_play_button.fadein( 5 )
				self.menu_git_button.fadein( 5 )
				self.menu_google_button.fadein( 5 )
				self.menu_facebook_button.fadein( 5 )
				self.menu_twitter_button.fadein( 5 )
				self.menu_music_button.fadein( 5 )
				self.menu_chunk_button.fadein( 5 )
				self.menu_author_log.fadein( 5 )
				self.menu_game_log.fadein( 5 )
				self.menu_settings_log.fadein( 5 )
				self.menu_score_log.fadein( 5 )
				self.menu_music.setVolume( 1.0 )

			#DRAW ALWAYS IN MENU STATE
			self.menu_background.draw( self.core.getWindow() )
			self.menu_title.draw( self.core.getWindow() )
			self.menu_exit_log.draw( self.core.getWindow() )
			#DRAW IF AUTHOR BUTTON == OFF AND SCORE BUTTON == OFF
			if self.menu_author_log.getState() == 0 and self.menu_score_log.getState() == 0:
				self.menu_git_button.draw( self.core.getWindow() )			
				self.menu_google_button.draw( self.core.getWindow() )
				self.menu_facebook_button.draw( self.core.getWindow() )
				self.menu_twitter_button.draw( self.core.getWindow() )
				self.menu_play_button.draw( self.core.getWindow() )
				self.menu_music_button.draw( self.core.getWindow() )
				self.menu_chunk_button.draw( self.core.getWindow() )
				self.menu_game_log.draw( self.core.getWindow() )
				self.menu_settings_log.draw( self.core.getWindow() )

			if self.menu_score_log.getState() == 0:
				self.menu_author_log.draw( self.core.getWindow() )
			if self.menu_author_log.getState() == 0:
				self.menu_score_log.draw( self.core.getWindow() )

			#IF USER TURN ON/OFF CHUNKS
			if self.menu_chunk_button.getState():
				self.menu_play_button.setState()
				self.menu_git_button.setState()
				self.menu_google_button.setState()
				self.menu_music_button.setState()
				self.menu_chunk_button.setState()
				self.menu_author_log.setState()
				self.menu_score_log.setState()
			#IF USER TURN ON/OFF MUSIC
			if self.menu_music_button.getState():
				self.menu_music.pause()

			#IF USER PRESS Q - EXIT
			if self.menu_exit_log.getState() == 1:
				self.menu_background.fadeout( 6, 120 )
				self.menu_title.fadeout( 6, 120 )
				self.menu_play_button.fadeout( 6, 120 )
				self.menu_git_button.fadeout( 6, 120 )
				self.menu_google_button.fadeout( 6, 120 )
				self.menu_facebook_button.fadeout( 6, 120 )
				self.menu_twitter_button.fadeout( 6, 120 )
				self.menu_music_button.fadeout( 6, 120 )
				self.menu_chunk_button.fadeout( 6, 120 )
				self.menu_author_log.fadeout( 6, 120 )
				self.menu_game_log.fadeout( 6, 120 )
				self.menu_settings_log.fadeout( 6, 120 )
				self.menu_score_log.fadeout( 6, 120 )
				self.menu_music.setVolume( 0.3 )

			elif self.menu_exit_log.getState() == 2:
				self.menu_background.fadeout( 6 )
				self.menu_title.fadeout( 6 )
				self.menu_play_button.fadeout( 6 )
				self.menu_git_button.fadeout( 6 )
				self.menu_google_button.fadeout( 6 )
				self.menu_facebook_button.fadeout( 6 )
				self.menu_twitter_button.fadeout( 6 )
				self.menu_music_button.fadeout( 6 )
				self.menu_chunk_button.fadeout( 6 )
				self.menu_author_log.fadeout( 6 )
				self.menu_game_log.fadeout( 6 )
				self.menu_settings_log.fadeout( 6 )
				self.menu_score_log.fadeout( 6 )
			if self.menu_exit_log.getState() == 2 and self.menu_background.getAlpha() == 0:
				self.core.setQuit()

			#IF USER CLICK PLAY BUTTON
			if self.menu_play_button.getState() == 1:
				self.menu_background.fadeout( 6 )
				self.menu_title.fadeout( 6 )
				self.menu_play_button.fadeout( 6 )
				self.menu_git_button.fadeout( 6 )
				self.menu_google_button.fadeout( 6 )
				self.menu_facebook_button.fadeout( 6 )
				self.menu_twitter_button.fadeout( 6 )
				self.menu_music_button.fadeout( 6 )
				self.menu_chunk_button.fadeout( 6 )
				self.menu_author_log.fadeout( 6 )
				self.menu_game_log.fadeout( 6 )
				self.menu_settings_log.fadeout( 6 )
				self.menu_score_log.fadeout( 6 )
				if self.menu_music.isPaused() == False:
					self.menu_music.fadeOut()

				if self.menu_play_button.getAlpha() == 0:
					self.menu_play_button.setNext( 0 )
					self.core.setState( 1 )

#-------------------------------------------------------------------------------------------------------STATE 1
		
		if self.core.getState() == 1:
			
			#FADE IN IF PAUSE BUTTON == OFF AND MENU_LOG == OFF
			if self.menu_log.getState() == 0:
				self.wall.fadein( 5 )
				self.hero.fadein( 5 )
				self.map.fadein( 5 )
			elif self.menu_log.getState() == 1:
				self.wall.fadeout( 6, 130 )
				self.hero.fadeout( 6, 130 )
				self.map.fadeout( 6, 130 )
			elif self.menu_log.getState() == 2:
				self.wall.fadeout( 6 )
				self.hero.fadeout( 6 )
				self.map.fadeout( 6 )
				if self.wall.getAlpha() == 0:
					self.menu_log.setState( 0 )
					if self.menu_music.isPaused() == False:
						self.menu_music.play()
					self.core.setState( 0 ) #Back to menu
			
			#DRAW
			self.wall.draw( self.core.getWindow() )
			self.hero.draw( self.core.getWindow() )
			self.menu_log.draw( self.core.getWindow() )
			self.map.draw( self.core.getWindow() )














	def loop( self ):
		while not self.core.isQuit():
			self.handle()
			self.core.fillDisplay()
			self.states()
			self.core.tickClock()
			pygame.display.update()
			
	def quit( self ):
		pygame.quit()
Exemplo n.º 9
0
class Game:
    def __init__(self):
        pygame.init()
        self.surface = pygame.display.set_mode((480, 852))
        pygame.display.set_caption("Plane Wars")

        try:
            icon = pygame.image.load("../res/image/icon.ico")
        except pygame.error:
            pass
        else:
            pygame.display.set_icon(icon)

        self.clock = pygame.time.Clock()

        self.stats = Stats()

        self.bg = Background()
        self.hero = Hero(self.surface.get_rect(), self.stats)
        self.bullets = Group()
        self.enemies = Group()

        buttons_name = ["Start", "Restart", "Exit"]
        self.buttons = {
            name: Button(self.surface.get_rect(), name)
            for name in buttons_name
        }

        widgets_name = ["Logo", "EndPrompt", "Scoreboard", "PauseResume"]
        self.widgets = {
            name: eval(name)(self.surface.get_rect(), self.stats)
            for name in widgets_name
        }

        self.sounds = Sound()

        self.frames = 0

    def reset(self):
        self.stats.reset()
        self.hero.reset()
        self.widgets["PauseResume"].reset()

    def run(self):
        while True:
            self.handle_events()

            if self.stats.state == Stats.RUN:
                self.bg.update()
                self.update_bullets()
                self.update_enemies()
                self.handle_collision()

            self.update_screen()

            self.clock.tick(60)

    def handle_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                self.handle_mousedown_event(event)
            elif event.type == pygame.MOUSEMOTION:
                self.handle_mousemotion_event(event)

    def handle_mousedown_event(self, event):
        if self.stats.state == Stats.WELCOME:
            if self.buttons["Start"].is_hit(event.pos):
                self.stats.state = Stats.RUN
                # play background music indefinitely
                self.sounds.play("bg")
        elif self.stats.state == Stats.RUN:
            if self.widgets["PauseResume"].is_hit(event.pos):
                self.widgets["PauseResume"].update_click()
                self.stats.state = Stats.PAUSE
                self.sounds.pause("bg")
        elif self.stats.state == Stats.PAUSE:
            if self.widgets["PauseResume"].is_hit(event.pos):
                self.widgets["PauseResume"].update_click()
                self.stats.state = Stats.RUN
                self.sounds.unpause("bg")
        elif self.stats.state == Stats.GAMEOVER:
            if self.buttons["Restart"].is_hit(event.pos):
                self.reset()
                self.stats.state = Stats.RUN
                self.sounds.play("bg")
            elif self.buttons["Exit"].is_hit(event.pos):
                pygame.quit()
                sys.exit()

    def handle_mousemotion_event(self, event):
        if self.stats.state == Stats.RUN:
            if event.buttons[0]:
                self.hero.update(event.pos)

            self.widgets["PauseResume"].update_mouse_motion(event.pos)
        elif self.stats.state == Stats.PAUSE:
            self.widgets["PauseResume"].update_mouse_motion(event.pos)

    def update_bullets(self):
        # create bullet
        self.frames += 1
        if not (self.frames % 5):
            self.bullets.add(Bullet(self.hero.rect))
            self.sounds.play("bullet")

        # move bullets
        self.bullets.update()

    def update_enemies(self):
        if len(self.enemies) < 18:
            screen_rect = self.surface.get_rect()

            weighted_list = [EnemySmall] * 30 + [EnemyMiddle] * 3 + [EnemyBig
                                                                     ] * 1
            enemy = random.choice(weighted_list)

            left = random.randint(0,
                                  screen_rect.width - enemy.get_max_size()[0])
            top = random.randint(-screen_rect.height, -enemy.get_max_size()[1])

            self.enemies.add(enemy((left, top), screen_rect, self.stats))

        self.enemies.update()

    def handle_collision(self):
        # check bullets & enemies collision
        collide_dict = pygame.sprite.groupcollide(self.bullets, self.enemies,
                                                  True, False,
                                                  pygame.sprite.collide_mask)
        collide_enemies_list = []

        if collide_dict:
            for collide_enemies in collide_dict.values():
                collide_enemies_list.extend(collide_enemies)

        if collide_enemies_list:
            for collide_enemy in collide_enemies_list:
                if collide_enemy.current_hp == 1:
                    self.sounds.play("enemy" + str(collide_enemy.type) +
                                     "_down")

                collide_enemy.hit_by_bullet()

        # check hero & enemies collision
        enemy = pygame.sprite.spritecollideany(self.hero, self.enemies,
                                               pygame.sprite.collide_mask)
        if enemy:
            self.hero.is_collide = True
            self.bullets.empty()
            self.enemies.empty()
            self.widgets["EndPrompt"].update_score_num()
            self.sounds.fadeout("bg")
            self.sounds.play("game_over")

    def update_screen(self):
        # draw background image onto display surface
        self.bg.draw(self.surface)

        if self.stats.state == Stats.WELCOME:
            # welcome state
            self.widgets["Logo"].draw(self.surface)
            self.buttons["Start"].draw(self.surface)
        elif self.stats.state == Stats.RUN or self.stats.state == Stats.PAUSE:
            # run/pause state
            self.hero.draw(self.surface)
            self.bullets.draw(self.surface)
            self.enemies.draw(self.surface)

            # draw pause button and score at last, keeps them above the screen
            self.widgets["PauseResume"].draw(self.surface)
            self.widgets["Scoreboard"].draw(self.surface)
        elif self.stats.state == Stats.GAMEOVER:
            # game over state
            self.widgets["EndPrompt"].draw(self.surface)
            self.buttons["Restart"].draw(self.surface)
            self.buttons["Exit"].draw(self.surface)

        # update display surface
        pygame.display.flip()
Exemplo n.º 10
0
class Level(object):
    '''TwistedMold level'''
    def __init__(self, screen, father, level, total_points):

        self.screen = screen
        self.father = father
        self.level = level
        self.background = utils.load_image(levels[level]['background'])

        #parameters
        self.energy_leap = levels[level]['energy_leap']
        self.mold_density = levels[level]['mold_density']
        self.mold_velocity = levels[level]['mold_velocity']
        self.max_time = levels[level]['max_time']
        #menu control
        self.options = [("Yes", self.father), ("No", None)]
        self.exit = False

        #Create the game clock
        self.clock = pygame.time.Clock()

        self.mm = MoldsManager(self.mold_density, self.mold_velocity)
        self.bm = BottleManager(*levels[self.level]['bottle_density'])
        self.bm.mm = self.mm

        self.total_points = total_points

        self.pointsCounter = Points(self.total_points)
        self.levelIndicator = LevelIndicator(self.level)
        self.mm.level = self
        self.tics = 0

        self.snow_slim = pygame.sprite.Group()
        self.snow_fat = pygame.sprite.Group()

        for x in range(75):
            sprite = Wheather(1, 2)
            self.snow_slim.add(sprite)

        for x in range(75):
            sprite = Wheather(3, 5)
            self.snow_fat.add(sprite)

        self.energy_bar = EnergyBar(self.energy_leap)
        self.bm.energy_bar = self.energy_bar
        self.mm.energy_bar = self.energy_bar

        self.level_time = LevelTime(self.max_time)

        self.gadgets = pygame.sprite.RenderUpdates()
        self.gadgets.add(self.pointsCounter)
        self.gadgets.add(self.energy_bar)
        self.gadgets.add(self.level_time)
        self.gadgets.add(self.levelIndicator)

        self.hero = Hero()
        self.bm.hero = self.hero
        self.mm.hero = self.hero

        self.explotion = Explotion()

        self.control_down = -1
        self.control_up = -1
        self.control_left = -1
        self.control_right = -1
        self.control_tiempo = 5

        self.next_scream = random.randrange(400, 500)

        #Show level image
        Visual(self.screen, [utils.load_image(levels[self.level]['img'])], [2],
               None).loop()

    def loop(self):
        music.play_music(PLAYMUSIC)
        while not self.finish():
            self.tics += 1

            if not self.next_scream:
                music.play_random_scream()
                self.next_scream = random.randrange(400, 500)
            else:
                self.next_scream -= 1

            self.screen.blit(self.background, (-(self.tics % 700), 0))
            self.update()
            self.draw()

            #Control
            for event in pygame.event.get():
                self.control(event)

            self.clock.tick(CLOCK_TICS)

            if self.control_down == 0: self.hero.down()
            if self.control_up == 0: self.hero.up()
            if self.control_right == 0: self.hero.right()
            if self.control_left == 0: self.hero.left()

            if self.control_down >= 0:
                self.control_down += 1
                if self.control_down >= self.control_tiempo:
                    self.control_down = 0

            if self.control_up >= 0:
                self.control_up += 1
                if self.control_up >= self.control_tiempo:
                    self.control_up = 0

            if self.control_right >= 0:
                self.control_right += 1
                if self.control_right >= self.control_tiempo:
                    self.control_right = 0

            if self.control_left >= 0:
                self.control_left += 1
                if self.control_left >= self.control_tiempo:
                    self.control_left = 0

            self.clock.tick(CLOCK_TICS)

            pygame.display.flip()

        if self.exit:
            return self.father
        elif not self.level_time.seconds:
            #music.stop_music()

            if self.level < LEVELS:

                def f(screen):
                    return Level(screen, self.father, self.level + 1,
                                 self.total_points)

                return f
            else:

                def f(screen):
                    def g(screen):
                        return HighScores(self.screen, self.father,
                                          self.total_points)

                    music.play_music(WINMUSIC)
                    return Visual(screen, utils.load_image(WIN), -1, g)

                return f

        elif self.energy_bar.energy_percent <= 0:

            def f(screen):
                def g(screen):
                    return HighScores(self.screen, self.father,
                                      self.total_points)

                music.play_gameover()
                return Visual(screen, [utils.load_image(GAMEOVER)], [3], g)

            return f

    def update(self):
        if self.level in (4, 5):
            self.snow_slim.update()

        self.energy_bar.update(self.tics)
        self.level_time.update(self.tics)

        self.bm.update()

        self.mm.gen(self.tics)
        self.mm.move(self.tics)

        if self.level in (4, 5):
            self.snow_fat.update()

        #Blood Explotion
        self.explotion.update(self.tics, self.screen)

        #Verify collision
        if self.mm.is_fitting(self.hero, self.tics):
            self.explotion.boom(self.hero.get_center())
            self.total_points += 1

        self.pointsCounter.update(self.total_points)
        self.levelIndicator.update(self.level)

    def draw(self):
        self.snow_slim.draw(self.screen)

        self.bm.draw(self.screen)
        self.mm.draw(self.screen)

        self.hero.draw(self.screen)
        self.snow_fat.draw(self.screen)
        self.gadgets.draw(self.screen)

    def control(self, event):

        if event.type == QUIT:
            sys.exit(0)

        if event.type == KEYDOWN:
            if event.key == K_DOWN:
                self.control_down = 0
            if event.key == K_UP:
                self.control_up = 0
            if event.key == K_RIGHT:
                self.control_right = 0
            if event.key == K_LEFT:
                self.control_left = 0
            if event.key in (K_SPACE, K_s):
                self.hero.twist_right()
                music.play_scream()
            if event.key == K_a:
                self.hero.twist_left()
                music.play_scream()

            if event.key == K_ESCAPE:
                pygame.mixer.music.set_volume(0.5)
                mem = Menu(self.screen, self.options,
                           "Do you want to quit?").loop()
                pygame.mixer.music.set_volume(1.0)

                if mem == self.father:
                    music.stop_music()
                    self.exit = True

        if event.type == KEYUP:
            if event.key == K_DOWN:
                self.control_down = -1
            if event.key == K_UP:
                self.control_up = -1
            if event.key == K_RIGHT:
                self.control_right = -1
            if event.key == K_LEFT:
                self.control_left = -1

    def finish(self):
        if self.level_time.seconds == 0 or self.energy_bar.energy_percent <= 0 or self.exit:
            return True

        return False