add load and save functions to classes

move files
update character creater to allowing to stack  classes
This commit is contained in:
2024-04-04 03:35:44 +02:00
parent 4616eda30e
commit d67e7a44cd
7 changed files with 211 additions and 112 deletions
+107
View File
@@ -0,0 +1,107 @@
from simple_term_menu import TerminalMenu
from tabulate import tabulate
import logging
import sys, re
LOGGING = logging.getLogger(__name__)
class CharacterCreater:
@classmethod
def make_dict_list_into_table(cls, dict_list:dict, change_by_key=None, ignore_keys:list[str]=[]):
dict_keys = list(dict_list.keys())
keys = list(dict_list[dict_keys[0]].keys())
table = [dict_keys]
for key in keys:
row = []
if not key in ignore_keys:
row.append(key)
for element in dict_list.values():
if change_by_key != None:
element[key] = change_by_key(key, element)
row.append(element[key])
table.append(row)
return tabulate(table, headers='firstrow', tablefmt='grid')
@classmethod
def change_character_key(cls, key, element):
if key == "fixed_type":
if not element[key]:
return None
return element[key]
@classmethod
def select_a_species(cls, player_config:dict, block_by_fixed_type:bool=False):
print(CharacterCreater.make_dict_list_into_table(player_config["species"], change_by_key=lambda key, element: CharacterCreater.change_character_key(key, element)))
if not block_by_fixed_type:
select_species = list(player_config["species"].keys())
else:
select_species = list(player_config["species"].keys())[:-1]
m = TerminalMenu(select_species, title='Select a Species')
selection = m.show()
characte_species = player_config["species"][select_species[selection]]
characte_species["name"] = select_species[selection]
if not characte_species["fixed_type"] and not block_by_fixed_type:
types = [ x["name"] for x in player_config["types"] ]
m = TerminalMenu(types, title='Select a Type')
selection = m.show()
characte_type = (types[selection])
else:
characte_type = characte_species["fixed_type"]
if characte_species["combineble"]:
combineble_species = True
else:
combineble_species = False
return {
"species": characte_species,
"type": characte_type,
"combineble": combineble_species
}
@classmethod
def create_character(cls, player_config:dict, message:str):
print(message)
while True:
try:
characte_name = input("Enter Character Name: ")
if re.match("[a-zA-Z]", characte_name):
break
except KeyboardInterrupt as e:
LOGGING.debug(e)
sys.exit(1)
characte_species = CharacterCreater.select_a_species(player_config)
if not characte_species["combineble"]:
combineble_species = False
else:
# TODO: Remove all combineble Classes
del player_config["species"][characte_species["species"]["name"]]
player_config["species"]["Current Selected"] = characte_species["species"]
combineble_species = CharacterCreater.select_a_species(player_config, block_by_fixed_type=True)["species"]
return CharacterCreater.cleanup({
"name": characte_name,
"species": characte_species,
"type": characte_species["type"],
"combineble_species": combineble_species
})
@classmethod
def cleanup(cls, player_config:dict):
if player_config["species"]["species"]:
player_config["species"] = player_config["species"]["species"]
if player_config["combineble_species"]:
del player_config["combineble_species"]["combineble"]
del player_config["combineble_species"]["fixed_type"]
return player_config
+26
View File
@@ -0,0 +1,26 @@
import logging
LOGGING = logging.getLogger(__name__)
class Player:
def __init__(self, name:str, type:dict, species:dict, combineble_species:dict):
self.name = name
self.type = type
self.species = species
self.combineble_species = combineble_species
self.inventory = []
self.inventory_size = species["inventory_size"]
def get_inventory(self):
return self.inventory
def get_species_name(self):
return self.species['name']
def get_name(self):
return self.name
def attack(self):
pass
def __str__(self):
return f"{self.__class__.__name__} | Name: {self.name} - {self.type}\nSpecies: {self.species}\nInventory: {self.inventory}\nCombineble Species: {self.combineble_species}"