Hello and welcome back, in this article we will create the winning scene for this
from BgSprite import BgSprite from GameSprite import GameSprite from pygame.locals import * from pygame import math as mt import pygame import pygame.font as txt from AmazeboyColor import AmazeboyColor class StartScene(object): def __init__(self, scene, lm): self.level_manager = lm self.scene = scene self.play_button = 'Asset/play.png' self.about_button = 'Asset/about.png' self.exit_button = 'Asset/exit.png' self.scene_button = 'Asset/scene.png' self.score_button = 'Asset/score.png' self.home_button = 'Asset/back.png' self.button_image = 'Asset/button_play.png' self.manual_button = 'Asset/manual.png' self.bg_image = 'Asset/start.png' self.win_image = 'Asset/winn.png' self.general_image = 'Asset/general.png' self.soundon = 'Asset/sound.png' self.soundoff = 'Asset/soundoff.png' self.home_button_image = 'Asset/home.png' self.game_logo = 'Asset/menu.png' self.bg_rect = Rect(0, 0, 640, 640) self.button_rect = Rect(0, 0, 306, 112) self.home_button_rect = Rect(0, 0, 200, 53) self.back_button_rect = Rect(0, 0, 40, 30) self.sound_button_rect = Rect(0, 0, 30, 30) self.animated_count = 0 #self.game_logo_rect = Rect(self.animated_count*550, 0, 550, 550) self.sprite = BgSprite(self.general_image, self.bg_rect) self.sprite_win = BgSprite(self.win_image, self.bg_rect) self.sprite_pause = BgSprite(self.general_image, self.bg_rect) self.soundon_button = GameSprite(self.soundon, self.sound_button_rect) self.soundoff_button = GameSprite(self.soundoff, self.sound_button_rect) self.soundoff_button_surface = self.soundoff_button.getImage() # get the button sprite surface self.soundon_button_surface = self.soundon_button.getImage() # get the button sprite surface #self.game_logo_sprite = GameSprite(self.game_logo, self.game_logo_rect) self.sprite_button = GameSprite(self.button_image, self.button_rect) self.sprite_home_pause_button = GameSprite(self.home_button_image, self.home_button_rect) self.sprite_scene_button = GameSprite(self.scene_button, self.home_button_rect) self.sprite_manual_button = GameSprite(self.manual_button, self.home_button_rect) self.sprite_exit_button = GameSprite(self.exit_button, self.home_button_rect) self.sprite_play_button = GameSprite(self.play_button, self.home_button_rect) self.sprite_about_button = GameSprite(self.about_button, self.home_button_rect) self.sprite_score_button = GameSprite(self.score_button, self.home_button_rect) self.sprite_home_button = GameSprite(self.home_button, self.back_button_rect) self.win_surface = self.sprite_win.getImage() # get the win sprite surface self.pause_surface = self.sprite_pause.getImage() # get the pause sprite surface self.surface = self.sprite.getImage() # get the start scene sprite surface self.button_surface = self.sprite_button.getImage() # get the button sprite surface self.home_pause_button_surface = self.sprite_home_pause_button.getImage() # get the button sprite surface self.play_button_surface = self.sprite_play_button.getImage() # get the button sprite surface self.about_button_surface = self.sprite_about_button.getImage() # get the button sprite surface self.score_button_surface = self.sprite_score_button.getImage() # get the button sprite surface self.manual_button_surface = self.sprite_manual_button.getImage() # get the button sprite surface self.scene_button_surface = self.sprite_scene_button.getImage() # get the button sprite surface self.home_button_surface = self.sprite_home_button.getImage() # get the button sprite surface self.exit_button_surface = self.sprite_exit_button.getImage() # get the button sprite surface #self.game_logo_surface = self.game_logo_sprite.getImage() # get game logo image self.draw_pos = mt.Vector2(0, 0) self.draw_button_pos = mt.Vector2(177, 274) self.draw_game_logo_pos = mt.Vector2(170, 103) self.draw_play_button_pos = mt.Vector2(229, 200) self.draw_about_button_pos = mt.Vector2(229, 263) self.draw_home_button_pos = mt.Vector2(229, 263) self.draw_score_button_pos = mt.Vector2(229, 328) self.draw_manual_button_pos = mt.Vector2(229, 393) self.draw_exit_button_pos = mt.Vector2(229, 456) self.draw_scene_button_pos = mt.Vector2(229, 519) self.draw_back_button_pos = mt.Vector2(10, 620) self.draw_sound_button_pos = mt.Vector2(10, 600) self.soundon = True self.count = 0 self.font = txt.Font('Asset/ft.ttf', 90) self.credit_font = txt.Font('Asset/ft.ttf', 50) self.score_text = "Top Achievements" self.credit_text_i = "Create by : IslandTropicalMan" self.over_text_i = "Game Over" self.next_text_i = "Next Level" self.text_width, self.text_height = self.font.size(self.score_text) self.credit_text_width, self.credit_text_height = self.credit_font.size(self.credit_text_i) self.over_text_width, self.over_text_height = self.credit_font.size(self.over_text_i) self.next_text_width, self.next_text_height = self.credit_font.size(self.next_text_i) self.x_title = 330 - self.text_width/2 self.x_credit = 330 - self.credit_text_width/2 self.x_over = 330 - self.over_text_width / 2 self.x_next = 330 - self.next_text_width/2 self.y_title = 60 self.title_rect = Rect(self.x_title, self.y_title, self.text_width, self.text_height) self.title_score_text = self.font.render(self.score_text, 1, (255, 255, 255)) self.credit_rect = Rect(self.x_credit, 330, self.credit_text_width, self.credit_text_height) self.over_rect = Rect(self.x_over, 190, self.over_text_width, self.over_text_height) self.next_rect = Rect(self.x_next, 190, self.next_text_width, self.next_text_height) self.credit_text = self.credit_font.render(self.credit_text_i, 1, (255, 255, 255)) self.over_text = self.credit_font.render(self.over_text_i, 1, (255, 255, 255)) self.next_text = self.credit_font.render(self.next_text_i, 1, (255, 255, 255)) self.score_value_text = '' self.f1 = None self.font1 = txt.Font('Asset/ft.ttf', 100) self.score_rect = Rect(100, self.y_title+self.text_height, 100, 100) self.home_background_color = AmazeboyColor(240,230,140,255) def draw(self, state): if(state == 0): self.game_logo_rect = Rect(self.animated_count * 550, 0, 550, 550) self.game_logo_sprite = GameSprite(self.game_logo, self.game_logo_rect) self.game_logo_surface = self.game_logo_sprite.getImage() # get game logo image self.scene.fill(self.home_background_color) self.scene.blit(self.game_logo_surface, self.draw_game_logo_pos) # draw a game logo self.scene.blit(self.play_button_surface, self.draw_play_button_pos) # draw a button sprite self.scene.blit(self.about_button_surface, self.draw_about_button_pos) # draw a button sprite self.scene.blit(self.score_button_surface, self.draw_score_button_pos) # draw a button sprite self.scene.blit(self.manual_button_surface, self.draw_manual_button_pos) # draw a button sprite self.scene.blit(self.exit_button_surface, self.draw_exit_button_pos) # draw a button sprite self.scene.blit(self.scene_button_surface, self.draw_scene_button_pos) # draw a button sprite if(self.soundon == True): self.scene.blit(self.soundon_button_surface, self.draw_sound_button_pos) # draw a button sprite else: self.scene.blit(self.soundoff_button_surface, self.draw_sound_button_pos) # draw a button sprite self.animated_count += 1 if(self.animated_count > 6): self.animated_count = 0 elif(state == 2): self.scene.fill(self.home_background_color) self.scene.blit(self.over_text, self.over_rect) # the over text elif (state == 3): self.scene.fill(self.home_background_color) self.scene.blit(self.next_text, self.next_rect) # the next text elif(state == 4): self.scene.blit(self.win_surface, self.draw_pos) # draw a win sprite elif (state == 5): self.scene.fill(self.home_background_color) # draw a background self.scene.blit(self.credit_text, self.credit_rect) # the credit text #self.scene.blit(self.about_surface, self.draw_pos) # draw a about sprite self.scene.blit(self.home_button_surface, self.draw_back_button_pos) # draw a button sprite elif (state == 6): self.scene.blit(self.manual_surface, self.draw_pos) # draw a manual sprite self.scene.blit(self.home_button_surface, self.draw_back_button_pos) # draw a button sprite elif (state == 7): #self.scene.blit(self.pause_surface, self.draw_pos) # draw a pause sprite self.scene.fill(self.home_background_color) # draw a background self.scene.blit(self.play_button_surface, self.draw_play_button_pos) # draw a button sprite self.scene.blit(self.home_pause_button_surface, self.draw_home_button_pos) # draw a button sprite elif (state == 8): self.scene.fill(self.home_background_color) # draw a background self.scene.blit(self.title_score_text, self.title_rect) # the score title first list_level = self.level_manager.get_list() for i in range(len(list_level)): self.score_rect = Rect(95, self.y_title + self.text_height + self.count * 100, 100, 100) self.score_value_text = str(self.count+1) + ".) Level " + str(list_level[i]) self.value_score_text = self.font1.render(self.score_value_text, 1, (255, 255, 255)) self.scene.blit(self.value_score_text, self.score_rect) # the top 5 levels of the game self.count += 1 self.count = 0 self.scene.blit(self.home_button_surface, self.draw_back_button_pos) # draw a button sprite if(state == 2 or state == 3 or state == 4): self.scene.blit(self.button_surface, self.draw_button_pos) # draw a button sprite pygame.display.flip()
import pickle class LevelManager(object): def __init__(self, gm): self.game_manager = gm self.delete_line = False self.MAX_LEVEL = 2 self.level = 1 self.level_list = [] def set_level(self): try: f = open("level.pickle", "rb") self.level_list = pickle.load(f) self.level = self.level_list[len(self.level_list) - 1] if (len(self.level_list) > 5): self.level_list.pop(0) except EOFError: self.level = 1 self.level_list.append(self.level) def save_level(self): try: self.level_list.append(self.level) if(len(self.level_list) > 5): self.level_list.pop(0) f = open("level.pickle", "wb") pickle.dump(self.level_list, f) f.close() except IOError: print('cannot open a file') def increase_level(self): self.level += 1 if(self.level > self.MAX_LEVEL): self.game_manager.state = self.game_manager.WIN self.level = 1 self.game_manager.setup(self.level) else: #self.game_manager.state = self.game_manager.NEXT self.game_manager.setup(self.level) def get_level(self): return self.level def reset_level(self): self.game_manager.setup(self.level) def get_list(self): return self.level_list
from EnemyManager import EnemyManager from Overlap import Overlap from ExplosionManager import ExplosionManager from Score import Score from StartScene import StartScene from pygame.locals import * from LevelManager import LevelManager import pygame import webbrowser from Scene import Scene from BackGroundSprite import BackGroundSprite from BoySprite import BoySprite from ManaManager import ManaManager class GameManager(object): def __init__(self, scene): self.scene = scene self.load_music() self.play_music() self.overlap_manager = Overlap() self.level_manager = LevelManager(self) self.level_manager.set_level() self.setup(self.level_manager.get_level()) self.start_scene = StartScene(scene, self.level_manager) self.pause = False # flag to pause the game self.game_scene = Scene(self.scene) #game state self.LOAD = 0 self.GAME = 1 self.OVER = 2 self.NEXT = 3 self.WIN = 4 self.ABOUT = 5 self.MANUAL = 6 self.PAUSE = 7 self.SCORE = 8 self.SCENE = 9 self.state = self.LOAD def setup(self, game_level): self.game_level = game_level self.score_manager = Score(self.scene, self.level_manager) self.background = BackGroundSprite(game_level, self.scene) self.enemy_manager = EnemyManager(self.scene, game_level) self.mana_manager = ManaManager(self.scene, game_level) self.boy_sprite = BoySprite(self.scene, game_level, self.enemy_manager, self.mana_manager, self.level_manager) self.explosion_manager = ExplosionManager(self.scene) def loop(self): if(self.state == self.LOAD): self.start_scene.draw(self.state) elif(self.state == self.OVER or self.state == self.NEXT or self.state == self.WIN or self.state == self.ABOUT or self.state == self.MANUAL or self.state == self.SCORE): self.start_scene.draw(self.state) elif(self.state == self.SCENE): self.game_scene.draw() elif(self.state == self.GAME): self.update() self.draw() elif(self.state == self.PAUSE): self.start_scene.draw(self.state) def isAreaClick(self, x, y): if (self.state == self.LOAD or self.state == self.OVER or self.state == self.NEXT or self.state == self.WIN or self.state == self.ABOUT or self.state == self.SCORE or self.state == self.SCENE or self.state == self.MANUAL or self.state == self.PAUSE): self.rect = Rect(177, 274, 306, 112) # the position of the play button on the scene self.rect_play = Rect(229, 200, 200, 53) # the position of the play button on the home scene self.rect_about = Rect(229, 263, 200, 53) # the position of the about button on the home scene #self.rect_exit = Rect(229, 456, 200, 53) # the position of the exit button on the home scene self.rect_pause_home = Rect(229, 263, 200, 53) # the position of the home button on pause scene self.rect_score = Rect(229, 328, 200, 53) # the position of the score button on the home scene self.rect_manual = Rect(229, 393, 200, 53) # the position of the manual button on the home scene self.rect_scene = Rect(229, 519, 200, 53) # the position of the manual button on the home scene self.rect_back = Rect(10, 620, 40, 30) # the position of the back button on the home scene self.rect_sound = Rect(10, 600, 30, 30) # the position of the sound button on the home scene self.rect_scene_next = Rect(610, 330, 30, 30) # the position of the next scene button on scene self.rect_scene_previous = Rect(50, 330, 30, 30) # the position of the previous scene button on scene if(self.rect.collidepoint(x, y) and (self.state == self.OVER or self.state == self.NEXT or self.state == self.WIN)): self.state = self.GAME elif(self.rect_play.collidepoint(x,y) and self.state == self.LOAD): self.state = self.GAME elif (self.rect_play.collidepoint(x, y) and self.state == self.PAUSE): self.state = self.GAME elif (self.rect_about.collidepoint(x, y) and self.state == self.LOAD): self.state = self.ABOUT elif (self.rect_score.collidepoint(x, y) and self.state == self.LOAD): self.state = self.SCORE elif (self.rect_scene.collidepoint(x, y) and self.state == self.LOAD): self.state = self.SCENE elif (self.rect_back.collidepoint(x, y) and self.state == self.SCENE): self.state = self.LOAD elif (self.rect_scene_next.collidepoint(x, y) and self.state == self.SCENE): self.game_scene.set_next_image() elif (self.rect_scene_previous.collidepoint(x, y) and self.state == self.SCENE): self.game_scene.set_previous_image() elif (self.rect_pause_home.collidepoint(x, y) and self.state == self.PAUSE): self.state = self.LOAD self.setup(self.level_manager.get_level()) self.save_level() elif (self.rect_manual.collidepoint(x, y) and self.state == self.LOAD): webbrowser.open_new('http://gamingdirectional.com/blog/2018/12/25/air-strike//') elif (self.rect_back.collidepoint(x, y) and (self.state == self.ABOUT or self.state == self.MANUAL or self.state == self.SCORE)): self.state = self.LOAD elif (self.rect_sound.collidepoint(x, y) and self.state == self.LOAD): if(self.start_scene.soundon == True): self.start_scene.soundon = False pygame.mixer_music.pause() else: self.start_scene.soundon = True pygame.mixer_music.unpause() def save_level(self): self.level_manager.save_level() def set_pause(self, pause): self.pause = pause if(self.pause == True): self.state = self.PAUSE def load_music(self): pygame.mixer_music.load('Music/winternight.ogg') def play_music(self): pygame.mixer_music.play(-1) #play the music infinite time def set_player_x(self, _x): if (self.state == self.GAME): self.boy_sprite.setX(_x) def save_scene(self): self.game_scene.take_screen() def set_player_y(self, _y): if (self.state == self.GAME): self.boy_sprite.setY(_y) def update(self): self.enemy_manager.update() self.mana_manager.update() self.boy_sprite.update() def draw(self): if(self.state == self.GAME): self.background.draw() #self.score_manager.draw() self.boy_sprite.draw() self.enemy_manager.draw() self.mana_manager.draw() pygame.display.flip()
If you run the program again then you will see this outcome.
The winning scene for the @pygame project is ready! pic.twitter.com/LdzvRzpzgy
— TechLikin (@ChooWhei) March 7, 2019
Basically, this pygame project has completed, what we will do in the next few chapters is to tidy up this project or perhaps to include a few new features into it.