cs_wilmore
Messages postés8Date d'inscriptiondimanche 4 juin 2006StatutMembreDernière intervention18 juin 2006
-
4 juin 2006 à 15:30
cs_wilmore
Messages postés8Date d'inscriptiondimanche 4 juin 2006StatutMembreDernière intervention18 juin 2006
-
18 juin 2006 à 16:56
Bonjour à tous,
Je suis débutant en programmation vb6. J'aimerais faire un démineur 5*5 cases, avec 5 mines au total.
Mon 1er pb : je ne sais pas comment choisir 5 cases aléatoirement (en utilisant randomize)sans tomber 2 fois sur la même.
J'ai testé :
Dim NombreMines As Integer, CasesMines As Integer
NombreMines = 5
CasesMines = 25
Dim n As Integer, i As Integer, j As Integer
For n = 0 To NombreMines - 1
Randomize
i = Int((CasesMines - n) * Rnd)
cmdMines(CasesMines - n - 1) = cmdMines(i)
cmdMines(i).Caption = " MINE "
Au final, j'aimerais avoir 5 "cmdMines(i).Caption = " MINE "" choisis au hasard.
Merci pour votre aide!
A voir également:
"Php variables" "php version 4.4.5" "build date" "server api"
AnteManoclis
Messages postés154Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention 6 septembre 2007 11 juin 2006 à 18:48
Salut, a mon avis, tu devrais essayer un truc comme ça
If cmdMines(Index).Caption = "MINE" Then
lblResultat.Visible = True
lblResultat.Caption = " Vous avez perdu "
Else
lblResultat.Caption = " Vous avez gagné "
End If
End Sub
cs_wilmore
Messages postés8Date d'inscriptiondimanche 4 juin 2006StatutMembreDernière intervention18 juin 2006 10 juin 2006 à 19:10
Salut,
J'ai finalement réussi à initialiser mon aire de jeu - merci. Quand on clique sur une "Mine" je voudrai afficher le lbl " Vous avez perdu ". Mais, quand on clique sur n'importe quelle case, le lbl s'affiche quand même. Sinon, j'essaie de coder le décompte des mines...
J'ai essayé :
Option Explicit
Dim NombreMines As Integer, CasesMines As Integer
Dim i As Integer
Private Sub cmdMines_Click(Index As Integer)
If cmdMines(i).Caption = "MINE" Then
lblResultat.Visible = True
lblResultat.Caption = " Vous avez perdu "
End Sub
Private Sub Form_Load()
alea
End Sub
Sub alea()
Dim n As Integer
NombreMines = 5
CasesMines = 25
For n = 0 To NombreMines - 1
Etiquette:
Randomize
i = Int(25 * Rnd)
If cmdMines(i).Caption = "MINE" Then GoTo Etiquette
cmdMines(i).Caption = "MINE"
Me.Visible = True
Debug.Print i, n
Next
End Sub
Merci de votre aide.
A +
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_wilmore
Messages postés8Date d'inscriptiondimanche 4 juin 2006StatutMembreDernière intervention18 juin 2006 11 juin 2006 à 16:19
Re - AnteManoclis!
Effecivement, il y avait un End If que j'ai maladroitement supprimé quand j'ai fait copier -coller... Pas de changement, le lbl " Vous avez perdu " s'affiche toujours.
Option Explicit
Dim NombreMines As Integer, CasesMines As Integer
Dim i As Integer
Private Sub cmdMines_Click(Index As Integer)
If cmdMines(i).Caption = "MINE" Then
lblResultat.Visible = True
lblResultat.Caption = " Vous avez perdu "
Else
lblResultat.Caption = " Vous avez gagné "
End If
End Sub
Private Sub Form_Load()
alea
End Sub
Sub alea()
Dim n As Integer
NombreMines = 5
CasesMines = 25
For n = 0 To NombreMines - 1
Etiquette:
Randomize
i = Int(25 * Rnd)
If cmdMines(i).Caption = "MINE" Then GoTo Etiquette
cmdMines(i).Caption = "MINE"
Me.Visible = True
Debug.Print i, n
Next
End Sub
cs_wilmore
Messages postés8Date d'inscriptiondimanche 4 juin 2006StatutMembreDernière intervention18 juin 2006 11 juin 2006 à 19:05
Merci AnteManoclis
Ca marche maintenant :
Private Sub cmdMines_Click(Index As Integer)
If cmdMines(Index).Caption = "MINE" Then
lblResultat.Visible = True
lblResultat.Caption = " Vous avez perdu "
Else
lblResultat.Visible = True
lblResultat.Caption = " Pas de Mine "
End If
End Sub
cs_wilmore
Messages postés8Date d'inscriptiondimanche 4 juin 2006StatutMembreDernière intervention18 juin 2006 11 juin 2006 à 22:22
Salut !
Pour le décompte des mines, ç'est bien plus délicat... En exécutant le code suivant, je n'arrive pas à détecter les captions "MINE" à gauche de la case "non minée" sélectionnez.
J'ai tenté :
'déclarations
Dim Area(4, 4) As Integer
Dim X As Integer, Y As Integer
Dim C As Integer
Dim Index As Integer
............................................................................
Private Sub cmdMines_Click(Index As Integer)
If cmdMines(Index).Caption = "MINE" Then
lblResultat.Visible = True
lblResultat.Caption = " Vous avez perdu "
Else
lblResultat.Visible = True
'Il n'y a pas de mine
C = CompteMines(X, Y) 'appelle la fonction CompteMines
End If
End Sub
.............................................................................
Private Function CompteMines(X As Integer, Y As Integer) As Integer
'compte le nombre de mines à gauche
CompteMines = 0
If Mine(X - 1, Y - 1) Then
CompteMines = CompteMines + 1
'Debug.Print CompteMines
End If
If Mine(X - 1, Y) Then
CompteMines = CompteMines + 1
'Debug.Print CompteMines
End If
If Mine(X + 1, Y) Then
CompteMines = CompteMines + 1
Debug.Print CompteMines
End If
End Function
...............................................................................
Function Mine(X As Integer, Y As Integer) As Boolean
'Fonction qui indique s'il y a une mine sur la case (X,Y)
If cmdMines(Index).Caption = "MINE" Then
Mine = True
End If
End Function
..................................................................................
AnteManoclis
Messages postés154Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention 6 septembre 2007 13 juin 2006 à 19:02
Salut,
Private Function CompteMines(X As Integer, Y As Integer) As Integer
'compte le nombre de mines à gauche
CompteMines = 0
If Mine(X - 1, Y - 1) Then
CompteMines = CompteMines + 1
'Debug.Print CompteMines
End If
If Mine(X - 1, Y) Then
CompteMines = CompteMines + 1
'Debug.Print CompteMines
End If
If Mine(X-
1, Y + 1 ) Then
CompteMines = CompteMines + 1
Debug.Print CompteMines
End If
End Function
cs_wilmore
Messages postés8Date d'inscriptiondimanche 4 juin 2006StatutMembreDernière intervention18 juin 2006 13 juin 2006 à 20:44
Salut,
J'ai corrigé l'erreur. Je crois avoir identifié le problème : il n'y a pas de lien entre les coordonnées (X,Y) de la fonction "Mine" et le bouton cmdMines_Click(Index As Integer) sur lequel on clique... Il faudrait réussir à faire le lien entre les deux - les variables X et Y valant 0 par défaut, dans mon code.
'déclarations
Dim Area(4, 4) As Integer
Dim X As Integer, Y As Integer
Dim C As Integer
Dim Index As Integer
.....................................................
Private Sub Form_Load()
alea
End Sub
......................................................
Private Sub cmdMines_Click(Index As Integer)
If cmdMines(Index).Caption = "MINE" Then
lblResultat.Visible = True
lblResultat.Caption = " Vous avez perdu "
Else
lblResultat.Visible = True
'Il n'y a pas de mine
C = CompteMines(X, Y) 'appelle la fonction CompteMines
End If
End Sub
.........................................................................
Sub alea()
Dim n As Integer
NombreMines = 5
CasesMines = 25
For n = 0 To NombreMines - 1
Etiquette:
Randomize
i = Int(25 * Rnd)
If cmdMines(i).Caption = "MINE" Then GoTo Etiquette
cmdMines(i).Caption = "MINE"
Me.Visible = True
Next
End Sub
.....................................................................
Private Function CompteMines(X As Integer, Y As Integer) As Integer
'compte le nombre de mines à gauche
CompteMines = 0
If Mine(X - 1, Y - 1) Then
CompteMines = CompteMines + 1
End If
If Mine(X - 1, Y) Then
CompteMines = CompteMines + 1
End If
If Mine (X - 1, Y + 1) Then
CompteMines = CompteMines + 1
Debug.Print CompteMines
End If
End Function
........................................................................
Function Mine(X As Integer, Y As Integer) As Boolean
'Fonction qui indique s'il y a une mine sur la case (X,Y)
If cmdMines(Index).Caption = "MINE" Then
Mine = True
End If
End Function
cs_wilmore
Messages postés8Date d'inscriptiondimanche 4 juin 2006StatutMembreDernière intervention18 juin 2006 18 juin 2006 à 16:56
Je crois que je n'ai pas été assez clair dans mon précédent post. Je voulais savoir si on peut faire un tableau de boutons de commande en les désignant chacuns par leurs coordonnées (i,j). Je ne vois que cette possibilité pour compter les mines autour.