On m’a demandé faire un petit programme, tout con, tout basique (d’où le langage…mouarf) et en fait, j’ai un problème que j’suis incapable de comprendre/résoudre, rigolez-pas, j’ai honte moi même :P)
Donc :
pv22 = funcAttaque(e2.Text, degat_ab, pv22)
Ca c’est correct, ma fonction me sort un entier, j’colle le resultat dans la variable pv22, c’est comme dans tout langage… j’pense pas me planter (j’ai quelques heures de VB derriere moi )
et la fameuse fonction, une fois encore, cest tout con, on peut pas se planter, et j’ai quand même réussi !
Private Function funcAttaque(Esquive As Integer, ByVal degat As Integer, ByVal hp As Integer) As Integer
de_att = Rand(1, 6)
de_def = Rand(1, 6)
If (de_def <= Esquive) Then
victoire.Text = victoire.Text & vbCrLf & "Attaque ratée"
Else
Select Case de_att
Case 1
funcAttaque = hp - ((10 * degat) / 100)
victoire.Text = victoire.Text & vbCrLf & "10%"
Case 2
funcAttaque = hp - ((20 * degat) / 100)
victoire.Text = victoire.Text & vbCrLf & "20%"
Case 3
funcAttaque = hp - (40 * degat) / 100
victoire.Text = victoire.Text & vbCrLf & "40%"
Case 4
funcAttaque = hp - (60 * degat) / 100
victoire.Text = victoire.Text & vbCrLf & "60%"
Case 5
funcAttaque = hp - ((80 * degat) / 100)
victoire.Text = victoire.Text & vbCrLf & "80%"
Case 6
funcAttaque = hp - degat
victoire.Text = victoire.Text & vbCrLf & "100%"
Case Else
End Select
End If
End Function
Voilà, donc je comprend pas, ca ne modifie pas la valeur de pv22 !! Y a des trucs à savoir sur les fonction VB en règles générales ?
[…]
Private Function funcAttaque(Esquive As Integer, ByVal degat As Integer, ByVal hp As Integer) As Integer[/quote]
J’imagine que e2 est une TextBox donc e2.Text est une string alors que ta fonction s’attend à un Integer. Il me semble pourtant que VB doit gueuler dans ce cas il y a donc peu de chance que ce soit ça.
Sinon regarde peut-être du côté de ta fonction Rand(1,6) peut-être qu’elle retourne des valeurs qui la font switcher sur le case else (dans lequel il ne se passe rien).
Ca gueule pas, j’ai essayé aussi de passer le paramètre en (val(e2.text)) : meme resultat, marche pas.
Je ne comprends pas oO.
Pour le Rand, ca reste bien dans (1,6) d’ou le case else vide, j’ai verifié le tout en debuggant, il m’execute bien la ligne de calcul mais il enregistre rien dans PV22… mistere…
Ce message a été édité par Chateau_Dur le 29/07/2004
1=10% (ok)
2=20%(ok)
3=40%(et pas 30)
4=60%(et pas 40) etc
Sinon pour l’histoire de dé, cest encore ca, cest le regles du mec qui m’a demandé de faire le truc, je code, enfin j’essaye, parce que là… cest pas brillant !
[quote]Euh non, ca marche pas ton remplacement de Case
1=10% (ok)
2=20%(ok)
3=40%(et pas 30)
4=60%(et pas 40) etc
Sinon pour l’histoire de dé, cest encore ca, cest le regles du mec qui m’a demandé de faire le truc, je code, enfin j’essaye, parce que là… cest pas brillant ![/quote]oups, moi boulay… à ce moment la tu peux mettre tes valeurs dans un tableau d’entier… genre [1,2,4,6,8,10]
Euh, je m’excuse, je suis pas ultra fort en VB (j’en ai jamais fait) et j’ai peut-être pas bien compris la question, mais ta variable hp en paramètre dans ta fonction est par valeur (ByVal) alors qu’il faudrait (peut-être) la passer par référence (ByRef).
Euh, je m’excuse encore si je suis à l’ouest … je suis nul en VB, là je fais du Java
(et j’aime pas le Java). Ce message a été édité par ko le 30/07/2004
Si tu prends une valeur intermédiaire (genre integer hpTemp) et que tu fais
hpTemp = funcAttaque(…)
ca donne quoi en hpTemp?
Note: verifie aussi que degat n’est pas nul parce que dans ce cas c’est normal que ca change pas! (je dis ca c’est evident, mais c’est souvent des trucs evident qu’on voit pas en info) Ce message a été édité par glenyjob le 30/07/2004
[quote]Si tu prends une valeur intermédiaire (genre integer hpTemp) et que tu fais
hpTemp = funcAttaque(…)
ca donne quoi en hpTemp?
Note: verifie aussi que degat n’est pas nul parce que dans ce cas c’est normal que ca change pas! (je dis ca c’est evident, mais c’est souvent des trucs evident qu’on voit pas en info) Ce message a été édité par glenyjob le 30/07/2004[/quote] Ca change rien en passant par une variable temp
et mes degat ne sont pas nul, j’ai teste en mettant meme des constantes, et pourtant ma funcAttaque garde tjs un 0 ??!!
If (de_def <= Esquive) Then
victoire.Text = victoire.Text & vbCrLf & "Attaque ratée"
Else
…
Dans le cas d’une esquive trop grande tu retourne koi ?[/quote]
mmh comment ca ? ce que je retourne dans cette condition ?? Rien en effet (héhé hmm) fais des tests
bon t’as de l’idée toi en fait lorsque je passe par une attaque ratée, il me mes funcAttaque=0 ?!
Ce qui fait que chaque attaque raté tue un joueur (ce qui est super logique evidement…misère)
Par contre, je sais pas comment arragner ca…
J’ai rajouté funcAttaque=hp après l’affichage du raté, donc pv22 concerve sa valeur normalement, mais il me le met QUAND MEME à 0 !!!
Comprend pas…
Edit : Je voudrais aussi, si en VB, un Integer, que ce soit une fction ou variable, prend par valeur 0 par défaut ?
J’ai l’impression que des que j’appelle funcAttaque elle se met à 0 (et y reste…)
Ce message a été édité par Chateau_Dur le 30/07/2004
Tout pareil que kaneloon, à mon avis c’est la fonction Rand qui est bizarre… Peut être que tu l’as pas initialisée ? Ou qu’elle se réinitialise à chaque entrée dans la sub ?
edit : c’est quoi ce 6 - 1 + 1 ??? Ce message a été édité par lucasbfr le 30/07/2004
la fction rand, jlai trouvé sur le net… j’ai regardé en 2 sec, “ok ca a l’air bon” mouarf , je ferai gaffe la prochaine fois
Concenrnant le de_def<=esquive, je sais pas cest la regle du mec … l’esquive est une carac de personnage, si le dé est inferieur ou egale à cette caracteristique l’attaque ne passe pas.
test la fonction
Marche pas mieux c’est assez incoyable ce langage, soit j’suis completement aveugle et j’ai une erreur de malade sous le nez que je vois pas (cas classique) soit j’suis completement con depuis le debut des vacances (cas probable) relis le code abandonne
Arf, c’est vraiment curieux…
Ce message a été édité par Chateau_Dur le 30/07/2004
Si de_def <= Esquive tu n’attribus aucune valeur a la fonction
il y a une fonction de generation de nombre aleatoire integree a vb : rnd
il faut auparavent utiliser un randomize
par exemple:
Dim MyValue
Randomize 'initialise le rnd ’ Renvoie une valeur aléatoire comprise entre 1 et 6. MyValue = Int((6 * Rnd) + 1)
autrement en faisant un rapide copier/coller dans le mini vb pour les macro de excel le code fonctionne (avec quelques changement)Voila mon code qui fonctionne:
Sub toto()
’
'pv22 = funcAttaque(e2.Text, degat_ab, pv22)
pv22 = 100
pv22 = funcAttaque(3, 4, pv22)
End Sub
Public Function funcAttaque(Esquive As Integer, ByVal degat As Integer, ByVal hp As Integer) As Integer
Randomize
de_att = Int((6 * Rnd) + 1)
de_def = Int((6 * Rnd) + 1)
If (de_def <= Esquive) Then
victoire.Text = victoire.Text & vbCrLf & "Attaque ratée"
Else
Select Case de_att
Case 1
funcAttaque = hp - ((10 * degat) / 100)
victoire.Text = victoire.Text & vbCrLf & "10%"
Case 2
funcAttaque = hp - ((20 * degat) / 100)
victoire.Text = victoire.Text & vbCrLf & "20%"
Case 3
funcAttaque = hp - (40 * degat) / 100
victoire.Text = victoire.Text & vbCrLf & "40%"
Case 4
funcAttaque = hp - (60 * degat) / 100
'victoire.Text = victoire.Text & vbCrLf & "60%"
Case 5
funcAttaque = hp - ((80 * degat) / 100)
victoire.Text = victoire.Text & vbCrLf & "80%"
Case 6
funcAttaque = hp - degat
victoire.Text = victoire.Text & vbCrLf & "100%"
Case Else
End Select
End If
End Function