Démineur en basic - Programmation
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]
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.
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
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...
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 :
|
à la place des * je mets des -1 ou 0 ca depend
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 ?
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
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