def __init__(self, game): super(MenuScene, self).__init__(game) self.game = self.getGame() self.bg = GameConstants.MENU_BG.convert_alpha() self.play_button = Button( (0, 0, 255), (GameConstants.SCREEN_DIMENSIONS[0] // 2) - 150, 350, 300, 60, 'Play') self.about_button = Button( (0, 0, 255), (GameConstants.SCREEN_DIMENSIONS[0] // 2) - 300, 450, 600, 60, 'about')
def main_menu(): # Starting Menu shop_button = Button(pygame.Rect((100, 500), (200, 50)), (255, 255, 255), (168, 226, 255), "Shop", (0, 0, 0), message_font) running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: game_loop() elif event.type == pygame.MOUSEBUTTONDOWN: if shop_button.check_pos(): shop() screen.fill((47, 47, 47)) highscore = read_data('data.json')['high'] high_player = read_data('data.json')['name'] coin_count = read_data('data.json')['coins'] title = title_font.render("Spicy Meatballs!", True, (255, 255, 255)) startinstructions = title_font.render("Press SPACE to play!", True, (255, 255, 255)) highscore_title = highscore_font.render("Highscore: ", True, (255, 255, 255)) coins = highscore_font.render(f"Coins: {coin_count}", True, (255, 255, 255)) highscore = highscore_font.render(f"{int(highscore)}", True, (255, 255, 255)) name = highscore_font.render(high_player, True, (255, 255, 255)) screen.blit(title, (width / 2 - title.get_width() / 2, 100)) screen.blit( startinstructions, (width / 2 - startinstructions.get_width() / 2, height - 75)) screen.blit( pygame.transform.scale( # Player Model player_img, (player_img.get_width() * 3, player_img.get_height() * 3)), (width / 1.5 + 100, 300)) shop_button.change_color() pygame.draw.rect(screen, (25, 25, 25), pygame.Rect((75, 275), (400, 100))) pygame.draw.line(screen, (255, 255, 255), (225, 300), (225, 340), 5) screen.blit(highscore, (100, 300)) screen.blit(highscore_title, (100, 225)) screen.blit(name, (300, 300)) screen.blit(coins, (100, 425)) shop_button.draw(screen) shop_button.draw_text(screen) pygame.display.flip() fpsClock.tick(fps) pygame.quit() sys.exit(0)
def empty_prompt(text): # Generic prompt with text and back button back_button = Button( pygame.Rect((width * 0.3 + 75, height * 0.3 + 225), (width * 0.4 - 150, 50)), (255, 255, 255), (168, 226, 255), "Back", (0, 0, 0), message_font) running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: if back_button.check_pos(): return pygame.draw.rect( screen, (0, 0, 0), pygame.Rect((width * 0.3, height * 0.3), (width * 0.4, height * 0.4))) prompt = score_font.render(text, True, (255, 255, 255)) screen.blit(prompt, (width / 2 - prompt.get_width() / 2, height / 2 - prompt.get_height() / 2 - 75)) back_button.change_color() back_button.draw(screen) back_button.draw_text(screen) pygame.display.flip() fpsClock.tick(fps) pygame.quit() sys.exit(0)
def upgrade_prompt(upgrade_name): # Prompt when upgrade is purchased back_button = Button( pygame.Rect((width * 0.3 + 75, height * 0.3 + 225), (width * 0.4 - 150, 50)), (255, 255, 255), (168, 226, 255), "Back", (0, 0, 0), message_font) upgrade_duration = read_data('data.json')[upgrade_name]["duration"] running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: if back_button.check_pos(): return pygame.draw.rect( screen, (0, 0, 0), pygame.Rect((width * 0.3, height * 0.3), (width * 0.4, height * 0.4))) prompt_one = score_font.render("You Purchased: ", True, (255, 255, 255)) prompt_two = score_font.render(upgrade_name, True, (255, 255, 255)) prompt_three = score_font.render("Your upgrade lasts for ", True, (255, 255, 255)) prompt_four = score_font.render(f"{upgrade_duration} Games", True, (255, 255, 255)) screen.blit(prompt_one, (width / 2 - prompt_one.get_width() / 2, height * 0.3 + 5)) screen.blit( prompt_two, (width / 2 - prompt_two.get_width() / 2, height * 0.3 + 45)) screen.blit( prompt_three, (width / 2 - prompt_three.get_width() / 2, height * 0.3 + 85)) screen.blit( prompt_four, (width / 2 - prompt_four.get_width() / 2, height * 0.3 + 125)) back_button.change_color() back_button.draw(screen) back_button.draw_text(screen) pygame.display.flip() fpsClock.tick(fps) pygame.quit() sys.exit(0)
class MenuScene(Scene): def __init__(self, game): super(MenuScene, self).__init__(game) self.game = self.getGame() self.bg = GameConstants.MENU_BG.convert_alpha() self.play_button = Button( (0, 0, 255), (GameConstants.SCREEN_DIMENSIONS[0] // 2) - 150, 350, 300, 60, 'Play') self.about_button = Button( (0, 0, 255), (GameConstants.SCREEN_DIMENSIONS[0] // 2) - 300, 450, 600, 60, 'about') def render(self): self.clearText() self.game.getScreen.blit(self.bg, (0, 0)) self.addText("FRUIT FROWNS", GameConstants.SCREEN_DIMENSIONS[0] // 2 - (110 * 3), 30, size=90, color=(255, 255, 255)) self.addText(f"You high score is {self.game.getHighScore}", GameConstants.SCREEN_DIMENSIONS[0] // 2 - (50 * 5), 200, size=50, color=(255, 255, 255)) self.play_button.draw(self.game.getScreen, 100) self.about_button.draw(self.game.getScreen, 100) super(MenuScene, self).render() def handleEvents(self, events): for event in events: if self.play_button.isOver(pygame.mouse.get_pos()): self.play_button.color = (0, 0, 139) elif self.about_button.isOver(pygame.mouse.get_pos()): self.about_button.color = (0, 0, 139) else: self.play_button.color = (0, 0, 255) self.about_button.color = (0, 0, 255) if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.MOUSEBUTTONDOWN: if self.play_button.isOver(pygame.mouse.get_pos()): self.game.changeScene(0) if self.about_button.isOver(pygame.mouse.get_pos()): self.game.changeScene(3)
class GameOverScene(Scene): def __init__(self , game): super(GameOverScene , self).__init__(game) self.game = self.getGame() self.bg = GameConstants.MENU_BG.convert_alpha() self.play_button = Button((0,0,255) , (GameConstants.SCREEN_DIMENSIONS[0]//2)-200 , 300 , 400 , 60 , 'Play Again') self.menu_button = Button((0,0,255) , (GameConstants.SCREEN_DIMENSIONS[0]//2)-300 , 400 , 600 , 60 , 'Main Menu') def render(self): self.clearText() self.game.getScreen.blit(self.bg , (0,0)) self.addText(f"You score is {self.game.getScore}" ,(GameConstants.SCREEN_DIMENSIONS[0]//2)-(70*4), 50 , size=70 , color=(255,255,255)) self.play_button.draw(self.game.getScreen , 100) self.menu_button.draw(self.game.getScreen , 100) super(GameOverScene , self).render() def handleEvents(self , events): for event in events: if self.play_button.isOver(pygame.mouse.get_pos()): self.play_button.color = (0,0,139) elif self.menu_button.isOver(pygame.mouse.get_pos()): self.menu_button.color = (0,0,139) else: self.play_button.color = (0,0,255) self.menu_button.color = (0,0,255) if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.MOUSEBUTTONDOWN: if self.play_button.isOver(pygame.mouse.get_pos()): self.game.reset() self.game.changeScene(0) elif self.menu_button.isOver(pygame.mouse.get_pos()): self.game.reset() self.game.changeScene(1)
def shop(): # Menu from which player can buy upgrades # Shop Button Width Margins: 100px on either side, 200 px between buttons, button_width=200px menu_button = Button(pygame.Rect( (width / 2 - 100, 700), (200, 50)), (255, 255, 255), (168, 226, 255), "Main Menu", (0, 0, 0), message_font) jump_button = Button(pygame.Rect( (100, 300), (200, 50)), (255, 255, 255), (168, 226, 255), "Higher Jump", (0, 0, 0), message_font) coin_button = Button(pygame.Rect( (500, 300), (200, 50)), (255, 255, 255), (168, 226, 255), "Multi-Coin", (0, 0, 0), message_font) running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: # Check each upgrade button and do the according action if menu_button.check_pos(): main_menu() elif jump_button.check_pos(): data = read_data('data.json') if not data["jump_upgrade"][ "active"]: # Add ten to jump_vel if data["coins"] >= data["jump_upgrade"]["price"]: data['coins'] -= data["jump_upgrade"]["price"] data['jump_vel'] += 10 data["jump_upgrade"]["active"] = True dump_data('data.json', data) upgrade_prompt("jump_upgrade") else: empty_prompt("Not Enough Money!") else: empty_prompt("Upgrade in Use") elif coin_button.check_pos(): data = read_data('data.json') if not data["coin_upgrade"][ "active"]: # Doubles coin multiplier if data["coins"] >= data["coin_upgrade"]["price"]: data["coins"] -= data["coin_upgrade"]["price"] data["coin_multiplier"] = 2 data["coin_upgrade"]["active"] = True dump_data('data.json', data) upgrade_prompt("coin_upgrade") else: empty_prompt("Not Enough Money!") else: empty_prompt("Upgrade in Use") screen.fill((47, 47, 47)) coins = score_font.render(f"COINS: {read_data('data.json')['coins']}", True, (255, 255, 255)) screen.blit(coins, (width - 250, 15)) menu_button.change_color() jump_button.change_color() coin_button.change_color() menu_button.draw(screen) menu_button.draw_text(screen) jump_button.draw(screen) jump_button.draw_text(screen) coin_button.draw(screen) coin_button.draw_text(screen) screen.blit(jump_upgrade_img, (jump_button.rect.x - 25, jump_button.rect.y - 15 - jump_upgrade_img.get_height())) screen.blit(coin_upgrade_img, (coin_button.rect.x - 25, coin_button.rect.y - 15 - coin_upgrade_img.get_height())) pygame.display.flip() fpsClock.tick(fps) pygame.quit() sys.exit(0)
def pause(): # Pause Menu menu_button = Button( pygame.Rect((width * 0.3 + 75, height * 0.3 + 100), ((width * 0.4 - 150, 50))), (255, 255, 255), (168, 226, 255), "Main Menu", (0, 0, 0), message_font) resume_button = Button( pygame.Rect((width * 0.3 + 75, height * 0.3 + 200), (width * 0.4 - 150, 50)), (255, 255, 255), (168, 226, 255), "Resume", (0, 0, 0), message_font) running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: if menu_button.check_pos(): main_menu() elif resume_button.check_pos(): return menu_button.change_color() resume_button.change_color() pygame.draw.rect( screen, (0, 0, 0), pygame.Rect((width * 0.3, height * 0.3), (width * 0.4, height * 0.4))) menu_button.draw(screen) resume_button.draw(screen) message = message_font.render("Paused...", True, (255, 255, 255)) screen.blit(message, (width / 2 - message.get_width() / 2, height * 0.3 + 25)) menu_button.draw_text(screen) resume_button.draw_text(screen) pygame.display.flip() fpsClock.tick(fps) pygame.quit() sys.exit(0)
def __init__(self , game): super(GameOverScene , self).__init__(game) self.game = self.getGame() self.bg = GameConstants.MENU_BG.convert_alpha() self.play_button = Button((0,0,255) , (GameConstants.SCREEN_DIMENSIONS[0]//2)-200 , 300 , 400 , 60 , 'Play Again') self.menu_button = Button((0,0,255) , (GameConstants.SCREEN_DIMENSIONS[0]//2)-300 , 400 , 600 , 60 , 'Main Menu')