-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlayScene.py
156 lines (114 loc) · 4.83 KB
/
PlayScene.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 6 13:39:37 2023
@author: carol
"""
from Assets import Display
from SharedAssetsScenes import Scene
import pygame
from Constants import c
from Game import Game_mgr
from Helpers import dragging_event, single_choice
from datetime import datetime
class Play(Scene):
def __init__(self, window):
super().__init__(window)
self.id = 'play'
self.status = 'not_yet_started'
# ['not_yet_started','answered', 'not_answered']
self.assets = self.play_assets()
self.screen_mgr = Display(self.window, *self.assets )
self.screen_mgr.update()
def enter(self, data) :
# print(data)
self.home_button.visible = True
self.start_button.enable()
self.score_text.set_text( ' ' )
self.last_answer.set_text( ' ' )
self.status = 'not_yet_started'
self.sound_button.on = self.data_dic['sound']
img = pygame.image.load(self.data_dic['selected_avatar'])
img = pygame.transform.smoothscale(img , c('avatar_play_size'))
self.avatar_img.surface = img
self.game = Game_mgr(self.window
, self.board
, self.data_dic['selected_numbers']
, self.data_dic['selected_speed']
, game = self.data_dic['selected_game'])
self.game.variant = self.data_dic['selected_variant']
def leave(self) :
self.status = 'not_yet_started'
# self.data_dic['sound'] = self.sound_button.on
today = datetime.now()
self.score_data.add(self.game.score , self.data_dic['selected_avatar'], today.isoformat())
self.game.score = 0
def handle(self, events, keys_down):
"""
handel the event loop
"""
for event in events :
self.shared_handle(event)
for variant in self.variants.values():
single_choice(event, variant, self.variants.values())
# home button clicked
if self.home_button.handle(event):
self.go_to('intro')
# play buttom clicked
if self.start_button.handle(event) :
# disable button
self.start_button.disable() # irresposive
self.start_button.state = 'disabled' # change image
# start a question
self.game.start()
# set player on the bottom center of the mat
self.game.player.rect.centery = self.board.rect.bottom - c('circle_size')[1] // 2
self.game.player.rect.centerx = self.board.rect.centerx
# hide introduction text from the mat
self.middle_text.visible = False
self.status = 'not_answered'
# moving player with mouse
if self.status == 'not_answered' and self.game.over == False:
dragging_event(event,self.game.player,self.board)
# mouse visibility
if event.type == pygame.MOUSEMOTION :
if self.status == 'not_yet_started' : # if not yet playing
pygame.mouse.set_visible(True)
elif event.pos[1] > self.bub_buttons.rect.top: # if mouse in bottom panel
pygame.mouse.set_visible(True)
else:
pygame.mouse.set_visible(False) # playing and not at the bottom
def update(self):
# check if collided, missed, starting a new question needed using game.update()
if self.status != 'not_yet_started' :
self.game.update()
# update score text
if self.status != 'not_yet_started' :
# print(self.game.score)
self.score_text.set_text( f'Score: {self.game.score}' )
try:
self.last_answer.set_text( f'Last answer:{chr(10)}{self.game.last_answer}' )
except:
self.last_answer.set_text( '' )
# print(self.score_text.text)
self.game.sound = self.sound_button.on
else:
self.middle_text.visible = True
self.selected_variant = [level for level, obj in self.variants.items() if obj.selected][0]
self.game.variant = self.selected_variant
self.data_dic['selected_variant'] = self.selected_variant
def draw(self):
"""
draw scree object at the end of each frame
"""
self.window.fill('white')
if self.status != 'not_yet_started' :
self.game.draw()
self.screen_mgr.draw()
#%% TESTING
if (__name__ == '__main__'):
from Helpers import window_init, loop
window_size = (c('width_window'), c('height_window'))
window = window_init(size=window_size, color='red')
aPlay = Play(window)
aPlay.screen_mgr.draw()
loop()