plante avec raw_input! [python] - Python - Programmation
Marsh Posté le 10-01-2012 à 22:31:36
orbinou a écrit : Bonjour,
|
Salut
Désolé, l'instruction que tu cites, quand on n'exécute qu'elle, fonctionne. Donc ça plante peut-être mais pas dans le raw_input(). Et comme j'ai pas de __main__ pour lancer ton code...
orbinou a écrit : aussi autre truc, si vous lancez l'application et jouez un peu, les points de vie des 2 héros reviennent toujours à leur état initial, malgré le décompte des fonctions udyr et trynda.
|
Parce que les variables simples (int, char) qui sont passées à une fonction le sont par copie. Donc la variable originale ne change pas.
Exemple
Code :
|
Sinon as-tu remarqué que les fonctions trynda() et udyr() dont exactement les mêmes (au miroir près) ? Pourquoi n'as tu pas fait une fonction générique unique à laquelle tu passes le combattant à manipuler et son adversaire ? De plus je remarque que tu as un paquet de variables (hp1, hp2, armor1, armor2, etc). Et que vas tu faire si tu rajoutes un 3° perso ? Tu vas rajouter un 3° groupe de variables ? Et tu vas passer tout ce fatras à tes fonctions ?
Donc maintenant, tu as 2 choix: soit tu essayes de tournicoter pour que ça marchotte, soit tu repars de zéro avec une bonne base bien solide.
Par exemple pourquoi ne pas créer une classe dédiée à manipuler un personnage qui embarquerait avec elle tous ses paramètres ? Ainsi au lieu de passer 150 variables à tes fonctions tu ne leurs en passes qu'une seule (le perso)
Code :
|
Puis on teste si ça marche
Code :
|
Ensuite tu vas faire évoluer ta classe. Lui rajouter par exemple une méthode pour qu'un élément de la classe X puisse combattre un ennemi Y et ta classe devient donc
Code :
|
Ensuite ben tu finalise. Une petite méthode permettant de savoir si un joueur est mort
Code :
|
... et la boucle de jeu elle-même...
Code :
|
Ainsi, en centralisant les actions génériques (combattre, afficher, mourir, etc) 1) on est plus à l'aise et 2) c'est facile à faire évoluer. Bon bref c'est juste pour te montrer comment ça peut se réfléchir...
Marsh Posté le 08-01-2012 à 23:05:57
Bonjour,
) mais voilà, ça plante à un moment, et il faut que je force python à quitter, plus moyen de rien faire à une partie bien précise de mon programme.
)
si vous voulez des précisions, n'hésitez pas
j'essaye de faire un petit programme pour faire rire un pote (on aime bien lol
Je vous la mets en copie
(soyez indulgents, je suis pas très fort dans python
------------------------------------------
import random
import time
def intro ():
x= 'FINIII'
print '////////////LEAGUE OF LEGENDS\\\\\\\\\\\\\\\\\\\\'
timer (2,1)
print 'ça pète le feu hein? t as encore rien vu coco'
timer (2,1)
hero1 = 'udyr'
hero2 = 'trynda'
timer (1,1)
print '>>>STATS TRYNDA<<< \n HP = 150 \nDPS = 20 \nARMOR = 2\n CRITS = 30%'
print '>>>STATS UDYR<<< \n HP = 250 \nDPS = 15 \nARMOR = 3\n CRITS = 10%'
player1 = raw_input ('choississez votre héros\n -->trynda\n -->udyr\n')
if player1 == hero1:
player2 = raw_input ('choississez votre héros \n-->'+hero2+'\n')
else:
player2 = raw_input ('choississez votre héros \n-->' + hero1+'\n')
combat (player1, player2)
print 'FINII'
def combat (player1, player2,):
hp1 = 150
hp2 = 250
dps1=20
dps2=15
armor1=2
armor2=3
crits1= 35
crits2 = 25
while hp1 >0 or hp2>0:
if player1 == trynda:
trynda (player1,player2,hp1,hp2,dps1,dps2,armor1,armor2,crits1,crits2)
udyr (player1,player2,hp1,hp2,dps1,dps2,armor1,armor2,crits1,crits2)
if player1 == udyr:
udyr (player1,player2,hp1,hp2,dps1,dps2,armor1,armor2,crits1,crits2)
trynda (player1,player2,hp1,hp2,dps1,dps2,armor1,armor2,crits1,crits2)
def trynda (player1,player2,hp1,hp2,dps1,dps2,armor1,armor2,crits1,crits2):
r = random.randint(1,10)
dp= int (raw_input ('tour:' +str (player1)+ '\n >>inserez un numero d attaque entre 1 et 10\n'))
if dp == r or dp == r-1 or dp == r+1:
print 'CRITIQUE! \npan ' + str(crits1) +'dégats'
timer (1,1)
hp2 = hp2-(crits1 - armor2)
print '->points de vie ' + str (player2)+':\n'+ str(hp2) +'\n'
timer (1,1)
else:
print 'dans les dents! '+ str(dps2) +' dps infligés'
timer (1,1)
hp2 = hp2- (dps1 - armor2)
print '->points de vie ' + str(player2)+':\n'+ str(hp2)+'\n'
timer (1,1)
def udyr (player1,player2,hp1,hp2,dps1,dps2,armor1,armor2,crits1,crits2):
r = random.randint(1,10)
dp= int (raw_input ('tour:' + str(player2) + '\n >>inserez un numero d attaque entre 1 et 10\n'))
if dp ==r:
print 'CRITIQUE! \n pan' + str(crits1) +'dégats'
timer (1,1)
hp1 = hp1-(crits2-armor1)
print '->points de vie ' + str(player1)+':\n'+ str(hp1)+'\n'
timer (1,1)
else:
print 'dans les dents! '+str(dps1)+' dps infligés'
timer (1,1)
hp1 = hp1-(dps2 - armor1)
print '->points de vie ' + str(player1)+':\n'+ str(hp1)+'\n'
timer (1,1)
def timer(length, dt=1):
end = time.time() + length
while(time.time() < end):
time.sleep(dt)
-------------------------------
donc au moment ou il passe dans l'intro () à combat (player1, player2) ça plante.
Mais si je remplace à l'intro
------------------------------
player1 = raw_input ('choississez votre héros\n -->trynda\n -->udyr\n')
if player1 == hero1:
player2 = raw_input ('choississez votre héros \n-->'+hero2+'\n')
else:
player2 = raw_input ('choississez votre héros \n-->' + hero1+'\n')
-----------------------
par
--------------
player1 = trynda</code> <code>player2 =udyr
--------------------
ça marche. donc c'est avec les raw_input que ça plante.
aussi autre truc, si vous lancez l'application et jouez un peu, les points de vie des 2 héros reviennent toujours à leur état initial, malgré le décompte des fonctions udyr et trynda. Donc comment dans la boucle while
------------
while hp1 >0 or hp2>0:
if player1 == trynda:
trynda (player1,player2,hp1,hp2,dps1,dps2,armor1,armor2,crits1,crits2)
udyr (player1,player2,hp1,hp2,dps1,dps2,armor1,armor2,crits1,crits2)
if player1 == udyr:
udyr (player1,player2,hp1,hp2,dps1,dps2,armor1,armor2,crits1,crits2)
trynda (player1,player2,hp1,hp2,dps1,dps2,armor1,armor2,crits1,crits2)
--------------
je peux faire en sorte que le décompte des points de vie se fassent normalement?
merci de votre aide