Pb VB simpliste

Salut,

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 ?

Merci !

[quote][…]
[i]

pv22 = funcAttaque(e2.Text, degat_ab, pv22)  [/i]

[…]

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

Déjà, au lieu de faire un “select case”, fait plutôt:

If (de_def <= Esquive) Then
 victoire.Text = victoire.Text & vbCrLf & "Attaque ratée"
Else
victoire.Text = victoire.Text & vbCrLf & de_att &"0%"
funcAttaque = hp - ((de_att10 degat) / 100)

End If

Juste pour voir
Au fait, la dessus,
If (de_def <= Esquive) Then
 
C’est pas plutôt ?
If (de_att <= Esquive) Then

Ce message a été édité par kaneloon le 29/07/2004

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]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

Je suis obligé de la passer par valeur ! :P)

C’est le bordel le VB, je prefere le Java mille fois

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

Ca n’a p’tet rien à voir, mais

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]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 ??!!

[quote]Ca n’a p’tet rien à voir, mais

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

et ta fonction Rand ? elle est au point ?

Private Sub CommandButton1_Click()
  Me.TextBox1.Text = funcAttaque(e2.Text, 10, 100)
End Sub
Private Function funcAttaque(Esquive As Integer, ByVal degat As Integer, ByVal hp As Integer) As Integer
de_att = Int((6 - 1 + 1) * Rnd + 1)
de_def = Int((6 - 1 + 1) * Rnd + 1)

If (de_def <= Esquive) Then
 victoire.Text = victoire.Text & vbCrLf & “Attaque ratée”
 funcAttaque = hp
Else
 Select Case de_att
Case 1
  victoire.Text = victoire.Text & vbCrLf & “10%”
  funcAttaque = hp - ((10 * degat) / 100)
 
Case 2
  victoire.Text = victoire.Text & vbCrLf & “20%”
  funcAttaque = hp - ((20 * degat) / 100)

Case 3
  victoire.Text = victoire.Text & vbCrLf & “40%”
  funcAttaque = hp - (40 * degat) / 100
 
Case 4
victoire.Text = victoire.Text & vbCrLf & “60%”
  funcAttaque = hp - (60 * degat) / 100
 
Case 5
  victoire.Text = victoire.Text & vbCrLf & “80%”
  funcAttaque = hp - ((80 * degat) / 100)
 
Case 6
  funcAttaque = hp - degat
  victoire.Text = victoire.Text & vbCrLf & "100%"
Case Else
 End Select
End If
End Function

Chez moi ça marche, j’ai changé le rand
Ca ne change rien mais il me semble toujours que la bonne ligne est de_att <= esquive …

Ce message a été édité par kaneloon le 30/07/2004
Ce message a été édité par kaneloon 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

Merci jvais tester de suite,

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

Tu veux pas filer tes sources qu’on jette un oeil ?

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

Ce message a été édité par gigs le 02/08/2004