Files
Untitled-Cat-Game/untitled/generation.py
2026-06-24 17:13:16 -04:00

81 lines
2.0 KiB
Python

import random
from collections import defaultdict
from untitled import PACKAGE_ROOT, content, rules
def generate_trait_sentence(traits):
article = "An" if traits["size"][0] in "aeiou" else "A"
description = f'{article} {traits["size"]} {traits["color"]} kitten with {traits["eyes"]} eyes who {traits["personality"]}'
return description
def generate_cat_choice(personality=None):
size = random.choice(content.CAT_SIZES)
color = random.choice(content.CAT_COLORS)
eyes = random.choice(content.CAT_EYE_COLORS)
personality = personality or random.choice(content.CAT_PERSONALITIES)
traits = {
"size": size,
"color": color,
"eyes": eyes,
"personality": personality,
}
return generate_trait_sentence(traits), traits
def generate_cat_choices(n=5):
personalities = random.sample(content.CAT_PERSONALITIES, n)
return [generate_cat_choice(p) for p in personalities]
# NAME GEN MODEL
def _pad_names_for_model(names):
new_names = []
for name in names:
new_names.append(f"<<{name}>")
return new_names
def _build_model(words):
model = defaultdict(list)
for word in words:
for pos in range(len(word) - 2):
model[word[pos] + word[pos + 1]].append(word[pos + 2])
return model
def _make_name(model):
result = "<<"
while True:
window = result[-2:]
nxt = random.choice(model[window])
if nxt == ">":
break
result += nxt
return result.removeprefix("<<")
def generate_name():
while True:
name = _make_name(_model)
if (
any(c in "aeiou" for c in name.lower())
and len(name) <= 9
and rules.validate_cat_name(name) is None
):
return name.capitalize()
def _load_raw_names():
names = []
with open(PACKAGE_ROOT / "assets" / "cat_names.txt") as f:
for name in f.readlines():
names.append(name.strip())
return names
_model = _build_model(_pad_names_for_model(_load_raw_names()))