-
Notifications
You must be signed in to change notification settings - Fork 0
/
Menu.py
79 lines (61 loc) · 2.74 KB
/
Menu.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import sys
import pygame
from Components.Button import Button
from typing import List
from Utils.Events import EventType
from dataclasses import dataclass
@dataclass
class Dimensions:
width: int
height: int
class Menu():
buttons: List[Button]
screen: pygame.surface.Surface
dimensions: Dimensions
def __init__(self):
pygame.init()
infoObject = pygame.display.Info()
WIDTH = infoObject.current_w
HEIGHT = infoObject.current_h
self.screen = pygame.display.set_mode((WIDTH, HEIGHT), pygame.RESIZABLE)
pygame.display.set_caption('Silent Spell')
self.dimensions = Dimensions(WIDTH, HEIGHT)
start_btn = Button(self.screen, 'Start', 'arial', 20, (255, 255, 255),
(200, 0, 0), (self.dimensions.width//2, self.dimensions.height//3), True, [self.start_game])
exit_btn = Button(self.screen, 'quit', 'arial', 20, (255, 255, 255),
(200, 0, 0), (self.dimensions.width//2, self.dimensions.height//2), True, [self.quit_game])
self.buttons = [start_btn, exit_btn]
def start_game(self):
pygame.event.post(pygame.event.Event(EventType.START.value))
def choose_game(self):
rain_button = Button(self.screen, 'Rain Game', 'arial', 20, (255, 255, 255),
(200, 0, 0), (self.dimensions.width//2, self.dimensions.height//3), True, [self.start_rain_game])
jokenpo_button = Button(self.screen, 'Jokenpo', 'arial', 20, (255, 255, 255),
(200, 0, 0), (self.dimensions.width//2, self.dimensions.height//2), True, [self.start_jokenpo])
self.buttons = [rain_button, jokenpo_button]
def quit_game(self):
pygame.event.post(pygame.event.Event(pygame.QUIT))
def start_rain_game(self):
pygame.event.post(pygame.event.Event(EventType.START_RAIN.value))
def start_jokenpo(self):
pygame.event.post(pygame.event.Event(EventType.START_JOKENPO.value))
def __del__(self):
for btn in self.buttons:
del btn
def update_dimensions(self):
self.dimensions = Dimensions(*self.screen.get_size())
for i, btn in enumerate(self.buttons[::-1], 2):
btn.set_pos(((self.dimensions.width//2, self.dimensions.height//i)))
def update(self):
self.screen.fill((50, 50, 50))
for btn in self.buttons:
btn.draw()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.VIDEORESIZE:
self.update_dimensions()
if event.type == pygame.MOUSEBUTTONDOWN:
for btn in self.buttons:
btn.clicked()