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()
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
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()
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()
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()
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)
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()
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()
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