Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python: oû est le problême?

un RPG qui devrait marcher.

Sujet résolu
    16 décembre 2006 à 23:07:18

    Je fesait un petit RPG pour m'entrénait au python, je sait que j'ai beaucoups défini dans tous les sens des fonctions qui s'entre apelle.... je donne toute la source desfois que ça vous intéresse, et l'erreur parrait sur une ligne ou je voix pas de difficulté... je qute commenté le message d'érreur sur la ligne en question....

    1. #! /usr/bin/python
    2. #! -*- coding: utf-8 -*-
    3. # Rôle Playing Game en terminal.
    4. # une idee originale de Narbonne Christophe
    5. # 0.0.3.A
    6. ###############################
    7. ##                          
    8. ##    Import de librairies
    9. ##                          
    10. ###############################
    11. from random import random
    12. from math import *
    13. ###############################
    14. ##
    15. ##  Définition de la commande
    16. ##
    17. ##  De Nettoiement de terminal
    18. ##
    19. ###############################
    20. import os
    21. import sys
    22. osclient=sys.platform
    23. if osclient == "win32": clear="cls"
    24. if osclient[0] == "l" and osclient[1] == "i" and osclient[2] == "n": clear="clear"
    25. def clearterm():
    26.      os.system(clear)
    27. def readtime(t=0):
    28.      if osclient == "win32":
    29.           os.system("PAUSE")
    30.           if t==0:clearterm()
    31.      elif osclient[0] == "l" and osclient[1] == "i" and osclient[2] == "n":
    32.           print "appuyez entrée pour continuer"
    33.           os.system("read")
    34.           if t==0:clearterm()
    35. ###############################
    36. ###############################
    37. ###############################
    38. ######                          
    39. ######  Definition de fonctions
    40. ######       et de classes
    41. ######         Du R.P.G          
    42. ######                          
    43. ###############################
    44. ###############################
    45. ###############################
    46. ###############################
    47. ##                          
    48. ##  Definition de Classes
    49. ##           R.P.G          
    50. ##                          
    51. ###############################
    52. class unite:
    53. ## I: Utilitaire
    54. ##      I-1 Constructeur
    55. ##      I-2 Duplicateur: unite_cible.newunit(unite_source)
    56. ##      I-3 Identification precise: unite_a_identifier.identity()
    57. ##      I-4 Identification succinte: unite_a_identifier.showstat()
    58. ## II: RPG
    59. ##      II-1: Combat
    60. ##           II-1-a controle d'etat des unite: unite.checkup()
    61. ##           II-1-b calcul d'une attaque: attaquant.useabity(defenceur)
    62. ##      II-2: Item
    63. ##           II-2-a ajouter un item a l'inventaire en fin de combat: Joueur.addinv(mechant)
    64. ##           II-2-b Incremente une a une toute les donnees de l'item a celle du Joueur:Joueur.useitem(item)
    65.      def __init__(self ,nom ,force ,taux ,pv ,ability ,pm ,xp ,lvl,item):
    66.           ## definition de la fonction constructrice
    67.           ## permest de definir toute les donnees de l'unite en donnans une succession de valeur entre les parenthese
    68.           """constructeur: reclame Nom, Force, Taux de reussite des coups, PV,//
    69.          une liste de capacitee [nom,force, taux, magie,niveau, nom, force....], nombre de poits de magie, les points d'experience, XP, level, item type"""
    70.           self.nom=nom
    71.           self.force=force
    72.           self.taux=taux
    73.           self.pv=pv
    74.           self.pv_=pv
    75.           self.pm=pm
    76.           self.pm_=pm    #les variable avec "_" a la fin sont les limites superieures (pour points de vie et point de magie)
    77.           self.xp=xp
    78.           self.xp_=xp    # dans le cas des xp, xp_ c'est les xp qui servent a determiner le niveau et xp sont enleve pour payer des ameliorations de capacites ou de nouvelles capacites
    79.           self.lvl=lvl
    80.           self.dead=0
    81.           self.ability=ability
    82.           self.inventaire=[]  #liste des items de l'inventaire
    83.           self.item=item      #dans le cas d'un mechant, item qu'il est suceptible de donne
    84.           self.wins=0
    85.           self.fuite=0
    86.           self.money=0
    87.      def newunit(self, new):
    88.      ## New unit sert a copier une unite car si on met en egalite 2 objet, la modification de l'un modifiera l'autre
    89.      ## Sert a pouvoir massacrer une unite en gardant l'objet type en memoire
    90.           """l'unite en argument devien pâle copie de celle a laquelle sapplique la methode"""
    91.           new.item, new.nom, new.force, new.taux, new.pv, new.pv_, new.pm, new.pm_, new.xp, new.xp_, new.lvl, new.ability, new.dead = self.item, self.nom, self.force, self.taux, self.pv_, self.pv_, self.pm_, self.pm_, self.xp_, self.xp_, self.lvl, self.ability, self.dead
    92.      def identity(self):
    93.      ## Ientity est un showstat plus detaille et plus mis en page (prenant donc plus de place dans le terminal)
    94.           """ Carte d'identite de l'unite """
    95.           print """
    96.          Statistiques detaillees
    97.          nom:%s                     taux:%s
    98.          level:%s                   force:%s
    99.          vies:%s/%s                    magie:%s/%s
    100.          item au deces:%s           experience:%s/%s """ % (self.nom, self.taux, self.lvl, self.force, self.pv, self.pv_, self.pm, self.pm_, self.item, self.xp, self.xp_)
    101.           readtime()
    102.      def showstat(self):
    103.      ## Show stats: (utilise entre chaque coups au combat)
    104.      ## Cette fonction montre sur le terminal les principales stat de l'unite
    105.           """affiche les stats de l'unite"""
    106.           print "STATS DE %s \n force: %s   vie: %s/%s   magie: %s/%s   xp: %s/%s   level: %s   " % (self.nom.upper(), self.force, self.pv, self.pv_, self.pm, self.pm_, self.xp, self.xp_, self.lvl)
    107.      def checkup(self):
    108.      ## Checkup permet d'augmenter le niveau de l'unitee controlee
    109.      ## Utilisee entre chaque coups pour upgrader ou verifier l'aspect mort de l'unite
    110.           """contrôle le niveau et l'etat vivant de l'unite"""
    111.           if sqrt(self.xp_)>self.lvl: # augmentation des stats de l'unite
    112.                print "%s gagne un niveau: il gagne: %s mana, %s force, %s points de vie, monte son taux a %s" % (self.nom, int(exp(self.lvl)/2), self.lvl*2, self.lvl**2, sqrt(self.taux))
    113.                readtime(5)
    114.                self.lvl+=1
    115.                self.force+=self.lvl*2
    116.                self.pv_+=(self.lvl)**2
    117.                self.pv+=(self.lvl)**2
    118.                self.pm=int(self.pm_+(self.lvl)**2)
    119.                self.pm_=int(self.pm_+(self.lvl)**2)
    120.                self.taux=sqrt(self.taux)
    121.           if self.pv<=0:                # unitee morte
    122.                if "fee en bouteille" in self.inventaire:
    123.                     clearterm()
    124.                     self.pv=0
    125.                     self.useitem(self.inventaire.index("fee en bouteille"))
    126.                     print "Votre fee vous vois en sale etat, elle saute de sa bouteille pour vous sauver, dites lui merci"
    127.                     readtime()
    128.                else:
    129.                     print "tu as perdu " + self.nom
    130.                     self.dead=1
    131.      def useability(self, mechant,x):
    132.      ## Useability,  regarde la capacite x de self et l'utilise contrel'mechant
    133.      ## Fondement du combat, correspond au fait de donner un coup (ou prendre fuite)
    134.           """donne l'mechant et numereau de l'ability en cas de fuite, la fonction retourne "fuite". """
    135.           print self.ability[5*x]            # 5*x est le debut de l'abilite (le nom) X suivi de ses 4 caracteristique (force,taux,cout de magie,niveau).
    136.           self.pm=self.pm-self.ability[5*x+2]
    137.           if ran()>(self.ability[5*x+3]): print 'le coup %s est un echec' % (self.ability[5*x],)
    138.           elif ran()<=(self.ability[5*x+3]):
    139.                if self.ability[5*x]=="fuite": return "fuite"
    140.                degats=int(ran()*self.force*self.ability[5*x+1])
    141.                mechant.pv-=degats
    142.                self.xp+=int(int(log(1+degats,1.5))*(log(mechant.xp_+mechant.force**7+mechant.pv_+mechant.pm_,5)/10))    #increment des XP
    143.                self.xp_+=int(int(log(1+degats,1.5))*(log(mechant.xp_+mechant.force**7+mechant.pv_+mechant.pm_,5)/10))
    144.                print "%s gagne %s points d'experience apres avoir inflige %s degats a %s" % (self.nom, int(int(log(1+degats,e))*(log(mechant.xp_+mechant.force**7+mechant.pv_+mechant.pm_,7)/10)), degats, mechant.nom)
    145.                readtime(2)
    146.      def addinv(self,mechant):
    147.      ## Addinv: petite fonction utilisee en fin de combat pour gagner a pile ou face l'item type du mechant
    148.           """offre une chance sur deux d'aqquerir l'item de l'mechant en argument"""
    149.           a=ran()
    150.           b=0
    151.           if len(self.inventaire)>=20:
    152.                print "besace pleine"
    153.                a=0
    154.           elif a>=0.5:
    155.                b=1
    156.                print ""
    157.                self.inventaire.append(mechant.item)
    158.           print "victoire! vous avez vaincu "+ mechant.nom+" vous trouvez dans sa besace %s $ et %s %s" % (mechant.money,b,mechant.item)
    159.           Joueur.wins+=1
    160.           Joueur.money+=mechant.money
    161.      def useitem(self, item):
    162.      ## useitem : utilisation des items
    163.      ## incremente les stats du hero des valeurs associees du tuple de l'item (implicite)
    164.           """utilise l'item en argument"""
    165.           tupple=inventaire[self.inventaire[item]]     #acquisition du tuple du dico des items.
    166.           self.inventaire.remove(self.inventaire[item])                 #retrait de l'inventaire lie a l'utilisation
    167.           self.pv += tupple[0]
    168.           self.pv_ += tupple[1]
    169.           self.pm += tupple[2]
    170.           self.pm_ += tupple[3]
    171.           self.xp += tupple[4]
    172.           self.xp_ += tupple[4]
    173.           self.force += tupple[5]
    174.           if self.pv>self.pv_: self.pv=self.pv_
    175.           if self.pm>self.pm_: self.pm=self.pm_
    176. #################################
    177. ##                            
    178. ## Definition fonctions simple
    179. ##                            
    180. #################################
    181. def ran():
    182.      ## ran() = retourne une valeur entre 0 et 1 (genre 0.3589456321 ou 0.7854322154)
    183.      """retourne un random classique"""
    184.      return (random())
    185. def question(Q, propositions): # pour ceux qui se posent la question("c'est quoi cette question?", ["c'est dur", "cest facile"])
    186.      ## question("je suis la question", ["je suis la premiere proposition", "Je suis la deuxieme", "Je suis la troisieme"])
    187.      ## pose une question a propositions et retourne la valeur correspondant a la reponse (la valeur 0 correspond a la premiere proposition)
    188.      """pose la question Q (1er argument) avec les proposition (liste et 2eme argument), retourne le numereau de la reponce voulue"""
    189.      t=0
    190.      while t==0:
    191.           print Q
    192.           x=0
    193.           while x<len(propositions):
    194.                print x, " -  ", propositions[x]
    195.                x+=1
    196.           answer,t=asknumber(),1
    197.           if answer>=len(propositions) or answer<0:
    198.                t=0
    199.                print "Valeur en entree incorrecte"
    200.      clearterm()
    201.      return answer
    202. def asknumber():
    203.      ## prinsipalement utilise par la fonction question,  cette fonction demende un chifre,
    204.      ## elle controle son aspect "chiffrique" et retourne la reponce ou -9 si c'est pas une bone valeur qui a ete donnee (permet de comparer le resultat)
    205.      """demande une valeur et controle que ce soit un entier puis la retourne (cas contraire retourne -9 pour pouvvoir etre compare et sorti d'intervalle)"""
    206.      answer=raw_input('entrez une valeur numerique entiere \n')
    207.      try: a=int(answer)
    208.      except: a=-9
    209.      return a
    210. def buildlist(mode):
    211.      ## buildlist est la fonction pour faire des listes de propositions pour questions: 3 modes
    212.      ##1## mode 'capa' cre la liste des abilitys pour le combat
    213.      ##2## mode 'boost' cre la liste des abilitys pour le menu ou on les boostent
    214.      ##3## mode 'item' cre la liste des items de l'inventaire pour inventaire()
    215.      ##4## mode 'sell' cre la liste du vendeur
    216.      """retourne une liste des ability du joueur"""
    217.      liste=[]
    218.      if mode== 'capa':
    219.           for c in range((len(Joueur.ability))/5):
    220.                liste.append(str(Joueur.ability[c*5])+' force: %s , Taux de reussite: %s , Cout de magie: %s' % (Joueur.ability[c*5+1], Joueur.ability[c*5+3], Joueur.ability[c*5+2]))
    221.      elif mode == 'boost':
    222.           for c in range((len(Joueur.ability))/5):
    223.                liste.append(str(Joueur.ability[c*5])+' force: %s , Taux de reussite: %s , Cout de magie: %s, Niveau: %s, cout de xp :%s' % (Joueur.ability[c*5+1], Joueur.ability[c*5+3], Joueur.ability[c*5+2], Joueur.ability[c*5+4], Joueur.ability[c*5+4]**koefdecoutdecapa[Joueur.ability[c*5]]))
    224.      elif mode == 'item':
    225.           for x in range(len(Joueur.inventaire)):
    226.                nom=Joueur.inventaire[x]
    227.                liste.append("item: %s \n bonnus:  vie: +%s/+%s    magie: +%s/+%s   xp: +%s   force:  +%s" %(nom,inventaire[nom][0],inventaire[nom][1],inventaire[nom][2],inventaire[nom][3],inventaire[nom][4],inventaire[nom][5]))
    228.           liste.append("quitter")
    229.      elif mode=='sell':
    230.           for nom in listemarchand:
    231.                liste.append("item: %s \n bonnus:  vie: +%s/+%s    magie: +%s/+%s   xp: +%s   force:  +%s   prix: %s$" %(nom,inventaire[nom][0],inventaire[nom][1],inventaire[nom][2],inventaire[nom][3],inventaire[nom][4],inventaire[nom][5],inventaire[nom][6]))
    232.           liste.append("quitter")
    233.      return liste
    234. ###################################
    235. ##                            
    236. ## Definition fonctions spesifique
    237. ##                            
    238. ###################################
    239. def acheter():
    240.      print "vous voici chez le Marchant! il sait vendre des articles qui sont suseptible de vous interesser..."
    241.      print "il vous reste %s $" % Joueur.money
    242.      if len(Joueur.inventaire)>=20:
    243.           print"commence par utiliser tes items car ta besace est pleine"
    244.           return
    245.      answer=question("le marchand a en magasin ceci: que voulez vous?",buildlist("sell"))
    246.      if answer>len(listemarchand)-1:return
    247.      if Joueur.money<inventaire[listemarchand[answer]][6]:
    248.           print "dégage clochard"
    249.           return
    250.      Joueur.inventaire.append(listemarchand[answer])
    251.      Joueur.money-=inventaire[listemarchand[answer]][6]
    252. def gestion_inventaire():
    253.      ## Gestion_inventaire: cree une liste des items avec leurs proprietes
    254.      ## Demande quel item utiliser verifie sa disponibilite.
    255.      """interface de gestion de l'inventaire du joueur"""
    256.      listeinv=buildlist('item')
    257.      q=question('voici votre inventaire',listeinv)
    258.      if 0<=q<len(Joueur.inventaire): Joueur.useitem(q)
    259. def find_an_ennemy(mechant):
    260.      ## find_an_ennemy(mechant): mechant (predefini en unite) est l'objet qui sera utilise pour retenir l'mechant le temps du combat.
    261.      ## utilise la disaine du niveau pour voir quels mechants peuvent être face au joueur.
    262.      """determine un mechant au niveau du joueur."""
    263.      t=(ran())*Joueur.wins/10
    264.      mechant.money=int(t*1000)
    265.      if t<=1: carotte.newunit(mechant)
    266.      elif t<=2: boulet.newunit(mechant)
    267.      elif t<=7.5: bosse.newunit(mechant)
    268.      else :
    269.           Christophe.newunit(mechant)
    270.           print"He toi la bas, arette de massacrer tous mes monstres! Je vais te donner une leçon, tu vas voir que face a moi tu vas moins faire ton malin!"
    271.           raw_input()
    272.           rep=1
    273.           mechant.force+=(Joueur.force/2)
    274.           mechant.pv+=(Joueur.pv_/2)
    275.           mechant.pv_ += (Joueur.pv_/2)
    276.           mechant.xp_ += (Joueur.xp_-Joueur.xp)
    277.           mechant.money=(10^(Joueur.lvl))
    278.           print "face a un tel adversaire, vous devriez vite utiliser des objet ou de l'experience...."
    279.           while 0<rep<=len(listactions):
    280.                rep=question("Voulez vous:", listactions)
    281.                if rep==1:
    282.                     print "bienvenu dans ce menu:"
    283.                     c=question("quelle aptitude voulez vous ameliorer d'un niveau?", buildlist('boost'))
    284.                     if Joueur.ability[c*5+4]**koefdecoutdecapa[Joueur.ability[c*5]]<Joueur.xp:
    285.                          Joueur.xp-=Joueur.ability[c*5+4]**koefdecoutdecapa[Joueur.ability[c*5]]
    286.                          Joueur.ability[5*c+1]+=(Joueur.ability[5*c+1])*0.3
    287.                          Joueur.ability[5*c+2]=sqrt(Joueur.ability[5*c+2])
    288.                          Joueur.ability[5*c+4]+=1
    289.                elif rep == 2:
    290.                     print "pas de commmerçant en ville"
    291.                     print "vous avez %s $ dans votre besace... avous d'attendre le marchant pour en faire bon usage" % Joueur.money
    292.                elif rep==3: gestion_inventaire()
    293.                elif rep==4: Joueur.identity()
    294.                elif rep==5: pass
    295. def qcombat(attaquant,mechant):
    296.      ## qcombat(attaquant,mechant): gere un coup de l'attaquant a son mechant
    297.      ## utilise par combat(), elle permet d'avoir les même regles de combat quelque soit l'attaquant.
    298.      """1er argument attaquant, 2eme argument defenceur, gere un coup."""
    299.      capa=buildlist('capa')
    300.      print """a %s de jouer""" % attaquant.nom
    301.      if attaquant == Joueur:
    302.           answer=question("quelle attaque utilisez vous?", capa)
    303.           while attaquant.ability[5*answer+3]>=attaquant.pm:
    304.                if attaquant.pm<=0:attaquant.pm=1
    305.                answer=question("quelle attaque utilisez vous?", capa)
    306.      else :
    307.           X=0
    308.           while X < (len(attaquant.ability))/5 :
    309.                if attaquant.ability[5*X+2]<attaquant.pm:
    310.                    answer=X
    311.                    break
    312.                X+=1
    313.      valeur=attaquant.useability(mechant,answer)
    314.      attaquant.showstat()
    315.      if valeur == "fuite": return 'end'
    316.      return ""
    317. def combat( mechant, surprise):
    318.      ## combat:
    319.      ## mechant est l'objet de type unite mechant, l'effet de surprise dit si c'est le joueur qui donne le 1er coup.
    320.      """gere tout un combat, 1er argument: mechant (de type unite) et 2eme effet de surptise (si 1 alors Joueur 1er a frapper)"""
    321.      print "UN combat est engage! youhou! vas y avoir du fight!! adversaire: %s, en voici les STATS" % (mechant.nom,)
    322.      mechant.identity()
    323.      x=0
    324.      if surprise==1:
    325.           x+=1
    326.           print "tour:", x
    327.           print "vous beneficiez de l'effet de surprise"
    328.           t=qcombat(Joueur,mechant)
    329.           Joueur.checkup()
    330.           mechant.checkup()
    331.           readtime()
    332.      while  mechant.dead==0 and Joueur.dead==0 and t!='end':
    333.           x+=1
    334.           print "tour:", x
    335.           t=qcombat(mechant,Joueur)
    336.           mechant.checkup()
    337.           Joueur.checkup
    338.           if mechant.dead!=0 or Joueur.dead!=0 or t=='end': break
    339.           x+=1
    340.           readtime()
    341.           print 'tour:', x
    342.           t=qcombat(Joueur,mechant)
    343.           Joueur.checkup()
    344.           mechant.checkup()
    345.           readtime()
    346.      if t== "end":
    347.           print"vous avez fuis"
    348.           Joueur.fuite+=1
    349.      elif mechant.dead==1:Joueur.addinv(mechant)
    350.      else: print "balala, perdre contre un(e) %s, n'est ce pas ridicule?" % mechant.nom
    351. ###############################
    352. ###############################
    353. ###############################
    354. ######                          
    355. ######            CODE          
    356. ######                          
    357. ################################
    358. ################################
    359. ################################
    360. ###################################################
    361. ##                                      
    362. ##  Definition des principales listes et variables
    363. ##                                      
    364. ###################################################
    365. # pour implementer le jeu d'une unite, il faut ajouter ici un nouvel mechant, definir son item dans le dictionnaire inventaire et ajouter des chances de rencontrer l'mechant dans find_an_ennemy.
    366. # kefdecoutdecapa est un dictionnaire repertoriant les koefficiants de cout en points du niveau de capa
    367. koefdecoutdecapa={"coup de poing":2, "fuite":1.58, "super coup de poing":3, "attendre":1 }
    368. # mechant est une unite qui sera l'adversaire du joueur au long du jeu, il sera resete entre chaque combat.
    369. mechant=unite(1,1,1,1,1,1,1,1,1)
    370. # liste des actions propose entre chaques combat.
    371. listactions=['continuer le combat', "utiliser vos points d'experience", "aller chez le commerçant", "utiliser des items","regarder ses stats","quitter le jeu"]
    372. # definition des unitees
    373. ##rappel: unite(nom,force,taux de reussite, points de vie, liste des capacitees(nom,force, cout de magie, taux de reussite, niveau), poinst de magie, experience, niveau, nom d'items)
    374. #joueur (raw input permet au joueur de choisir son nom)
    375. Joueur=unite(raw_input('nom du joueur\n'), 10 , 0.6, 100, ["coup de poing" , 2,0,0.98,2, "fuite" , 0,0,0.5,2, "super coup de poing" , 10,5,0.85,4, "attendre",0,0,1,1], 25, 0, 0,"none")
    376. Joueur.inventaire.append("fee en bouteille")
    377. Joueur.inventaire.append("fee en bouteille")
    378. Joueur.inventaire.append("fee en bouteille")
    379. clearterm()
    380. print "vous commencez le jeu avec 3 fees en bouteilles, elles vous remonteront la vie d'elle meme au dernier moment pour vous sauver la mise \n \n"
    381. readtime()
    382. #definition des type de mechants
    383. carotte=unite("carotte",2,0.7,10,["coup de poil",4,0,0.9,2],10,10,0,"carotte vichi")# cf ligne 64 a 80
    384. boulet=unite("boulet",5,0.8,20,["coup dechaîne",8,0,0.7,3],60,100,5,'poid de force')
    385. bosse=unite("bosse",15,0.70,75,["coup douloureux",20,10,0.8,5,"ptitcoup",8,0,0.7,4],50,400,10,'pommade')
    386. Christophe=unite("Christophe",100,0.99999,1000,["Coup de clavier",100,0,0.98,7],10000,10000,100,"Linux Kernel")
    387. #definition des diferents inventaires.
    388. inventaire={"carotte vichi":(50,0,5,0,0,0),"poid de force":(0,5,0,0,0,0.5),'pommade':(1000,50,50,5,20,0.7),"Linux Kernel":(1000000000,100000,1000000000,1000000,9999999999,20),"fee en bouteille":(2000000000,0,20,0,0,0,50000),"potion de restauration":(2000000000,0,2000000000,0,0,0,5000),"potion de vie mineure":(500,10,10,5,0,0,1500)} #'nom de l'item':(pv,pv_,pm,pm_,xp,force,cout(si a vendre)),
    389. listemarchand=["potion de vie mineure","potion de restauration","fee en bouteille"]
    390. # definition de rep pour pouvoir comparer a 5 dans la boucle while.
    391. rep=1
    392. ####################################
    393. ##                                      
    394. ##  Le code de l'apres definition.
    395. ##                                      
    396. ####################################
    397. while rep!=5 or Joueur.dead==1:
    398.      rep=1
    399.      find_an_ennemy(mechant)
    400.      combat(mechant,1)
    401.      print Joueur.wins
    402.      if Joueur.dead==1 : break
    403.      while 0<rep<=len(listactions):
    404.           rep=question("Voulez vous:", listactions)
    405.           if rep==1:
    406.                print "bienvenu dans ce menu:"
    407.                c=question("quelle aptitude voulez vous ameliorer d'un niveau?", buildlist('boost'))
    408.                if Joueur.ability[c*5+4]**koefdecoutdecapa[Joueur.ability[c*5]]<Joueur.xp:
    409.                     Joueur.xp-=Joueur.ability[c*5+4]**koefdecoutdecapa[Joueur.ability[c*5]]
    410.                     Joueur.ability[5*c+1]+=(Joueur.ability[5*c+1])*0.3
    411.                     Joueur.ability[5*c+2]=sqrt(Joueur.ability[5*c+2])
    412.                     Joueur.ability[5*c+4]+=1
    413.           elif rep == 2:
    414.                if Joueur.money < 1500:
    415.                     print "pas de commmerçant qui vous laissent rentrer la bourse si légère. CLOCHARD!"
    416.                     print "vous avez %s $ dans votre besace... à vous d'attendre la tolérence du marchant pour en faire bon usage (1800$)" % Joueur.money
    417.                else:
    418.                     acheter()
    419.           elif rep==3: gestion_inventaire()
    420.           elif rep==4: Joueur.identity()
    421.           elif rep==5: pass


    ÉDIT:je vous passerait ma version du code en éditant se code sauf si vous en voulais pas, mais si ne serai-ce que ça puisse intéresser une personne, je pense que ce n'est pas perdu...
    ReÉdit: J'ai fait des effort de lisibilité du fait de la publicaation de mon code... (commentaires+ définition de fontions)

    Merci de vous intéresser a ce code (qui je pense peut être assez interessant car simple et mieu commenté pourait carrément avoir une visée pédagogique)
    • Partager sur Facebook
    • Partager sur Twitter
    Si la violence ne résout pas ton problème c'est que tu n'as pas été assez violent.
      16 décembre 2006 à 23:24:40

      je teste et je te dit quoi
      ton code est encore bouger
      mon interpréteur ne me ment pas

      EDIT : j'ai mal compris le sujet désoler
      • Partager sur Facebook
      • Partager sur Twitter
        16 décembre 2006 à 23:31:36

        pourtant la ligne est toute bête! il y a pas de difficulté ou quoi.... je n'arrive pa a voir, j'ai cherché bien longtemps mais la j'arrive pas.... il y a les 2 points, les espaces sont pas des tabs (car quant on mélange plusieurs type d'indentation sa galère un peu)

        la, je sèche.... mais ça buggue
        • Partager sur Facebook
        • Partager sur Twitter
        Si la violence ne résout pas ton problème c'est que tu n'as pas été assez violent.
          17 décembre 2006 à 10:32:15

          Ligne 68 : Il te manque une parenthèse. ;)
          Il y a encore d'autres bugs dans ton code, je ne vais pas tous les corriger ^^ .
          • Partager sur Facebook
          • Partager sur Twitter
            17 décembre 2006 à 11:00:02

            merci, c'es celuila que j'arrivait pas a corrigé, je vai me débrouiller pour les autres ;-)
            • Partager sur Facebook
            • Partager sur Twitter
            Si la violence ne résout pas ton problème c'est que tu n'as pas été assez violent.
              17 décembre 2006 à 11:06:27

              Pour t'aider à débugguer : quand Python indique une erreur à la ligne N, regarde à la ligne N-1, souvent les erreurs se cachent là.
              • Partager sur Facebook
              • Partager sur Twitter
                17 décembre 2006 à 13:16:13

                bonne astuce, dans le code proposé, il y avait un autre exemplaire de manque de parenthèse au bug reporté a la ligne suivante... la il veux bien fonctionne tant qu'on utilise pas l'inventaire...
                Merci beaucoup pmol.
                • Partager sur Facebook
                • Partager sur Twitter
                Si la violence ne résout pas ton problème c'est que tu n'as pas été assez violent.
                  19 décembre 2006 à 12:47:24

                  up petit up, je sait pas ou publier se code, mais j'aimerait bien avoir des retours dessu si il y a des gens qui trouvent se code intéressant...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Si la violence ne résout pas ton problème c'est que tu n'as pas été assez violent.
                    17 mai 2007 à 0:33:07

                    je pense que l'over comentation du code peut ouvrir l'acces a la lecture comme si étudier ce code était un tuto sur le python...
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Si la violence ne résout pas ton problème c'est que tu n'as pas été assez violent.
                    Anonyme
                      17 mai 2007 à 9:34:36

                      Tu devrais être plus modulaire, et faire plusieurs fichiers.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 mai 2007 à 12:35:19

                        ee... c'est a dire?

                        (je sait pas faire "include" en python donc, je m'interdit encore le "multi fichier..." et modulaire serait rempacer toutes les valeur fixe par des variable modifiable depuis un "fichier de configuration"? c'est ça?

                        (merci de la réponse qui plus est constructive) ;-))
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Si la violence ne résout pas ton problème c'est que tu n'as pas été assez violent.
                          17 mai 2007 à 12:44:06

                          Je débute en Python mais j'ai cru comprendre que Bigloo voulait dire que tu devrais créer des modules pour importer tes classes et fonctions. Mais ce n'est peut-être pas du tout ca, je répète que je débute :-° .
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            17 mai 2007 à 12:59:33

                            super ti nain> C'est effectivement ce que MaAaD a dit : tu peux séparer tes fonctions selon leur effet dans différents modules, que tu enregistres en .py (par exemple combats.py). Après, tu pourras les utiliser depuis d'autres fichiers en les important (par exemple, from combats import *)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 mai 2007 à 13:09:59

                              Hey, super ti nain, pas mal ton script, je t'avouerais que j'ai pas pris le temps de tout lire :-° , mais je l'ai testé, si je peux me permettre, voici un ou deux conseils...
                              Tout d'abord, dans quel but as-tu devellopé ce script? Uniquement entrainement ou tu t'amusais un peu??
                              Ensuite, tu pourrais utiliser
                              from random import randrange
                              , au moyen d'un petit tuple, tu pourrait créer plusieurs nom d'adversaires, perso au debut je tombe toujours sur carrote ;-)
                              Bon alors j'en arrive à ce que je voulais vraiment te dire : je ne suis pas très POO, surtout en python, mais Tkinter de permettrait de faire une version "graphique", basique certes mais beaucoup plus amusante de ton mini-jeu?
                              Que ce qui s'y connaissent un peu me répondent...
                              a plus et bon courage.

                              PS : comme je l'ai dit, je n'ai pas lu l'integralité du script, donc arrêtez moi si je dis des conneries...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 mai 2007 à 13:55:45

                                c'était pour un entrainement simpas et qui semble avoir un interet et une phase de test du programme pas trop pénible (vu que c'est un jeu....)
                                donc, in fact, ce que je vait faire, c'est faire un script avec toutes les def et un script avec le programme lui même... c'est bien ça...

                                (le code une fois les classe, les fonction et les variables définies, donne:
                                while rep!=5 or Joueur.dead==1:
                                     rep=1
                                     find_an_ennemy(mechant)
                                     combat(mechant,1)
                                     print Joueur.wins
                                     if Joueur.dead==1 : break
                                     while 0<rep<=len(listactions):
                                          rep=question("Voulez vous:", listactions)
                                          if rep==1:
                                               print "bienvenu dans ce menu:"
                                               c=question("quelle aptitude voulez vous améliorer d'un niveau?", buildlist('boost'))
                                               if Joueur.ability[c*5+4]**koefdecoutdecapa[Joueur.ability[c*5]]<Joueur.xp:
                                                    Joueur.xp-=Joueur.ability[c*5+4]**koefdecoutdecapa[Joueur.ability[c*5]]
                                                    Joueur.ability[5*c+1]+=(Joueur.ability[5*c+1])*0.3
                                                    Joueur.ability[5*c+2]=sqrt(Joueur.ability[5*c+2])
                                                    Joueur.ability[5*c+4]+=1
                                          elif rep == 2:
                                               print "pas de commmerçant en ville"
                                               print "vous avez %s $ dans votre besace... avous d'attendre le marchant pour en faire bon usage" % Joueur.money
                                          elif rep==3: gestion_inventaire()
                                          elif rep==4: Joueur.identity()
                                          elif rep==5: pass


                                ce qui est un code plus concis certes ;-)
                                (mais a coté je fait 3 scripts, un définition des fonctions, un définition des classes et un définition des variable??)

                                et si tu été juste face a des carottes, j'ai une esplication, c'est car c'est le méchant "bas level" donc tant que tu a pas passé le niveau ee 10 je croix... tu n'est que face a des carottes...
                                mais bon, j'ai mis des noms déconneur, c'est un script pour mamuser, je pourait définir d'autre type de méchant...

                                j'ai commencé il y a déja un moment une version avec tk mais j'ai vite abandonner, (j'avait défini la fonction qui pose une question en tk)car il faudrait tout tout tout coder pour le tk c'est a dire que je n'arrive pas a repasser de la fenetre au terminal en fesant une succession de pop-up...

                                effectivement, je pourait faire un tuple de prénom (mais laisser le nom car faut savoir si on doit s'attendre a un coup de poil ou...) ....
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Si la violence ne résout pas ton problème c'est que tu n'as pas été assez violent.
                                  17 mai 2007 à 17:35:03

                                  En fait tu ne défini pas tes variables dans un autre fichier (sauf évidemment si tu compte faire commme pour la plus part des jeux un fichier config pour modifier rapidement le jeu sans passer par la source), tu ne met que tes fonctions et classes dans un ou deux fichier différents. Je n'ai pas lu ton code mais tu peux faire un fichier avec les classes et fonctions qui s'appliquent aux "méchants", et un autre fichier avec les classes et fonction de ton héros, par exemple. Et si tu avais utilisé une interface graphique tu aurais créé un fichier avec les classes et fonctions pour l'interface.
                                  Bon sur ce, je me replonge dans le tuto de G.Swinnen, @+ ;) .
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 mai 2007 à 0:24:23

                                    dans un souci d'équité la classe du héro est exactement la même que celle de l'ennemi ;-)
                                    mais, oui.. je voix.. et par défaut, je suppose que si je présise pas l'adresse du script, ça regarde a l'adresse relative...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Si la violence ne résout pas ton problème c'est que tu n'as pas été assez violent.

                                    Python: oû est le problême?

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown