This commit is contained in:
2026-04-11 17:13:54 -04:00
parent 18a0fd249c
commit f38fd535fb
6 changed files with 111 additions and 11 deletions

View File

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

View File

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

19
data/save.py Normal file
View File

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

31
data/text.py Normal file
View File

@@ -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"]

View File

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

View File

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