# -*-coding:Latin-1 -* """personnages du jeu, joueurs ou non""" import accessvg from armes import Arme from armures import Armure class Personnage(): """personnage generique""" def __init__(self): """nouveau personnage""" #nom du personnage self.nom = "non defini" #race du personnage: self.race = "" #taille du personnage self.taille = "" #espace occupe sur la carte de combat: self.espace = (1,1) #points d'action: self.pA = 0 #condition physique: self.cP = 0 #force mentale: self.fM = 0 #peut utiliser la magie: self.magie = False #maitrise des armes, armures, sorts et compétences self.maitrise = {} #equipements self.equipement = {'arme 1': '', 'arme 2': '', 'armure': '', 'autre': []} def enregistrer(self): """enregistre le personnage dans le fichier""" accessvg.sauver(self.nom, self) print("'{}' sauvegarde dans '{}'".format(self.nom, self.__class__.__name__)) def charger(self, nom): """si le personnage existe dans la bdd, on recupere ses infos""" self.nom = nom try: tmp = accessvg.recup(self.__class__.__name__, self.nom) except: print("echec du chargement du personnage") tmp = None return tmp def nouveau(self, nom): """on créé un nouveau perso""" self.nom = nom print("### Creation de {} ###".format(self.nom)) modele = ("Saisissez les informations sur le modele suivant: \n "\ "Race;Taille;Espace occupe x,y;Points d'actions;"\ "Condition physique;Force mentale;Pratique la magie(o/n) \n") valide = "n" #on commence par les carac principales while valide != "o": chaine = raw_input(modele) self.race = chaine.split(";")[0] self.taille = chaine.split(";")[1] self.espace = (int((chaine.split(";")[2]).split(",")[0]), int((chaine.split(";")[2]).split(",")[1])) self.pA = int(chaine.split(";")[3]) self.cP = int(chaine.split(";")[4]) self.fM = int(chaine.split(";")[5]) if chaine.split(";")[6] == "o": self.magie = True else: self.magie = False print(self) valide = raw_input("Continuer et saisir l'equipement? (o/n) \n") modele = "Arme 1;Arme 2;Armure;Autre1;Autre2;...\n" valide = "n" #ensuite l'equipement lst = [] while valide != "o": chaine = raw_input(modele) arme1 = Arme().charger(chaine.split(";")[0]) self.equipement['arme 1'] = arme1 arme2 = Arme().charger(chaine.split(";")[1]) self.equipement['arme 2'] = arme2 armure = Armure().charger(chaine.split(";")[2]) self.equipement['armure'] = armure for part in chaine.split(";")[3:]: lst.append(part) self.equipement['autre'] = lst print(self.equipement) valide = raw_input("Continuer? (o/n)\n") #ensuite les maitrises def __repr__(self): """retourne une chaine decrivant le pesonnage""" chaine = ("** Nom: {} - Race: {} - Taille: {} - Espace occupe: {} - "\ "Points d'actions: {} - Condition physique: {} - "\ "Force mentale: {} - Pratique la magie: {} - Equipement: {} **\n]"\ "".format(self.nom, self.race, self.taille, self.espace, self.pA, self.cP, self.fM, self.magie, self.equipement)) return chaine def modifier(self): """Modification d'un objet enregistre""" saisie = "" while not saisie == "ok": saisie = raw_input("Effectuez vos modifications (ex: 'race=elfe')"\ "- 'ok' pour finir\n") #print(saisie.split(" ")) if saisie.split("=")[0].lower() == "nom": print("le nom ne peut être modifie\n") elif saisie.split("=")[0].lower() == "race": self.race = saisie.split("=")[1] elif saisie.split("=")[0].lower() == "taille": self.taille = saisie.split("=")[1] elif saisie.split("=")[0].lower() == "espace": self.espace = (int((saisie.split("=")[1]).split(",")[0]),int((saisie.split("=")[1]).split(",")[1])) elif saisie.split("=")[0].lower() == "pa": self.pA = int(saisie.split("=")[1]) elif saisie.split("=")[0].lower() == "cp": self.cP = int(saisie.split("=")[1]) elif saisie.split("=")[0].lower() == "fm": self.fM = saisie.split("=")[1] elif saisie.split("=")[0].lower() == "magie": if saisie.split("=")[1] == "o": self.magie = True else: self.magie = False elif saisie.split("=")[0].lower() == "equipement": if (saisie.split("=")[1]).split(":")[0].lower() == "autre": lst = self.equipement[autre] lst.append((saisie.split("=")[1]).split(":")[1]) self.equipement[autre] = lst elif "arme" in (saisie.split("=")[1]).split(":")[0].lower(): arme = Arme().charger((saisie.split("=")[1]).split(":")[1]) self.equipement[(saisie.split("=")[1]).split(":")[0]] = arme elif "armure" in (saisie.split("=")[1]).split(":")[0].lower(): armure = Armure().charger((saisie.split("=")[1]).split(":")[1]) self.equipement[(saisie.split("=")[1]).split(":")[0]] = armure else: print("erreur equipement") elif saisie == "ok": pass else: print("Mots cles: race, taille, espace(x,y), pa, cp, fm, magie(o/n), equipement(arme 1:epee)\n") if raw_input("Modifications effectuees \n 'r': remplacer l'actuel / 'c': creer {}1 \n".format(self.nom)) == "r": accessvg.supprSvg(self.__class__.__name__, self.nom) print(accessvg.sauver("{}".format(self.nom), self)) if __name__ == "__main__": # si lancement direct: #on ouvre le dictionnaire actuellement charge: while True: saisie = "" print(accessvg.afficheSvg("Personnage")) saisie = raw_input("\n 'd- xxxx' -> supprimer xxxx / 'n- xxxx'"\ "-> creer xxxx / 'm- xxxx' -> modifier xxxx / 'q' -> quitter\n") try: if saisie[:2] == "d-": print(accessvg.supprSvg("Personnage", saisie[3:])) elif saisie[:2] == "n-": p = Personnage() p.nouveau("{}".format(saisie[3:])) p.enregistrer() #print(accessvg.sauver("{}".format(saisie[3:]), p)) elif saisie[:2] == "m-": #p = accessvg.recup(saisie[3:]) p = Personnage() p.charger("{}".format(saisie[3:])) print(p) saisie = "" print("\n Objet 'p' recupere.") p.modifier() elif saisie[0] == "q": break except IOError: print("erreur de saisie") pass