Rpg sur vb 08

Résolu
darkboom Messages postés 7 Date d'inscription samedi 3 octobre 2009 Statut Membre Dernière intervention 2 juillet 2011 - 25 juin 2011 à 22:38
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 26 juin 2011 à 01:00
Bonjour à tous,
Depuis peu j'ai un projet , un "rpg" Sur Vb
Et voilà que je rencontre un premier problème ..

J'explique , Les Hp sont représenté par des "progressbar"
Donc quand mon personnage envoi une attaque sur l'ennemi (qui a une progressbar2)
progressbar2 qui a comme value initial "100"

Le code est donc "ProgressBar2.Value -= 10"

Pour le moment tout est ok , mais quand je mets de nouvelle attaque par exemple ,
ProgressBar1.Value -= 18 et donc ca ne tombe pas sur "0" pile et l'appli crash ,

Comme erreur , ça me met :
La valeur '-5' n'est pas valide pour 'Value'. 'Value' doit être compris entre 'minimum' et 'maximum'. Nom du paramètre : Value

Voilà en espérant avoir était clair ,
Cordialement .

7 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
26 juin 2011 à 00:07
Bonjour,

<Runtime.CompilerServices.Extension()> Public Function AddValueSecure(ByVal pPB As ProgressBar,byval pValue as Integer) as Integer
Dim lValue as integer=pPb.Value+pValue
if lValuepPb.Maximum Then
pPb.Value=pPb.Maximum
Return lValue-pPb.Maximum
Else
pPb.Value=lValue
Return 0
End if
End Sub


Tu mets ce code dans un module.
L'attribut Extension existe depuis .NET 2008, donc ça devrait passer, sinon tu peux le retirer dans pb.

Pour faire bouger tes ProgressBars, voici quelques exemple :

ProgressBar1.AddValueSecure(-18)
ProgressBar2.AddValueSecure(12)

AddValueSecure s'assure que tu ne sors pas des limites du contrôle et te retourne l'excédant si ça dépasse.

Tu peux aussi l'appeler de cette manière :
AddValueSecure(ProgressBar1,-18)
AddValueSecure(ProgressBar2,12)

Sinon, conseils :
Evite de garder les noms par défaut pour les contrôles que tu utilises dans le code, ça rend difficile la relecture.

Aussi, sache qu'il y a une propriété Enabled normalement au Timer pour qu'il se lance périodiquement.

Mon site
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
25 juin 2011 à 23:02
Bonjour,

Utilises une variable intermédiaire et controle sa valeur avant d'assigner la propriété de la ProgressBar.

Mon site
0
darkboom Messages postés 7 Date d'inscription samedi 3 octobre 2009 Statut Membre Dernière intervention 2 juillet 2011
25 juin 2011 à 23:15
C'est à dire?
Désolé mais je vois pas ce que tu veux dire
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
25 juin 2011 à 23:24
Bonjour,

Dim lValeur as Integer=ProgressBar1.Value-Malus
if lValeur<0 then lValeur=0
ProgressBar1.Value=lValeur

ou

ProgressBar1.Value=Max(0,ProgressBar1.Value-Malus)

Avec Max une fonction qui retourne la plus grandes des valeurs passées en paramètre.

Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
darkboom Messages postés 7 Date d'inscription samedi 3 octobre 2009 Statut Membre Dernière intervention 2 juillet 2011
25 juin 2011 à 23:41
Merci de m'aidé c'est vraiment sympa car je voulais partir d'un rpg simple , mais même ça c'est compliqué.. xD


Dim lValeur as Integer=ProgressBar1.Value-Malus
if lValeur<0 then lValeur=0
ProgressBar1.Value=lValeur

Donc là si j'ai bien compris , le "malus" , c'est la value que mon boutton envlève ?
Je viens d'éssayer et sa cloche , Je débute donc je viens de lire des articles sur les variables mais c'est encore flou


Je poste mon code :(Qui est vraiment un code de débutant , mais ce projet me tient à coeur )

Public Class Form2

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Form1.Hide()
Timer1.Start()
Timer2.Start()
Timer3.Start()
ProgressBar1.Value = 100
End Sub

Private Sub ProgressBar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProgressBar1.Click
If ProgressBar4.Value = 0 Then

End If
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

If ProgressBar1.Value = 0 Then
Label4.Text = Label4.Text + 1
Label6.Text = Label6.Text + 100
ProgressBar1.Value = 100
Label7.Text = "100"
MsgBox("Level up ! , Potion disponible")
Button5.Visible = True
ElseIf Label4.Text >= "20" Then
Button4.Visible = True
Timer1.Stop()
Timer1.Start()
End If
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
ProgressBar1.Value -= 10
ProgressBar4.Value -= 5
Label7.Text = Label7.Text - 10
Label9.Text = Label9.Text - 5
End Sub

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

If Label4.Text = "10" Then
PictureBox3.Visible = True



End If
End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
ProgressBar4.Value += 50
Label9.Text = Label9.Text + 50

Button5.Visible = False
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
ProgressBar1.Value -= 20
ProgressBar4.Value -= 4
Label7.Text = Label7.Text - 20
Label9.Text = Label9.Text - 4
End Sub
0
darkboom Messages postés 7 Date d'inscription samedi 3 octobre 2009 Statut Membre Dernière intervention 2 juillet 2011
26 juin 2011 à 00:21
Ah ok , Merci énormément !
Il va me falloir un temps pour le comprendre maintenant le code , merci en tout cas !
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
26 juin 2011 à 01:00
Bonjour,

Si ton pb est résolu, pense à marquer en "Réponse acceptée" le ou les messages qui t'ont aidés.

Sinon, le code de la fonction est simple, on applique la modification de la valeur et avant d'assigner on vérifie si la valeur peut entrer dans le PB.

Mon site
0
Rejoignez-nous