Aggiungi supporto per la risoluzione personalizzata e gestione della pausa nel gioco
This commit is contained in:
+23
-5
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user