|
|
|
|
@ -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: |
|
|
|
|
|