Files
Tetris/game/menu.py
T
2025-02-02 09:16:50 +01:00

153 lines
5.1 KiB
Python

import pygame as pg
import game.settings as setting
from game.util.button import Button
from game.util.util import *
import sys
class StartMenu:
def __init__(self, screen, clock):
self.menu_running = None
self.screen = screen
self.clock = clock
self.screen_size = self.screen.get_size()
self.mouse_pos = pg.mouse.get_pos()
self.score = load_score("gamescore.json")
self.option = False
self.options_menu = OptionMenu(self.screen, self.clock)
def run(self):
self.menu_running = True
while self.menu_running:
self.clock.tick(60)
self.update()
self.draw()
return True
def update(self):
self.mouse_pos = pg.mouse.get_pos()
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
sys.exit()
if event.type == pg.KEYDOWN:
if event.key == pg.K_RETURN:
self.menu_running = False
if event.key == pg.K_ESCAPE:
pg.quit()
sys.exit()
if event.type == pg.MOUSEBUTTONDOWN:
if self.play.checkForInput(self.mouse_pos):
self.menu_running = False
if self.options.checkForInput(self.mouse_pos):
self.option = True
while self.option:
self.option = self.options_menu.run()
if self.quit.checkForInput(self.mouse_pos):
pg.quit()
sys.exit()
def draw(self):
self.screen.blit(get_background(), (0, 0))
self.play = Button(image=None, pos=(setting.width // 2, setting.height // 3), text_input="Play", font=get_font(50), base_color=(255, 255, 255), hovering_color=(200, 200, 200))
self.play.changeColor(self.mouse_pos)
self.quit = Button(image=None, pos=(setting.width // 2, setting.height // 3 * 2), text_input="Quit", font=get_font(50), base_color=(255, 255, 255), hovering_color=(200, 200, 200))
self.quit.changeColor(self.mouse_pos)
self.options = Button(image=None, pos=(setting.width // 2, setting.height // 2), text_input="Options", font=get_font(50), base_color=(255, 255, 255), hovering_color=(200, 200, 200))
self.options.changeColor(self.mouse_pos)
draw_text(self.screen, "TETRIS", get_font(30), setting.width // 2, setting.height // 3 - 50, (255, 255, 255))
position = 0
for item in self.score["score"]:
draw_text(self.screen, f"Score: {item}", get_font(30), setting.width // 5, setting.height // 3 - 50 + position, (255, 255, 255))
position += 50
self.play.update(self.screen)
self.options.update(self.screen)
self.quit.update(self.screen)
pg.display.update()
def draw_options(self):
self.screen.blit(get_background(), (0, 0))
pg.display.update()
class GameMenu:
def __init__(self, screen, clock):
self.menu_running = None
self.screen = screen
self.clock = clock
self.screen_size = self.screen.get_size()
self.playing = True
def run(self):
self.menu_running = True
while self.menu_running:
self.clock.tick(60)
self.update()
self.draw()
return self.playing
def update(self):
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
sys.exit()
if event.type == pg.KEYDOWN:
if event.key == pg.K_RETURN:
self.menu_running = False
if event.key == pg.K_ESCAPE:
self.playing = False
self.menu_running = False
def draw(self):
self.screen.fill((0, 0, 0))
if setting.gamestate:
draw_text(self.screen, "Game Paused", get_font(50), setting.width // 2, setting.height // 2 - 50, (255, 255, 255))
draw_text(self.screen, "Press ESC to Resume", get_font(30), setting.width // 2, setting.height // 2 + 10, (200, 200, 200))
else:
draw_text(self.screen, "Game Over", get_font(50), setting.width // 2, setting.height // 2 - 50, (255, 0, 0))
draw_text(self.screen, "Press Enter to Restart", get_font(30), setting.width // 2, setting.height // 2 + 50, (200, 200, 200))
pg.display.update()
class OptionMenu:
def __init__(self, screen, clock):
self.menu_running = None
self.screen = screen
self.clock = clock
self.screen_size = self.screen.get_size()
def run(self):
self.menu_running = True
while self.menu_running:
self.clock.tick(60)
self.update()
self.draw()
return False
def update(self):
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
sys.exit()
if event.type == pg.KEYDOWN:
if event.key == pg.K_ESCAPE:
self.menu_running = False
def draw(self):
self.screen.blit(get_background(), (0, 0))
pg.display.update()