Skip to content

Commit d2f42d8

Browse files
committed
Add window resize functionality
1 parent 49b59ee commit d2f42d8

File tree

3 files changed

+125
-79
lines changed

3 files changed

+125
-79
lines changed

pysweeper.py

Lines changed: 77 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from file_io import read_json, write_json
66
from sprites import load_file
7-
from utilities import Board, Smiley, Timer, pygame, screen
7+
from utilities import Board, Smiley, Timer, pg, screen
88

99
if platform.system() == "Windows":
1010
sys_name = "Windows"
@@ -64,17 +64,17 @@ def __init__(self,
6464
self._jr_reveal = jr_reveal
6565

6666
def run(self) -> None:
67-
pygame.init()
68-
pygame.mixer.init()
67+
pg.init()
68+
pg.mixer.init()
6969

70-
pygame.display.set_caption("pysweeper")
71-
pygame.display.set_icon(pygame.image.load(load_file("textures/bomb.png")))
72-
pygame.display.set_mode(size=(32*self._width + 200,
73-
32*self._height + 200),
74-
flags=pygame.RESIZABLE,
75-
vsync=True)
70+
pg.display.set_caption("pysweeper")
71+
pg.display.set_icon(pg.image.load(load_file("textures/bomb.png")))
72+
pg.display.set_mode(size=(32*self._width + 200,
73+
32*self._height + 200),
74+
flags=pg.RESIZABLE,
75+
vsync=True)
7676

77-
clock = pygame.time.Clock()
77+
clock = pg.time.Clock()
7878

7979
if sys_name == "Windows":
8080
temp = win32gui.GetPixel(dc, 0, 0)
@@ -92,7 +92,7 @@ def run(self) -> None:
9292
for score in self._score:
9393
score.draw(screen)
9494

95-
mouse_pos = pygame.mouse.get_pos()
95+
mouse_pos = pg.mouse.get_pos()
9696
mouse_x = (mouse_pos[0] - self._board._left_offset) // 32
9797
mouse_y = (mouse_pos[1] - self._board._top_offset) // 32
9898

@@ -104,15 +104,15 @@ def run(self) -> None:
104104
elif sys_name == "Windows":
105105
win32gui.SetPixel(dc, 0, 0, temp)
106106

107-
for event in pygame.event.get():
108-
if event.type == pygame.QUIT:
109-
pygame.quit()
107+
for event in pg.event.get():
108+
if event.type == pg.QUIT:
109+
pg.quit()
110110
exit()
111111

112-
if event.type == pygame.MOUSEBUTTONDOWN:
112+
if event.type == pg.MOUSEBUTTONDOWN:
113113
self._smiley.set_in_awe()
114114

115-
if event.type == pygame.MOUSEBUTTONUP:
115+
if event.type == pg.MOUSEBUTTONUP:
116116
self._smiley.set_reset()
117117
if mouse_x < self._width and \
118118
mouse_x >= 0 and \
@@ -146,14 +146,7 @@ def run(self) -> None:
146146
else:
147147
self._flags += 1
148148
block.flag()
149-
self._score[0].set_number((self._bombs
150-
- self._flags) // 100)
151-
self._score[1].set_number(((self._bombs
152-
- self._flags) % 100)
153-
// 10)
154-
self._score[2].set_number((self._bombs
155-
- self._flags) % 10)
156-
149+
self.update_score()
157150
elif event.button == 2:
158151
if not block.is_flagged():
159152
if block.is_question_mark():
@@ -169,10 +162,10 @@ def run(self) -> None:
169162
event.button == 1:
170163
self.restart()
171164

172-
if event.type == pygame.KEYDOWN:
173-
if event.key in (pygame.K_LSHIFT, pygame.K_RSHIFT):
165+
if event.type == pg.KEYDOWN:
166+
if event.key in (pg.K_LSHIFT, pg.K_RSHIFT):
174167
input_arr.append("shift")
175-
elif (event.key == pygame.K_BACKSPACE and
168+
elif (event.key == pg.K_BACKSPACE and
176169
len(input_arr) > 0):
177170
input_arr.pop()
178171
else:
@@ -185,8 +178,10 @@ def run(self) -> None:
185178
cheat = not cheat
186179
input_arr = []
187180

188-
font = pygame.font.Font(load_file("fonts/minecraft_regular.ttf"),
189-
32)
181+
if event.type == pg.VIDEORESIZE:
182+
self.resize()
183+
184+
font = pg.font.Font(load_file("fonts/minecraft_regular.ttf"), 32)
190185
text = font.render("".join(input_arr), True, (0, 0, 0))
191186
screen.blit(text, (50, 750))
192187

@@ -210,8 +205,8 @@ def run(self) -> None:
210205

211206
if self._board._game_over == "LOSE":
212207
if self._play_sound:
213-
pygame.mixer.music.load(load_file("sounds/explosion.mp3"))
214-
pygame.mixer.music.play()
208+
pg.mixer.music.load(load_file("sounds/explosion.mp3"))
209+
pg.mixer.music.play()
215210
self._play_sound = False
216211
self._smiley.set_dead()
217212

@@ -223,44 +218,74 @@ def run(self) -> None:
223218

224219
clock.tick(60)
225220

226-
pygame.display.update()
221+
pg.display.update()
227222

228223
def restart(self) -> None:
229224
self._clicks = 0
230225
self._flags = 0
231226
self._question_marks = 0
227+
temp_left_offset = self._board._left_offset
228+
temp_top_offset = self._board._top_offset
232229
self._board = Board(self._width, self._height, self._bombs)
230+
self._board._left_offset = temp_left_offset
231+
self._board._top_offset = temp_top_offset
232+
self._board.window_resize()
233233
self._smiley = Smiley(x=(self._board._left_offset - 32
234234
+ 32*self._width//2),
235235
y=(self._board._top_offset - 64))
236236
self._time = 0
237-
self._timer_0 = Timer(x=(self._board._left_offset + 32
238-
+ 32*self._width//2),
239-
y=(self._board._top_offset - 64))
240-
self._timer_1 = Timer(x=(self._board._left_offset + 64
241-
+ 32*self._width//2),
242-
y=(self._board._top_offset - 64))
243-
self._timer_2 = Timer(x=(self._board._left_offset + 96
244-
+ 32*self._width//2),
245-
y=(self._board._top_offset - 64))
246-
self._timer = [self._timer_0, self._timer_1, self._timer_2]
247-
self._score_0 = Timer(x=(self._board._left_offset - 128
248-
+ 32*self._width//2),
249-
y=(self._board._top_offset - 64))
250-
self._score_1 = Timer(x=(self._board._left_offset - 96
251-
+ 32*self._width//2),
252-
y=(self._board._top_offset - 64))
253-
self._score_2 = Timer(x=(self._board._left_offset - 64
254-
+ 32*self._width//2),
255-
y=(self._board._top_offset - 64))
256-
self._score = [self._score_0, self._score_1, self._score_2]
237+
self.set_digit_displays()
257238
self._score[0].set_number(self._bombs // 100)
258239
self._score[1].set_number((self._bombs % 100) // 10)
259240
self._score[2].set_number(self._bombs % 10)
260241
self._first_move = True
261242
self._new_highscore = True
262243
self._play_sound = True
263244

245+
def resize(self) -> None:
246+
self._board._left_offset = (pg.display.get_surface().get_width() -
247+
32*self._width)//2
248+
self._board._top_offset = (pg.display.get_surface().get_height() -
249+
32*self._height)//2
250+
self._smiley = Smiley(x=(self._board._left_offset - 32
251+
+ 32*self._width//2),
252+
y=(self._board._top_offset - 64))
253+
self.set_digit_displays()
254+
self.update_score()
255+
self._board.window_resize()
256+
257+
def set_digit_displays(self):
258+
self._timer_0 = Timer(x=(self._board._left_offset
259+
+ 32 + 32 * self._width // 2),
260+
y=self._board._top_offset - 64)
261+
262+
self._timer_1 = Timer(x=(self._board._left_offset
263+
+ 64 + 32 * self._width // 2),
264+
y=self._board._top_offset - 64)
265+
266+
self._timer_2 = Timer(x=(self._board._left_offset
267+
+ 96 + 32 * self._width // 2),
268+
y=self._board._top_offset - 64)
269+
self._timer = [self._timer_0, self._timer_1, self._timer_2]
270+
271+
self._score_0 = Timer(x=(self._board._left_offset
272+
- 128 + 32 * self._width // 2),
273+
y=self._board._top_offset - 64)
274+
275+
self._score_1 = Timer(x=(self._board._left_offset
276+
- 96 + 32 * self._width // 2),
277+
y=self._board._top_offset - 64)
278+
279+
self._score_2 = Timer(x=(self._board._left_offset
280+
- 64 + 32 * self._width // 2),
281+
y=self._board._top_offset - 64)
282+
self._score = [self._score_0, self._score_1, self._score_2]
283+
284+
def update_score(self):
285+
self._score[0].set_number((((self._bombs - self._flags)) // 100))
286+
self._score[1].set_number(((((self._bombs - self._flags)) % 100) // 10))
287+
self._score[2].set_number((((self._bombs - self._flags)) % 10))
288+
264289

265290
def main():
266291
pass

sprites.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,18 @@ def get_screen_size() -> Tuple[int, int]:
3333

3434
os.environ["SDL_VIDEO_WINDOW_POS"] = f"{str(position[0])}, {str(position[1])}"
3535

36-
import pygame # noqa: E402
36+
import pygame as pg # noqa: E402
3737

38-
screen = pygame.display.set_mode(flags=pygame.HIDDEN)
38+
screen = pg.display.set_mode(flags=pg.HIDDEN)
3939

4040

41-
def img_outline(img: pygame.surface.Surface,
41+
def img_outline(img: pg.surface.Surface,
4242
color: Tuple[int, int, int],
4343
loc: Tuple[int, int],
44-
screen: pygame.surface.Surface) -> None:
45-
mask = pygame.mask.from_surface(img)
44+
screen: pg.surface.Surface) -> None:
45+
mask = pg.mask.from_surface(img)
4646
mask_outline = mask.outline()
47-
mask_surf = pygame.Surface(img.get_size())
47+
mask_surf = pg.Surface(img.get_size())
4848
for pixel in mask_outline:
4949
mask_surf.set_at(pixel, color)
5050
mask_surf.set_colorkey((0, 0, 0))
@@ -54,10 +54,10 @@ def img_outline(img: pygame.surface.Surface,
5454
screen.blit(mask_surf, (loc[0], loc[1] + 1))
5555

5656

57-
def blit_sprite(sprite: pygame.surface.Surface,
57+
def blit_sprite(sprite: pg.surface.Surface,
5858
outline_color: Tuple[int, int, int],
5959
location: Tuple[int, int],
60-
screen: pygame.surface.Surface) -> None:
60+
screen: pg.surface.Surface) -> None:
6161
img_outline(sprite, outline_color, location, screen)
6262
screen.blit(sprite, location)
6363

@@ -68,7 +68,7 @@ def blit_sprite(sprite: pygame.surface.Surface,
6868
def image_loader(path: str) -> str:
6969
for i in os.listdir(path):
7070
yield ((os.path.splitext(i)[0]),
71-
pygame.image.load(path + i).convert_alpha())
71+
pg.image.load(path + i).convert_alpha())
7272

7373

7474
class Sprites:

0 commit comments

Comments
 (0)