Démineur en basic

Démineur en basic - Programmation

Marsh Posté le 24-05-2001 à 18:55:26    

Comment puis-je faire pour qu'il indique le nombre de mines dans les cases adjacentes ?
Merci.
P.S : Mon démineur fait 8 case / 8 il y a donc 64 boutons de commande et 64 variables dont 10 sont égales à 1 (mines) tirées aléatoirement

Reply

Marsh Posté le 24-05-2001 à 18:55:26   

Reply

Marsh Posté le 24-05-2001 à 19:01:00    

Tu as ton tableau :
 
tab[8][8]
 
ben si tu es a la case (i,j), tu regardes les cases (i-1,j),(i-1,j-1),(i-1,j+1),(i,j+1),(i,j-1),(i+1,j+1),(i+1,j-1),(i+1,j), et si tu trouves une mine dans chacune de ces cases tu ajoutes 1.
 
Attention aux debordements quand tu fais i-1,i+1,j-1,j+1, i et j doivent rester dans l'intervalle [0,7]

Reply

Marsh Posté le 24-05-2001 à 19:03:10    

Merci ça m'aide bien comme je suis débutant et que j'y connais pas grand chose. je solliciterai peut-être encore votre aide pour ce démineur.

Reply

Marsh Posté le 24-05-2001 à 19:08:14    

Ah mon avis, la plus grosse difficulte, c'est de faire se decouvrir les cases quand tu cliques sur une case '0', sans mines autour. Faut faire un algo recursif, et ca passe pas forcement avec tous les basics

Reply

Marsh Posté le 24-05-2001 à 19:17:16    

J'en suis pas encore la mais si t'as une petite idée...

Reply

Marsh Posté le 24-05-2001 à 19:21:35    

C'est un truc du style :
 
fonction decouvrir_cases_0 (i,j)
  si nb_de_mines(case(i,j)) different de 0
    retour
 
  decouvrir_cases_0 (i-1,j)
  ...
  a repeter pour les 8 cases que j'ai cite au dessus
  (en faisant attention a ne pas deborder du tableau)
 
finfonction
 
Mais le probleme c'est que tous les basics n'acceptent pas les fonctions recursives (la fonction s'appelle elle-meme).
Sous VB je pense que ca passe, mais pour d'autre, je suis pas sur...

Reply

Marsh Posté le 24-05-2001 à 19:34:37    

Merci c'est sympa

Reply

Marsh Posté le 24-05-2001 à 21:22:39    

moi pour que les cases se decouvrent je n'ai pas utilisé d'algos récursifs mais plutot un tableau de 64 dans ton cas. avec un nombre qui indique la position courante et un autre nombre qui indique la derniere case.  
 
exemple :
 t = 15,0,0,0,0,0,...
 p = 0  
 f = 0
 
 pour une iteration :
  1° on decouvre la case en position p : t[p]
     => on invremente p : p=p+1
  2° si elle a zero mines autour, il faut decouvrir les cases autour : on les mets dans le tableau
     => p-9
     => p-8
     => p-7
     => p-1
     => p+1
     => p+7
     => p+8
     => p+9
   a chaque fois on augmente f de 1 : f=f+1, mais l faut verifier que la case exise bien (bordure)
 
  si f<=p : fin      
 
en gros c'est ca et ca evite de faire des iterations.
 
pour le probleme des bordures, tu peux utiliser un tableau plus grand que la taille de jeu. Moi j'ai fait comme ca.

Code :
  1. * * * * * * * * * *
  2. * 0 0 0 0 0 0 0 1 *
  3. * 0 1 0 0 0 0 0 0 *
  4. * 0 0 0 0 0 1 0 0 *
  5. * 0 0 0 0 0 0 0 0 *
  6. * 0 1 1 0 0 1 0 0 *
  7. * 0 0 0 0 0 0 0 1 *
  8. * 0 0 0 1 1 0 0 0 *
  9. * 0 0 0 0 0 0 0 1 *
  10. * * * * * * * * * *
  11. tableau avec le compte des mines
  12. * * * * * * * * * *
  13. * 1 1 1 0 0 0 1 0 *
  14. * 1 0 1 0 1 1 2 1 *
  15. * 1 1 1 0 1 0 1 0 *
  16. * 1 2 2 1 1 2 1 0 *
  17. * 1 1 1 1 1 0 2 1 *
  18. * 1 2 3 3 3 2 1 0 *
  19. * 0 0 1 1 1 1 2 2 *
  20. * 0 0 1 2 2 1 1 0 *
  21. * * * * * * * * * *


à la place des * je mets des -1 ou 0 ca depend

Reply

Marsh Posté le 26-05-2001 à 19:03:01    

tgrx a écrit a écrit :

Tu as ton tableau :
 
tab[8][8]
 
ben si tu es a la case (i,j), tu regardes les cases (i-1,j),(i-1,j-1),(i-1,j+1),(i,j+1),(i,j-1),(i+1,j+1),(i+1,j-1),(i+1,j), et si tu trouves une mine dans chacune de ces cases tu ajoutes 1.
 
Attention aux debordements quand tu fais i-1,i+1,j-1,j+1, i et j doivent rester dans l'intervalle [0,7]




J'ai fait ca :
Private Sub Case54_Click()
If bombes54 = 1 Then
    MsgBox "Dommage T'as perdu"
Else
End If
Dim v54 As Integer
v54 = 0
If bombes61 = 1 Then
    v54 = v54 + 1
Else
End If
If bombes47 = 1 Then
    v54 = v54 + 1
Else
End If
If bombes53 = 1 Then
    v54 = v54 + 1
Else
End If
Case54.Caption = v54
End Sub
 
Case 54 est la case en haut à gauche
bombes54 est la variable qui définit s'il y a une mine ou pas
Est-ce que c'est bon car ca peut paraitre un peu con mais je sais pas augmenter une variable de 1 ?

Reply

Marsh Posté le 27-05-2001 à 21:55:59    

???

Reply

Marsh Posté le 27-05-2001 à 21:55:59   

Reply

Marsh Posté le 28-05-2001 à 11:19:30    

tu es sous VB, tu aurais plutot du faire un tablo de bouton, parceque gerer les evenements de 64 boutons, je te dis pas le bordel... ou la gestion du click de souris sur une image ou un otre composant..
mais bon, je n'ai pas bossée la kestion

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed