Aggiungi supporto per la risoluzione personalizzata e gestione della pausa nel gioco

This commit is contained in:
2024-12-23 00:59:48 +01:00
parent 42e2f4aa16
commit 97038023d5
10 changed files with 93 additions and 24 deletions
+23 -5
View File
@@ -1,6 +1,8 @@
import os
import sdl2
import sdl2.ext
from sdl2.ext.compat import byteify
from PIL import Image
class GameWindow:
@@ -9,8 +11,8 @@ class GameWindow:
self.cell_size = cell_size
self.width = width * cell_size
self.height = height * cell_size
self.actual_screen_size = (640, 480)
if self.width > self.actual_screen_size[0] or self.height > self.actual_screen_size[1]:
self.actual_screen_size = os.environ.get("RESOLUTION", "640x480").split("x")
if self.width > int(self.actual_screen_size[0]) or self.height > int(self.actual_screen_size[1]):
self.target_size = self.actual_screen_size
else:
self.target_size = (self.width, self.height)
@@ -22,6 +24,8 @@ class GameWindow:
self.max_h_offset = self.target_size[1] - self.height
print(f"Screen size: {self.width}x{self.height}")
sdl2.ext.init(joystick=True)
sdl2.SDL_Init(sdl2.SDL_INIT_AUDIO)
self.window = sdl2.ext.Window(title=title, size=self.target_size,)# flags=sdl2.SDL_WINDOW_FULLSCREEN)
self.delay = 30
self.load_joystick()
@@ -63,7 +67,7 @@ class GameWindow:
def draw_text(self, text, font, position, color):
sprite = self.factory.from_text(text, color=color, fontmanager=font)
if position == "center":
sprite.position = (self.size[0] // 2 - sprite.size[0] // 2, self.size[1] // 2 - sprite.size[1] // 2)
sprite.position = (self.target_size[0] // 2 - sprite.size[0] // 2, self.target_size[1] // 2 - sprite.size[1] // 2)
else:
sprite.position = position
self.renderer.copy(sprite, dstrect=sprite.position)
@@ -75,8 +79,6 @@ class GameWindow:
self.renderer.copy(sprite, dstrect=sprite.position)
def draw_rectangle(self, x, y, width, height, tag, outline="red", filling=None):
if not self.is_in_visible_area(x, y):
return
x, y = x + self.w_offset, y + self.h_offset
if filling:
self.renderer.fill((x, y, width, height), sdl2.ext.Color(*filling))
@@ -92,6 +94,21 @@ class GameWindow:
def delete_tag(self, tag):
pass
def win_screen(self, text, image=None):
self.draw_rectangle(50 - self.w_offset, 50 - self.h_offset,
self.target_size[0] - 100, self.target_size[1] - 100, "win", filling=(255, 255, 255))
self.draw_text(text, self.fonts[50], "center", sdl2.ext.Color(0, 0, 0))
if image:
image_size = self.get_image_size(image)
self.draw_image(self.target_size[0] // 2 - image_size[0] // 2,
self.target_size[1] // 2 - image_size[1] // 2-150, image, "win")
def pause_screen(self, text):
self.draw_rectangle(50 - self.w_offset, 50 - self.h_offset,
self.target_size[0] - 100, self.target_size[1] - 100, "pause", filling=(255, 255, 255))
self.draw_text(text, self.fonts[50], "center", sdl2.ext.Color(0, 0, 0))
def get_image_size(self, image):
return image.size
@@ -174,6 +191,7 @@ class GameWindow:
self.h_offset = y
def play_sound(self, sound_file):
return
sample = sdl2.sdlmixer.Mix_LoadWAV(byteify(sound_file, "utf-8"))
if sample is None: