regles.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. ##from __future__ import division
  4. ##import os
  5. def attributOrdreJeu():
  6. """renvoie l'attribut utilise pour definir l'ordre de jeu, None s'il n'existe pas"""
  7. return "init"
  8. def sensTriOrdreJeu():
  9. """renvoie le type de tri pour l'ordre de jeu: 0 = croissant / 1 = decroissant"""
  10. return 1
  11. def ordreAttributs():
  12. """renvoie la liste des attributs avec leur position relative (pour l'affichage en combat)"""
  13. lst = ["init", "PV", "TotalPV", "CA", "BBA", "Ref", "Vig", "Vol", "F", "D", "C", "I", "S", "Ch", "B_init"]
  14. return lst
  15. def ordreAttributsFichePerso():
  16. """renvoie la liste des attributs avec leur position relative
  17. (pour l'affichage sur la fiche de perso)
  18. les chaines vides corresponsent a des espacements"""
  19. lst = ["Classe", "Niv", "Exp", "", \
  20. "TotalPV", "CA", "BBA", "B_init", "", \
  21. "F", "D", "C", "I", "S", "Ch", "", \
  22. "Ref", "Vig", "Vol"]
  23. return lst
  24. def listeAttributs():
  25. """renvoie un dictionnaire vide des attributs d'une creature ou joueur"""
  26. dico = {}
  27. ctrl = listeControle()
  28. for attr in ctrl:
  29. dico[attr] = ctrl[attr].defaut
  30. return dico
  31. def listeControle():
  32. """retourne la liste de controle des attributs de la creature ou joueur"""
  33. dico = {\
  34. "F": Attribut("Force", "F", "entier", 0, None, 10, True, False, False), \
  35. "D": Attribut("Dexterité", "D", "entier", 0, None, 10, True, False, False), \
  36. "C": Attribut("Constitution", "C", "entier", 0, None, 10, True, False, False), \
  37. "I": Attribut("Intelligence", "I", "entier", 0, None, 10, True, False, False), \
  38. "S": Attribut("Sagesse", "S", "entier", 0, None, 10, True, False, False), \
  39. "Ch": Attribut("Charisme", "Ch", "entier", 0, None, 10, True, False, False), \
  40. "Ref": Attribut("Réflexes", "Ref", "entier", None, None, 0, True, False, False), \
  41. "Vig": Attribut("Vigueur", "Vig", "entier", None, None, 0, True, False, False), \
  42. "Vol": Attribut("Volonté", "Vol", "entier", None, None, 0, True, False, False), \
  43. "TotalPV": Attribut("Points de vie\ntotaux", "TotalPV", "entier", None, None, 0, True, False, False), \
  44. "PV": Attribut("Points de vie", "PV", "entier", None, None, 0, True, True, False), \
  45. "CA": Attribut("Capacité d'armure", "CA", "entier", 0, None, 10, True, False, False), \
  46. "BBA": Attribut("Bonus de base\nà l'attaque", "BBA", "entier", 0, None, 0, True, False, False), \
  47. "B_init": Attribut("Bonus d'initiative", "B_init", "entier", None, None, 0, True, False, False), \
  48. "init": Attribut("Initiative", "B_init", "entier", None, None, 10, True, True, False), \
  49. "Classe": Attribut("Classe", "Classe", "texte", None, None, "", False, False, False), \
  50. "Niv": Attribut("Niveau", "Niv", "entier", 0, None, 0, True, False, False), \
  51. "Exp": Attribut("Expérience", "Exp", "entier", 0, None, 0, False, False, True)
  52. }
  53. return dico
  54. def attribut(nomCourt):
  55. """renvoie l'attribut demande"""
  56. dico = listeControle()
  57. if nomCourt in dico:
  58. retour = dico[nomCourt]
  59. else:
  60. retour = None
  61. return retour
  62. def ordreAttributsAttaques():
  63. """renvoie la liste des attributs avec leur position relative"""
  64. lst = ["BA", "Dgts", "Crit.", "DD", "svg"]
  65. return lst
  66. def listeAttributsAttaques():
  67. """renvoie un dictionnaire vide des attributs d'une creature ou joueur"""
  68. dico = {}
  69. ctrl = listeControleAttaques()
  70. for attr in ctrl:
  71. dico[attr] = ctrl[attr].defaut
  72. return dico
  73. def listeControleAttaques():
  74. """retourne la liste caracteristiques des attaques de la creature / joueur"""
  75. dico = {\
  76. "BA": Attribut("Bonus d'attaque", "BA", "entier", None, None, 0, True, False, False), \
  77. "Dgts": Attribut("Degats", "Dgts", "texte", None, None, "", True, False, False), \
  78. "Crit.": Attribut("Critique", "Crit.", "texte", None, None, "20/x2", True, False, False), \
  79. "DD": Attribut("DD", "DD", "entier", None, None, 10, True, False, False), \
  80. "svg": Attribut("Type de sauvegarde", "svg", "texte", None, None, "", True, False, False), \
  81. }
  82. return dico
  83. def attributAttaque(nomCourt):
  84. """renvoie l'attribut d'attaque demande"""
  85. dico = listeControleAttaques()
  86. if nomCourt in dico:
  87. retour = dico[nomCourt]
  88. else:
  89. retour = None
  90. return retour
  91. class Attribut():
  92. """attribut des pions et personnages"""
  93. def __init__(self, nom, nomCourt, typ, mini, maxi, defaut, afficherCombat, combatSeulement, joueursSeulement):
  94. """initialisation de l'attribut"""
  95. self.nom = nom
  96. self.nomCourt = nomCourt
  97. self.typ = typ
  98. self.mini = mini #tests sur les valeurs pour les nombres, sur les longueurs pour les textes
  99. self.maxi = maxi
  100. self.defaut = defaut
  101. self.afficherCombat = afficherCombat #afficher dans les tables de combat
  102. self.combatSeulement = combatSeulement #afficher dans les tables de combat seulement
  103. self.joueursSeulement = joueursSeulement #n'afficher que chez les joueurs
  104. self.valeur = defaut
  105. def controler(self, val):
  106. """renvoie la la valeur entrée si celle ci est valide pour cet attribut, None sinon"""
  107. if self.typ == "entier":
  108. try:
  109. retour = long(val)
  110. except:
  111. retour = None
  112. if retour != None:
  113. if self.mini != None:
  114. if not retour >= self.mini:
  115. retour = None
  116. if self.maxi != None:
  117. if not retour <= self.maxi:
  118. retour = None
  119. elif self.typ == "booleen":
  120. try:
  121. retour = bool(val)
  122. except:
  123. retour = None
  124. else:
  125. try:
  126. retour = str(val)
  127. except:
  128. retour = None
  129. if retour != None:
  130. if self.mini != None:
  131. if not len(retour) >= self.mini:
  132. retour = None
  133. if self.maxi != None:
  134. if not len(retour) <= self.maxi:
  135. retour = None
  136. return retour
  137. #### autres donnees liees aux regles
  138. def valeurDefaut(nom):
  139. """renvoie la valeur par defaut demandee"""
  140. retour = None
  141. dico = {"depMarche": 9, "depNage": 6, "depEscalade": 3, "depVol": 0, "saut": 6}
  142. if nom in dico:
  143. retour = dico[nom]
  144. return retour
  145. def nomMonnaie():
  146. """retourne la monnaie par defaut utilisee dans le jeu"""
  147. return "po"
  148. if __name__ == "__main__":
  149. val = "3"
  150. dico = listeControleAttaques()
  151. print(dico["svg"].controler(val))