A lot
This commit is contained in:
9
.vscode/settings.json
vendored
9
.vscode/settings.json
vendored
@@ -1,8 +1,9 @@
|
|||||||
{
|
{
|
||||||
"files.exclude": {
|
"files.exclude": {
|
||||||
".gitignore": false,
|
".gitignore": true,
|
||||||
"LICENSE": false,
|
"LICENSE": true,
|
||||||
"README.md": false,
|
"README.md": true,
|
||||||
".vscode/": false
|
".vscode/": true,
|
||||||
|
".venv/": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
class Cat:
|
class Cat:
|
||||||
def __init__(self, name):
|
def __init__(self, name, traits):
|
||||||
self.name = name
|
self.name = name
|
||||||
|
self.traits = traits
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
return vars(self)
|
||||||
|
|||||||
19
data/save.py
Normal file
19
data/save.py
Normal 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
31
data/text.py
Normal 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"]
|
||||||
4
game.py
4
game.py
@@ -2,6 +2,7 @@ from data.cat import Cat
|
|||||||
from systems.ui import clear, title
|
from systems.ui import clear, title
|
||||||
from systems.world import shelter
|
from systems.world import shelter
|
||||||
import systems.ui as ui
|
import systems.ui as ui
|
||||||
|
import data.save
|
||||||
|
|
||||||
|
|
||||||
class Game:
|
class Game:
|
||||||
@@ -10,6 +11,9 @@ class Game:
|
|||||||
|
|
||||||
def new_game(self):
|
def new_game(self):
|
||||||
self.cat = shelter()
|
self.cat = shelter()
|
||||||
|
print("Saving...")
|
||||||
|
data.save.save(self.cat)
|
||||||
|
print("Save complete.")
|
||||||
self.game_loop()
|
self.game_loop()
|
||||||
|
|
||||||
def game_loop(self):
|
def game_loop(self):
|
||||||
|
|||||||
@@ -1,26 +1,67 @@
|
|||||||
from data.cat import Cat
|
from data.cat import Cat
|
||||||
import systems.ui as ui
|
import systems.ui as ui
|
||||||
import re
|
import re
|
||||||
|
import data.text
|
||||||
|
import random
|
||||||
|
|
||||||
|
|
||||||
def check_cat_name(name):
|
def check_cat_name(name):
|
||||||
name = name.strip()
|
name = name.strip()
|
||||||
if not name:
|
if not name:
|
||||||
return "Please choose a name:"
|
return "Please choose a name:"
|
||||||
if len(name) > 4 or len(name) < 20:
|
if len(name) < 4 or len(name) > 20:
|
||||||
return "Please choose a name greater than 4 charecters and less than 20:"
|
return "Please choose a name greater than 4 characters and less than 20:"
|
||||||
if re.search(r"[^a-zA-Z \-']", name):
|
if re.search(r"[^a-zA-Z \-']", name):
|
||||||
return "Please only use letters, spaces, hyphens and apostrophes:"
|
return "Please only use letters, spaces, hyphens and apostrophes:"
|
||||||
return "Ok"
|
return "Ok"
|
||||||
|
|
||||||
|
|
||||||
def shelter():
|
def generate_cat_choice(personality=None):
|
||||||
# TODO: make
|
size = random.choice(data.text.CAT_SIZES)
|
||||||
name = ui.text("Welcome to the shelter! Please choose a name for your cat:")
|
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:
|
while True:
|
||||||
check_result = check_cat_name(name)
|
check_result = check_cat_name(name)
|
||||||
if check_result != "Ok":
|
if check_result != "Ok":
|
||||||
name = ui.text(check_result)
|
name = ui.text(check_result)
|
||||||
else:
|
else:
|
||||||
break
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user