Mémoire des tentatives précédentes VBA - bataille navale
lo
-
Lo -
Lo -
Bonjour à tous !
J'essaye actuellement de coder un jeu de bataille navale sur VBA (j'apprends le code tout seul donc je suis assez mauvais).
Je demande 2 fois un nombre aléatoire entre 2 et 11 (car ma grille de jeu est entre B2 et K11) et j'aimerai que les nombres choisis reste aléatoire mais évite de reprendre des nombres déjà testés ! Par exemple: si la case E7 tombe (donc les nombres 5 et 7), j'aimerai qu'elle ne retombe pas).
J'aimerai que chaque tentative soit mise de côté pour qu'ensuite avant de lancer les nombres aléatoires, on puisse connaître les combinaisons à essayer !
Merci à vous
Ci-dessous le code:
J'essaye actuellement de coder un jeu de bataille navale sur VBA (j'apprends le code tout seul donc je suis assez mauvais).
Je demande 2 fois un nombre aléatoire entre 2 et 11 (car ma grille de jeu est entre B2 et K11) et j'aimerai que les nombres choisis reste aléatoire mais évite de reprendre des nombres déjà testés ! Par exemple: si la case E7 tombe (donc les nombres 5 et 7), j'aimerai qu'elle ne retombe pas).
J'aimerai que chaque tentative soit mise de côté pour qu'ensuite avant de lancer les nombres aléatoires, on puisse connaître les combinaisons à essayer !
Merci à vous
Ci-dessous le code:
Dim ligne As Integer, colonne As Integer ligne = Int(10 * Rnd()) + 2 colonne = Int(10 * Rnd()) + 2 If Feuil1.Cells(ligne, colonne) = 1 Then MsgBox ("la flotte ennemie à touché un de vos bateaux") Feuil1.Cells(ligne, colonne).Value = 0 Feuil1.Cells(ligne, colonne).Color = 3
Configuration: Windows / Chrome 100.0.4896.127
A voir également:
- Mémoire des tentatives précédentes VBA - bataille navale
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- Cette option de connexion est désactivée en raison des échecs des tentatives de connexion - Forum Windows 10
- Mémoire validée ✓ - Forum Windows 10
- Nettoyer memoire iphone - Guide
2 réponses
Bonjour Io
Il faut avoir une variable tableau à double entrée (ligne, colonne) , au départ toutes les 100 valeurs du tableau sont à 0
Chaque fois qu'un tirage est effectué la valeur (ligne,colonne) prend la valeur 1
Après chaque tirage si la valeur du couple tiré dans le tableau est = 1 on refait le tirage
Il faut aussi comptabiliser le nombre de tirs effectuée pour ne pas dépasser 100 auquel cas le tirage tomberait dans une boucle infinie. Pour cela il faut ,avant de pouvoir incrémenter la valeur à chaque tour, en début de module déclarer la variable nbtir comme Public pour que cette valeur soit conservée
Exemple de macro :
Mais ce n'est que le début car je pense que tes navires doivent avoir plusieurs cases (de 1 à 4 ?) et que lorsqu'un est touché mais non coulé le tir suivant de l'ordi devra se faire dans une cellule contigüe à celle du tir précédent, donc il faudra aussi comme variables Public les coordonnées ligne et colonne du tir réussi effectué
Bon courage et bonne programmation
Cdlmnt
Via
Il faut avoir une variable tableau à double entrée (ligne, colonne) , au départ toutes les 100 valeurs du tableau sont à 0
Chaque fois qu'un tirage est effectué la valeur (ligne,colonne) prend la valeur 1
Après chaque tirage si la valeur du couple tiré dans le tableau est = 1 on refait le tirage
Il faut aussi comptabiliser le nombre de tirs effectuée pour ne pas dépasser 100 auquel cas le tirage tomberait dans une boucle infinie. Pour cela il faut ,avant de pouvoir incrémenter la valeur à chaque tour, en début de module déclarer la variable nbtir comme Public pour que cette valeur soit conservée
Exemple de macro :
Dim ligne As Integer, colonne As Integer Dim tablo(2 To 11, 2 To 11) As Integer Public nbtir As Integer Sub tir_ordi() tirage: If nbtir = 100 Then Exit Sub ligne = Int(10 * Rnd()) + 2 colonne = Int(10 * Rnd()) + 2 If tablo(ligne, colonne) = 1 Then GoTo tirage tablo(ligne, colonne) = 1 nbtir = nbtir + 1 If Feuil1.Cells(ligne, colonne) = 1 Then MsgBox ("la flotte ennemie a touché un de vos bateaux") Feuil1.Cells(ligne, colonne).Interior.Color = RGB(255, 0, 0) Else MsgBox ("Tir dans l'eau !") Feuil1.Cells(ligne, colonne).Interior.Color = RGB(102, 255, 255) End If End Sub
Mais ce n'est que le début car je pense que tes navires doivent avoir plusieurs cases (de 1 à 4 ?) et que lorsqu'un est touché mais non coulé le tir suivant de l'ordi devra se faire dans une cellule contigüe à celle du tir précédent, donc il faudra aussi comme variables Public les coordonnées ligne et colonne du tir réussi effectué
Bon courage et bonne programmation
Cdlmnt
Via