regles.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  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"""
  13. lst = ["init", "PV", "TotalPV", "CA", "BBA", "Ref", "Vig", "Vol", "F", "D", "C", "I", "S", "Ch", "B_init", "Special"]
  14. return lst
  15. def listeAttributs():
  16. """renvoie un dictionnaire vide des attributs d'une creature ou joueur"""
  17. dico = {}
  18. ctrl = listeControle()
  19. for attr in ctrl:
  20. dico[attr] = ctrl[attr].defaut
  21. return dico
  22. def listeControle():
  23. """retourne la liste de controle des attributs de la creature ou joueur"""
  24. dico = {\
  25. "F": Attribut("Force", "F", "entier", 0, None, 10, True, False, False), \
  26. "D": Attribut("Dexterite", "D", "entier", 0, None, 10, True, False, False), \
  27. "C": Attribut("Constitution", "C", "entier", 0, None, 10, True, False, False), \
  28. "I": Attribut("Intelligence", "I", "entier", 0, None, 10, True, False, False), \
  29. "S": Attribut("Sagesse", "S", "entier", 0, None, 10, True, False, False), \
  30. "Ch": Attribut("Charisme", "Ch", "entier", 0, None, 10, True, False, False), \
  31. "Ref": Attribut("Reflexes", "Ref", "entier", None, None, 0, True, False, False), \
  32. "Vig": Attribut("Vigueur", "Vig", "entier", None, None, 0, True, False, False), \
  33. "Vol": Attribut("Volonte", "Vol", "entier", None, None, 0, True, False, False), \
  34. "TotalPV": Attribut("Points de vie totaux", "TotalPV", "entier", None, None, 0, True, False, False), \
  35. "PV": Attribut("Points de vie", "PV", "entier", None, None, 0, True, True, False), \
  36. "CA": Attribut("Capacite d'armure", "CA", "entier", 0, None, 10, True, False, False), \
  37. "B_init": Attribut("Bonus d'initiative", "B_init", "entier", None, None, 0, True, False, False), \
  38. "init": Attribut("Initiative", "B_init", "entier", None, None, 10, True, True, False), \
  39. "BBA": Attribut("Bonus de base a l'attaque", "BBA", "entier", 0, None, 0, True, False, False), \
  40. "Special": Attribut("Special", "Special", "texte", 0, None, "", True, False, False)
  41. }
  42. return dico
  43. def attribut(nomCourt):
  44. """renvoie l'attribut demande"""
  45. dico = listeControle()
  46. if nomCourt in dico:
  47. retour = dico[nomCourt]
  48. else:
  49. retour = None
  50. return retour
  51. def ordreAttributsAttaques():
  52. """renvoie la liste des attributs avec leur position relative"""
  53. lst = ["BA", "Dgts", "Crit.", "PorteeS", "DD", "svg", "Special"]
  54. return lst
  55. def listeAttributsAttaques():
  56. """renvoie un dictionnaire vide des attributs d'une creature ou joueur"""
  57. dico = {}
  58. ctrl = listeControleAttaques()
  59. for attr in ctrl:
  60. dico[attr] = ctrl[attr].defaut
  61. return dico
  62. def listeControleAttaques():
  63. """retourne la liste caracteristiques des attaques de la creature / joueur"""
  64. dico = {\
  65. "BA": Attribut("Bonus d'attaque", "BA", "entier", None, None, 0, True, False, False), \
  66. "Dgts": Attribut("Degats", "Dgts", "texte", None, None, "", True, False, False), \
  67. "Crit.": Attribut("Critique", "Crit.", "texte", None, None, "20/x2", True, False, False), \
  68. "PorteeS": Attribut("Portee", "PorteeS", "texte", 0, None, "", True, False, False), \
  69. "DD": Attribut("DD", "DD", "entier", None, None, 10, True, False, False), \
  70. "svg": Attribut("Type de sauvegarde", "svg", "texte", None, None, "", True, False, False), \
  71. "Special": Attribut("Special", "special", "texte", None, None, "", True, False, False)
  72. }
  73. return dico
  74. def attributAttaque(nomCourt):
  75. """renvoie l'attribut d'attaque demande"""
  76. dico = listeControleAttaques()
  77. if nomCourt in dico:
  78. retour = dico[nomCourt]
  79. else:
  80. retour = None
  81. return retour
  82. def valeurDefaut(self, nom):
  83. """renvoie la valeur par defaut demandee"""
  84. dico = {"depMarche": 9, "depNage": 6, "depEscalade" = 3, "depVol" = 0, "saut" = 6}
  85. class Attribut():
  86. """attribut des pions et personnages"""
  87. def __init__(self, nom, nomCourt, typ, mini, maxi, defaut, afficherCombat, combatSeulement, joueursSeulement):
  88. """initialisation de l'attribut"""
  89. self.nom = nom
  90. self.nomCourt = nomCourt
  91. self.typ = typ
  92. self.mini = mini #tests sur les valeurs pour les nombres, sur les longueurs pour les textes
  93. self.maxi = maxi
  94. self.defaut = defaut
  95. self.afficherCombat = afficherCombat #afficher dans les tables de combat
  96. self.combatSeulement = combatSeulement #afficher dans les tables de combat seulement
  97. self.joueursSeulement = joueursSeulement #n'afficher que chez les joueurs
  98. self.valeur = defaut
  99. def controler(self, val):
  100. """renvoie la la valeur entrée si celle ci est valide pour cet attribut, None sinon"""
  101. if self.typ == "entier":
  102. try:
  103. retour = long(val)
  104. except:
  105. retour = None
  106. if retour != None:
  107. if self.mini != None:
  108. if not retour >= self.mini:
  109. retour = None
  110. if self.maxi != None:
  111. if not retour <= self.maxi:
  112. retour = None
  113. elif self.typ == "booleen":
  114. try:
  115. retour = bool(val)
  116. except:
  117. retour = None
  118. else:
  119. try:
  120. retour = str(val)
  121. except:
  122. retour = None
  123. if retour != None:
  124. if self.mini != None:
  125. if not len(retour) >= self.mini:
  126. retour = None
  127. if self.maxi != None:
  128. if not len(retour) <= self.maxi:
  129. retour = None
  130. return retour
  131. if __name__ == "__main__":
  132. val = "3"
  133. dico = listeControleAttaques()
  134. print(dico["svg"].controler(val))