Added Pet class and made a final demo

This commit is contained in:
Bo⋆˚✿˖° 2025-09-24 13:25:21 +02:00
parent faf0b2973c
commit b2470eac16
Signed by: FreedTapestry21
GPG key ID: 5E19D8C7E935C480
3 changed files with 71 additions and 21 deletions

View file

@ -9,13 +9,7 @@
# Importing libraries
#
import sys
import time
import json
import machine
import framebuf
import ssd1306
import _thread
import sys, time, json, machine, framebuf, ssd1306, random
#
# Classes
@ -36,6 +30,13 @@ class ConfigurationManager:
print(f"Failed to load config: {e}")
return self._get_default_config()
def save_config(self):
try:
with open(self.config_file, "w") as file:
json.dump(self.config, file)
except Exception as e:
print(f"Failed to save config: {e}")
# Return default configuration
def _get_default_config(self):
return {
@ -49,6 +50,13 @@ class ConfigurationManager:
"down": "3",
"select": "1",
"back": "2"
},
"pet": {
"name": "Pet",
"level": 0,
"happiness": 100,
"hunger": 100,
"thirst": 100,
}
}
@ -57,7 +65,7 @@ class Logger:
def __init__(self, config):
self.log_level = config.get("loglevel")
self.logging_enabled = config.get("logging")
self.log_file = config.get("logfile", "system.log")
self.log_file = config.get("logfile")
def log(self, message, log_level, ignore_console=False):
timestamp = self._get_timestamp()
@ -96,6 +104,33 @@ class Logger:
# Get configuration value
def get(self, key, default=None):
return self.config.get(key, default)
class Pet:
def __init__(self, config, logger):
self.config = config
self.logger = logger
def play(self, name, amount):
self.config.config["pet"]["happiness"] = self.config.config["pet"]["happiness"] + (amount * ((self.config.config["pet"]["level"] / 100)+1))
self.logger.log(f"You {self.config.config['pet']['name']} {name} and gained {str(amount)} of happiness! Your happiness bar is now at {str(self.config.config['pet']['happiness'])}!", 3)
def nom(self, name, amount):
self.config.config["pet"]["hunger"] = self.config.config["pet"]["hunger"] + (amount * ((self.config.config["pet"]["level"] / 100)+1))
self.logger.log(f"You fed {self.config.config['pet']['name']} {name} and gained {str(amount)} of food! Your food bar is now at {str(self.config.config['pet']['hunger'])}!", 3)
def slurp(self, name, amount):
self.config.config["pet"]["thirst"] = self.config.config["pet"]["thirst"] + (amount * ((self.config.config["pet"]["level"] / 100)+1))
self.logger.log(f"You gave {self.config.config['pet']['name']} {name} and gained {str(amount)} of hydration! Your hydration bar is now at {str(self.config.config['pet']['thirst'])}!", 3)
def wombicombi(self):
self.logger.log("Health depletion triggered", 4)
self.config.config["pet"]["happiness"] = round(self.config.config["pet"]["happiness"] - ((100 - self.config.config["pet"]["level"]) * random.uniform(0.0, 0.2)))
self.config.config["pet"]["hunger"] = round(self.config.config["pet"]["hunger"] - ((100 - self.config.config["pet"]["level"]) * random.uniform(0.0, 0.2)))
self.config.config["pet"]["thirst"] = round(self.config.config["pet"]["thirst"] - ((100 - self.config.config["pet"]["level"]) * random.uniform(0.0, 0.2)))
self.logger.log(f"Health is now at the following values...", 4)
self.logger.log(f"Happiness: {self.config.config['pet']['happiness']}", 4)
self.logger.log(f"Food: {self.config.config['pet']['hunger']}", 4)
self.logger.log(f"Hydration: {self.config.config['pet']['thirst']}", 4)
# Handles input from buttons/controls
class InputController:
@ -311,7 +346,8 @@ class UserInterface:
# Handles power management
class Power:
def __init__(self, display, input_controller, logger):
def __init__(self, config, display, input_controller, logger):
self.config = config
self.display = display
self.input_controller = input_controller
self.logger = logger
@ -328,11 +364,13 @@ class Power:
self.logger.log("Returning from sleep mode", 4)
return
def exit_system(self, message=""):
def shutdown(self, message=""):
# Exit the system with optional message
if message:
self.logger.log(message, 3)
self.logger.log("System shutting down...", 3)
self.display.clear()
self.display.update()
machine.deepsleep()
#