|
|
|
|
@ -6,7 +6,6 @@ import uuid
|
|
|
|
|
from engine import maze, sdl2 as engine, controls |
|
|
|
|
import os |
|
|
|
|
import datetime |
|
|
|
|
import subprocess |
|
|
|
|
import json |
|
|
|
|
|
|
|
|
|
class MiceMaze(controls.KeyBindings): |
|
|
|
|
@ -26,16 +25,21 @@ class MiceMaze(controls.KeyBindings):
|
|
|
|
|
self.unit_positions = {} |
|
|
|
|
self.unit_positions_before = {} |
|
|
|
|
self.scrolling_direction = None |
|
|
|
|
self.pause = False |
|
|
|
|
self.game_status = "start_menu" |
|
|
|
|
self.game_end = (False, None) |
|
|
|
|
self.dialog = "start_menu" |
|
|
|
|
self.scrolling = False |
|
|
|
|
self.sounds = {} |
|
|
|
|
self.start_game() |
|
|
|
|
self.background_texture = None |
|
|
|
|
keybindings_file, = "keybinding_game.json", |
|
|
|
|
with open(os.path.join("conf", keybindings_file)) as f: |
|
|
|
|
self.keybindings = json.load(f) |
|
|
|
|
self.configs = self.get_config() |
|
|
|
|
|
|
|
|
|
def get_config(self): |
|
|
|
|
configs = {} |
|
|
|
|
for file in os.listdir("conf"): |
|
|
|
|
if file.endswith(".json"): |
|
|
|
|
with open(os.path.join("conf", file)) as f: |
|
|
|
|
configs[file[:-5]] = json.load(f) |
|
|
|
|
return configs |
|
|
|
|
|
|
|
|
|
def start_game(self): |
|
|
|
|
for _ in range(5): |
|
|
|
|
@ -91,15 +95,19 @@ class MiceMaze(controls.KeyBindings):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
if self.count_rats() > 200: |
|
|
|
|
self.stop_sound() |
|
|
|
|
self.play_sound("WEWIN.WAV") |
|
|
|
|
self.game_end = (True, False) |
|
|
|
|
self.game_status = "paused" |
|
|
|
|
return True |
|
|
|
|
if not len(self.units): |
|
|
|
|
self.stop_sound() |
|
|
|
|
self.play_sound("VICTORY.WAV") |
|
|
|
|
self.play_sound("WELLDONE.WAV", tag="effects") |
|
|
|
|
self.game_end = (True, True) |
|
|
|
|
self.game_status = "paused" |
|
|
|
|
self.save_score() |
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
@ -108,17 +116,23 @@ class MiceMaze(controls.KeyBindings):
|
|
|
|
|
f.write(f"{datetime.datetime.now()} - {self.points}\n") |
|
|
|
|
|
|
|
|
|
def read_score(self): |
|
|
|
|
table = [] |
|
|
|
|
with open("scores.txt") as f: |
|
|
|
|
return f.read().splitlines() |
|
|
|
|
rows = f.read().splitlines() |
|
|
|
|
for row in rows: |
|
|
|
|
table.append(row.split(" - ")) |
|
|
|
|
table.sort(key=lambda x: int(x[1]), reverse=True) |
|
|
|
|
return table |
|
|
|
|
|
|
|
|
|
def update_maze(self): |
|
|
|
|
if self.pause: |
|
|
|
|
if self.dialog != "start_menu": |
|
|
|
|
self.engine.dialog("Pause") |
|
|
|
|
self.engine.start_dialog(image=self.assets["BMP_WEWIN"]) |
|
|
|
|
return |
|
|
|
|
if self.game_over(): |
|
|
|
|
return |
|
|
|
|
if self.game_status == "paused": |
|
|
|
|
self.engine.dialog("Pause") |
|
|
|
|
return |
|
|
|
|
if self.game_status == "start_menu": |
|
|
|
|
self.engine.dialog("Welcome to the Mice!", subtitle="A game by Matteo because he was bored",image=self.assets["BMP_WEWIN"]) |
|
|
|
|
return |
|
|
|
|
self.engine.delete_tag("unit") |
|
|
|
|
self.engine.delete_tag("effect") |
|
|
|
|
self.engine.draw_pointer(self.pointer[0] * self.cell_size, self.pointer[1] * self.cell_size) |
|
|
|
|
@ -149,21 +163,11 @@ class MiceMaze(controls.KeyBindings):
|
|
|
|
|
) |
|
|
|
|
self.engine.scroll_view(self.pointer) |
|
|
|
|
|
|
|
|
|
def play_sound(self, sound_file,tag="main"): |
|
|
|
|
self.engine.play_sound(sound_file) |
|
|
|
|
return |
|
|
|
|
if self.audio: |
|
|
|
|
if len(self.sounds) > 5: |
|
|
|
|
self.sounds.pop(next(iter(self.sounds))).kill() |
|
|
|
|
self.sounds[f"{tag}_{random.random()}"] = subprocess.Popen(["aplay", f"sound/{sound_file}"]) |
|
|
|
|
def play_sound(self, sound_file,tag="base"): |
|
|
|
|
self.engine.play_sound(sound_file, tag=tag) |
|
|
|
|
|
|
|
|
|
def stop_sound(self, tag=None): |
|
|
|
|
self.engine.stop_sound() |
|
|
|
|
return |
|
|
|
|
for key, value in self.sounds.copy().items(): |
|
|
|
|
if tag is None or tag in key: |
|
|
|
|
value.kill() |
|
|
|
|
del self.sounds[key] |
|
|
|
|
|
|
|
|
|
def graphics_load(self): |
|
|
|
|
self.tunnel = self.engine.load_image("Rat/BMP_TUNNEL.png", surface=True) |
|
|
|
|
@ -180,6 +184,7 @@ class MiceMaze(controls.KeyBindings):
|
|
|
|
|
for file in os.listdir("assets/Rat"): |
|
|
|
|
if file.endswith(".png"): |
|
|
|
|
self.assets[file[:-4]] = self.engine.load_image(f"Rat/{file}") |
|
|
|
|
|
|
|
|
|
def add_point(self, value): |
|
|
|
|
self.points += value |
|
|
|
|
|
|
|
|
|
|