personnage.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. # -*-coding:Latin-1 -*
  2. """personnages du jeu, joueurs ou non"""
  3. import accessvg
  4. from armes import Arme
  5. from armures import Armure
  6. class Personnage():
  7. """personnage generique"""
  8. def __init__(self):
  9. """nouveau personnage"""
  10. #nom du personnage
  11. self.nom = "non defini"
  12. #race du personnage:
  13. self.race = ""
  14. #taille du personnage
  15. self.taille = ""
  16. #espace occupe sur la carte de combat:
  17. self.espace = (1,1)
  18. #points d'action:
  19. self.pA = 0
  20. #condition physique:
  21. self.cP = 0
  22. #force mentale:
  23. self.fM = 0
  24. #peut utiliser la magie:
  25. self.magie = False
  26. #maitrise des armes, armures, sorts et compétences
  27. self.maitrise = {}
  28. #equipements
  29. self.equipement = {'arme 1': '', 'arme 2': '', 'armure': '', 'autre': []}
  30. def enregistrer(self):
  31. """enregistre le personnage dans le fichier"""
  32. accessvg.sauver(self.nom, self)
  33. print("'{}' sauvegarde dans '{}'".format(self.nom, self.__class__.__name__))
  34. def charger(self, nom):
  35. """si le personnage existe dans la bdd, on recupere ses infos"""
  36. self.nom = nom
  37. try:
  38. tmp = accessvg.recup(self.__class__.__name__, self.nom)
  39. except:
  40. print("echec du chargement du personnage")
  41. tmp = None
  42. return tmp
  43. def nouveau(self, nom):
  44. """on créé un nouveau perso"""
  45. self.nom = nom
  46. print("### Creation de {} ###".format(self.nom))
  47. modele = ("Saisissez les informations sur le modele suivant: \n "\
  48. "Race;Taille;Espace occupe x,y;Points d'actions;"\
  49. "Condition physique;Force mentale;Pratique la magie(o/n) \n")
  50. valide = "n"
  51. #on commence par les carac principales
  52. while valide != "o":
  53. chaine = raw_input(modele)
  54. self.race = chaine.split(";")[0]
  55. self.taille = chaine.split(";")[1]
  56. self.espace = (int((chaine.split(";")[2]).split(",")[0]), int((chaine.split(";")[2]).split(",")[1]))
  57. self.pA = int(chaine.split(";")[3])
  58. self.cP = int(chaine.split(";")[4])
  59. self.fM = int(chaine.split(";")[5])
  60. if chaine.split(";")[6] == "o":
  61. self.magie = True
  62. else:
  63. self.magie = False
  64. print(self)
  65. valide = raw_input("Continuer et saisir l'equipement? (o/n) \n")
  66. modele = "Arme 1;Arme 2;Armure;Autre1;Autre2;...\n"
  67. valide = "n"
  68. #ensuite l'equipement
  69. lst = []
  70. while valide != "o":
  71. chaine = raw_input(modele)
  72. arme1 = Arme().charger(chaine.split(";")[0])
  73. self.equipement['arme 1'] = arme1
  74. arme2 = Arme().charger(chaine.split(";")[1])
  75. self.equipement['arme 2'] = arme2
  76. armure = Armure().charger(chaine.split(";")[2])
  77. self.equipement['armure'] = armure
  78. for part in chaine.split(";")[3:]:
  79. lst.append(part)
  80. self.equipement['autre'] = lst
  81. print(self.equipement)
  82. valide = raw_input("Continuer? (o/n)\n")
  83. #ensuite les maitrises
  84. def __repr__(self):
  85. """retourne une chaine decrivant le pesonnage"""
  86. chaine = ("** Nom: {} - Race: {} - Taille: {} - Espace occupe: {} - "\
  87. "Points d'actions: {} - Condition physique: {} - "\
  88. "Force mentale: {} - Pratique la magie: {} - Equipement: {} **\n]"\
  89. "".format(self.nom, self.race, self.taille, self.espace,
  90. self.pA, self.cP, self.fM, self.magie, self.equipement))
  91. return chaine
  92. def modifier(self):
  93. """Modification d'un objet enregistre"""
  94. saisie = ""
  95. while not saisie == "ok":
  96. saisie = raw_input("Effectuez vos modifications (ex: 'race=elfe')"\
  97. "- 'ok' pour finir\n")
  98. #print(saisie.split(" "))
  99. if saisie.split("=")[0].lower() == "nom":
  100. print("le nom ne peut être modifie\n")
  101. elif saisie.split("=")[0].lower() == "race":
  102. self.race = saisie.split("=")[1]
  103. elif saisie.split("=")[0].lower() == "taille":
  104. self.taille = saisie.split("=")[1]
  105. elif saisie.split("=")[0].lower() == "espace":
  106. self.espace = (int((saisie.split("=")[1]).split(",")[0]),int((saisie.split("=")[1]).split(",")[1]))
  107. elif saisie.split("=")[0].lower() == "pa":
  108. self.pA = int(saisie.split("=")[1])
  109. elif saisie.split("=")[0].lower() == "cp":
  110. self.cP = int(saisie.split("=")[1])
  111. elif saisie.split("=")[0].lower() == "fm":
  112. self.fM = saisie.split("=")[1]
  113. elif saisie.split("=")[0].lower() == "magie":
  114. if saisie.split("=")[1] == "o":
  115. self.magie = True
  116. else:
  117. self.magie = False
  118. elif saisie.split("=")[0].lower() == "equipement":
  119. if (saisie.split("=")[1]).split(":")[0].lower() == "autre":
  120. lst = self.equipement[autre]
  121. lst.append((saisie.split("=")[1]).split(":")[1])
  122. self.equipement[autre] = lst
  123. elif "arme" in (saisie.split("=")[1]).split(":")[0].lower():
  124. arme = Arme().charger((saisie.split("=")[1]).split(":")[1])
  125. self.equipement[(saisie.split("=")[1]).split(":")[0]] = arme
  126. elif "armure" in (saisie.split("=")[1]).split(":")[0].lower():
  127. armure = Armure().charger((saisie.split("=")[1]).split(":")[1])
  128. self.equipement[(saisie.split("=")[1]).split(":")[0]] = armure
  129. else:
  130. print("erreur equipement")
  131. elif saisie == "ok":
  132. pass
  133. else:
  134. print("Mots cles: race, taille, espace(x,y), pa, cp, fm, magie(o/n), equipement(arme 1:epee)\n")
  135. if raw_input("Modifications effectuees \n 'r': remplacer l'actuel / 'c': creer {}1 \n".format(self.nom)) == "r":
  136. accessvg.supprSvg(self.__class__.__name__, self.nom)
  137. print(accessvg.sauver("{}".format(self.nom), self))
  138. if __name__ == "__main__":
  139. # si lancement direct:
  140. #on ouvre le dictionnaire actuellement charge:
  141. while True:
  142. saisie = ""
  143. print(accessvg.afficheSvg("Personnage"))
  144. saisie = raw_input("\n 'd- xxxx' -> supprimer xxxx / 'n- xxxx'"\
  145. "-> creer xxxx / 'm- xxxx' -> modifier xxxx / 'q' -> quitter\n")
  146. try:
  147. if saisie[:2] == "d-":
  148. print(accessvg.supprSvg("Personnage", saisie[3:]))
  149. elif saisie[:2] == "n-":
  150. p = Personnage()
  151. p.nouveau("{}".format(saisie[3:]))
  152. p.enregistrer()
  153. #print(accessvg.sauver("{}".format(saisie[3:]), p))
  154. elif saisie[:2] == "m-":
  155. #p = accessvg.recup(saisie[3:])
  156. p = Personnage()
  157. p.charger("{}".format(saisie[3:]))
  158. print(p)
  159. saisie = ""
  160. print("\n Objet 'p' recupere.")
  161. p.modifier()
  162. elif saisie[0] == "q":
  163. break
  164. except IOError:
  165. print("erreur de saisie")
  166. pass