In this chapter, we will make a final adjustment of the main menu page buttons so they will be positioned nicely on the game scene. We need to edit three files in this chapter. We will adjust the button positions on the start scene class.
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(129, 70) self.draw_play_button_pos = mt.Vector2(226, 177) self.draw_about_button_pos = mt.Vector2(226, 240) self.draw_home_button_pos = mt.Vector2(229, 263) self.draw_score_button_pos = mt.Vector2(226, 308-3) self.draw_manual_button_pos = mt.Vector2(227, 373-3) self.draw_exit_button_pos = mt.Vector2(227, 436-3) self.draw_scene_button_pos = mt.Vector2(227, 499-3) self.draw_back_button_pos = mt.Vector2(10, 590) 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 = 30 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, 288, 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.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 * 90, 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 pygame from pygame.locals import * from GameManager import GameManager pygame.init() size = width, height = 640, 640 pygame.display.set_caption("Amaze Boy") # set the title of the window screen = pygame.display.set_mode(size) game_manager = GameManager(screen) rect_exit = Rect(227, 436-3, 200, 53) # the position of the exit button on the home scene running = True pygame.key.set_repeat(100, 40) while running: for event in pygame.event.get(): # when the user clicks on the 'x' if event.type == pygame.QUIT: game_manager.save_level() running = False # detect key press event if event.type == KEYDOWN: if (game_manager.state == 1): if event.key == K_LEFT: game_manager.set_player_x(-2) elif event.key == K_RIGHT: game_manager.set_player_x(2) elif event.key == K_UP: game_manager.set_player_y(-2) elif event.key == K_DOWN: game_manager.set_player_y(2) elif event.type == KEYUP: if (game_manager.state == 1): if event.key == K_LEFT: game_manager.set_player_x(0) elif event.key == K_RIGHT: game_manager.set_player_x(0) elif event.key == K_UP: game_manager.set_player_y(0) elif event.key == K_DOWN: game_manager.set_player_y(0) elif event.key == K_p: game_manager.set_pause(True) # set the pause state to true elif event.key == K_s: # take the game screenshot game_manager.save_scene() elif event.type == pygame.MOUSEBUTTONDOWN: x, y = event.pos if (rect_exit.collidepoint(x, y) and game_manager.state == game_manager.LOAD): game_manager.save_level() running = False # 1 is the left mouse button elif event.button == 1: game_manager.isAreaClick(x, y) game_manager.loop()
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.PAUSE or 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() 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(226, 177, 200, 53) # the position of the play button on the home scene self.rect_about = Rect(226, 240, 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(226, 308-3, 200, 53) # the position of the score button on the home scene self.rect_manual = Rect(227, 373-3, 200, 53) # the position of the manual button on the home scene self.rect_scene = Rect(227, 499-3, 200, 53) # the position of the manual button on the home scene self.rect_back = Rect(10, 590, 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(597, 330, 40, 30) # the position of the next scene button on scene self.rect_scene_previous = Rect(3, 344, 40, 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()
Now after you have run the above program, below is what you will see.
Make the adjustment for the @pygame_org project main menu page's button today pic.twitter.com/r7WBNnDP85
— TechLikin (@ChooWhei) March 16, 2019