Aggiungi supporto per SDL e sostituisci il sistema grafico basato su Tkinter

This commit is contained in:
2024-12-14 23:00:22 +01:00
parent a6a06d1d54
commit 0ad9cd47c6
8 changed files with 198 additions and 26 deletions
+12 -14
View File
@@ -1,21 +1,19 @@
import json
import tkinter as tk
import random
from units import rat
import uuid
import subprocess
from engine import maze, graphics
from engine import maze, sdl2 as engine
class MiceMaze:
def __init__(self, maze_file):
self.map = maze.Map(maze_file)
self.audio = True
self.cell_size = 60
self.engine = graphics.GameWindow(self.map.width, self.map.height, self.cell_size)
self.engine = engine.GameWindow(self.map.width, self.map.height, self.cell_size, "Mice!", key_callback=self.key_pressed)
self.graphics_load()
self.engine.bind("<KeyPress>", self.key_pressed)
self.units = {}
self.new_rat()
for _ in range(5):
self.new_rat()
def new_rat(self, position=None):
if position is None:
@@ -34,11 +32,11 @@ class MiceMaze:
return random.choice(self._valid_positions)
def draw_maze(self):
for y in range(self.map.height):
for x in range(self.map.width):
variant = random.randint(0, 3)
tile = self.grasses[variant] if self.map.matrix[y][x] else self.tunnel
self.engine.draw_image(x*self.cell_size, y*self.cell_size, tile, tag="maze", anchor="nw")
for y, row in enumerate(self.map.matrix):
for x, cell in enumerate(row):
variant = x*y % 4
tile = self.grasses[variant] if cell else self.tunnel
self.engine.draw_image(x * self.cell_size, y * self.cell_size, tile, tag="maze")
def update_maze(self):
self.engine.delete_tag("unit")
@@ -46,13 +44,13 @@ class MiceMaze:
unit.move()
unit.collisions()
unit.draw()
self.engine.update_status(f"Units: {len(self.units)}")
self.engine.update_status(f"Mice: {len(self.units)}")
self.engine.new_cycle(50, self.update_maze)
def run(self):
self.draw_maze()
self.update_maze()
self.engine.mainloop()
self.engine.mainloop(update=self.update_maze, bg_update=self.draw_maze)
def key_pressed(self, event):
if event.keysym == "q":