From f38fd535fb90e1b718e70d10d132fe6f4846cb6d Mon Sep 17 00:00:00 2001 From: Owen Feldman Date: Sat, 11 Apr 2026 17:13:54 -0400 Subject: [PATCH] A lot --- .vscode/settings.json | 9 ++++---- data/cat.py | 6 ++++- data/save.py | 19 ++++++++++++++++ data/text.py | 31 +++++++++++++++++++++++++ game.py | 4 ++++ systems/world.py | 53 ++++++++++++++++++++++++++++++++++++++----- 6 files changed, 111 insertions(+), 11 deletions(-) create mode 100644 data/save.py create mode 100644 data/text.py diff --git a/.vscode/settings.json b/.vscode/settings.json index 7d1c282..120aab0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,8 +1,9 @@ { "files.exclude": { - ".gitignore": false, - "LICENSE": false, - "README.md": false, - ".vscode/": false + ".gitignore": true, + "LICENSE": true, + "README.md": true, + ".vscode/": true, + ".venv/": true } } diff --git a/data/cat.py b/data/cat.py index 307427a..f7e1dec 100644 --- a/data/cat.py +++ b/data/cat.py @@ -1,3 +1,7 @@ class Cat: - def __init__(self, name): + def __init__(self, name, traits): self.name = name + self.traits = traits + + def to_dict(self): + return vars(self) diff --git a/data/save.py b/data/save.py new file mode 100644 index 0000000..4a40fda --- /dev/null +++ b/data/save.py @@ -0,0 +1,19 @@ +import json +from data.cat import Cat + + +class SaveData: + def __init__(self, cat, money=100): + self.cat = cat + self.money = money + + +def save(cat): + with open(f"{cat.name}.kitten", "w") as f: + json.dump(cat.to_dict(), f) + + +def load(filepath): + with open(filepath) as f: + raw = json.load(f) + return Cat(**raw) diff --git a/data/text.py b/data/text.py new file mode 100644 index 0000000..2ee50d2 --- /dev/null +++ b/data/text.py @@ -0,0 +1,31 @@ +CAT_COLORS = [ + "orange tabby", + "black", + "white", + "gray", + "tuxedo", + "calico", + "tortoiseshell", + "siamese", + "brown tabby", + "ginger", +] +CAT_SIZES = [ + "tiny", + "small", + "average sized", + "big", + "chonky", +] +CAT_PERSONALITIES = [ + "looks like trouble", + "judges you silently", + "won't stop meowing", + "seems half asleep", + "is staring at the wall", + "purrs endlessly", + "already knocked everything over", + "needs food right now", + "just wants to be somewhere else", +] +CAT_EYE_COLORS = ["green", "yellow", "blue", "orange"] diff --git a/game.py b/game.py index 69c5ae5..c32dff0 100644 --- a/game.py +++ b/game.py @@ -2,6 +2,7 @@ from data.cat import Cat from systems.ui import clear, title from systems.world import shelter import systems.ui as ui +import data.save class Game: @@ -10,6 +11,9 @@ class Game: def new_game(self): self.cat = shelter() + print("Saving...") + data.save.save(self.cat) + print("Save complete.") self.game_loop() def game_loop(self): diff --git a/systems/world.py b/systems/world.py index 64c06b0..44dba46 100644 --- a/systems/world.py +++ b/systems/world.py @@ -1,26 +1,67 @@ from data.cat import Cat import systems.ui as ui import re +import data.text +import random def check_cat_name(name): name = name.strip() if not name: return "Please choose a name:" - if len(name) > 4 or len(name) < 20: - return "Please choose a name greater than 4 charecters and less than 20:" + if len(name) < 4 or len(name) > 20: + return "Please choose a name greater than 4 characters and less than 20:" if re.search(r"[^a-zA-Z \-']", name): return "Please only use letters, spaces, hyphens and apostrophes:" return "Ok" -def shelter(): - # TODO: make - name = ui.text("Welcome to the shelter! Please choose a name for your cat:") +def generate_cat_choice(personality=None): + size = random.choice(data.text.CAT_SIZES) + color = random.choice(data.text.CAT_COLORS) + eyes = random.choice(data.text.CAT_EYE_COLORS) + personality = personality or random.choice(data.text.CAT_PERSONALITIES) + article = "An" if size[0] in "aeiou" else "A" + description = f"{article} {size} {color} kitten with {eyes} eyes who {personality}" + return description, { + "size": size, + "color": color, + "eyes": eyes, + "personality": personality, + } + + +def generate_cat_choices(n=5): + personalities = random.sample(data.text.CAT_PERSONALITIES, n) + return [generate_cat_choice(p) for p in personalities] + + +def shelter(include_welcome=True): + while True: + cat_choices = generate_cat_choices() + descriptions = [] + for desc, _ in cat_choices: + descriptions.append(desc) + descriptions.append("Reroll") + kitten_description = ui.select( + f"{"Welcome to the shelter! " if include_welcome else ""}Please choose a kitten to adopt.", + descriptions, + ) + if kitten_description != "Reroll": + break + for desc, traits in cat_choices: + if desc == kitten_description: + break + name = ui.text("Please choose a name for your kitten:") while True: check_result = check_cat_name(name) if check_result != "Ok": name = ui.text(check_result) else: break - return Cat(name) + if not ui.confirm( + f"Are you sure you want to adopt {name}, a{kitten_description[1:]}?" + ): + return shelter(include_welcome=False) + print(f"You pick up {name}, {name} is ready to leave the shelter.") + return Cat(name, traits)