Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Recursivité du démineur [ Archives Visual Basic / J'AI BESOIN D'AIDE !!!! :) ] (missmagou)

jeudi 26 mai 2005 à 10:13:31 | Recursivité du démineur

missmagou

Bonjour à tous,
Voila je suis en train de faire un ptit démineur en vb mais je bloque sur un ptit probleme:
quand le joueur click sur une case vide, celle ci doit découvrir les autres cases vides aux alentours mon soucy c'est que je n'y arrive pas, je vois pas du tt comment je peux faire.
Merci


jeudi 26 mai 2005 à 10:21:54 | Re : Recursivité du démineur

econs

Administrateur CodeS-SourceS
Attention, ceci est du pseudocode.
J'espère qu'il est suffisamment lisible.
Il faut faire attention au bordures de ton tableau dans le calcul des variables indiceCaseAuDessus, indiceCaseADroite, indiceCaseAuDessous, indiceCaseAGauche.

Mais au moins, tu as là la description de la récursivité.


Sub DecouvreCase(indiceCase As Long)
Decourvrir la case d'indice indiceCase
If nombreDeMinesVoisines(indiceCaseAuDessus) = 0 Then
    DecouvreCase indiceCaseAuDessus
End If
If nombreDeMinesVoisines(indiceCaseADroite) = 0 Then
    DecouvreCase indiceCaseADroite
End If
If nombreDeMinesVoisines(indiceCaseAuDessous) = 0 Then
    DecouvreCase indiceCaseAuDessous
End If
If nombreDeMinesVoisines(indiceCaseAGauche) = 0 Then
    DecouvreCase indiceCaseAGuche
End If

End Sub

Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.

jeudi 26 mai 2005 à 10:35:16 | Re : Recursivité du démineur

3615jenveux

Comme tu l'évoque, il faut utiliser la récursivité (une fonction ou une routine qui s'appelle elle-même).
Ecrit une fonction dans laquelle :
Le principe est de tester la case cliquer (est-ce que elle est vide et que l'on peut l'effacer). Et ensuite tu teste toutes les cases a côté (soit 8), et si un de ces 8 tests est positif, tu rapelle la fonction (alors que tu est déjà dans ta fonction).
Cette fonction ce déclenchera donc un nombre de fois plus ou moins important, et ainsi tu sera certain de passer en revue toutes les cases.

Voici une possibilité :
Attention le code découle aussi de la manière dont tu gère les choses. Moi j'avais des controles bouton groupé qui faisaient les cases. J'avais donc une fonction me permettant de passer du numéro d'index d'un bouton a des coordonnées x et y (CoordonnéesCaseJ), et une fonction inverse NoCaseJ. Xmap et Ymap sont les bords du jeu. IndiceY et IndiceX sont des variables me permettant de calculer en coordonnées les 8 cases adjacente d'une case (IndiceY(0)=0, IndiceX(0)=1,IndiceY(1)=1,IndiceX(1)=0,IndiceY(2)=0,IndiceX(2)=-1,...)

Private Sub Gangrène(No As Integer) ' procédure récurcive
' algo effacant ttes les cases vide conjointe lorsque le joueur
' clique sur l'une d'entre elles

Dim Cycle3 As Integer ' for
Dim t(1) As Integer ' contient les coordonnées 0=>y, 0=>x
Dim DécalageCaseTampon As Integer ' tampon contenant successivement les no des 4 cases cardinale adjacente a celle en cours d'analyse


For Cycle3 = 0 To 7
    t() = CoordonnéesCaseJ(No, Xmap, Ymap) ' converti le no de case en coordonnées
               
    t(0) = t(0) + IndiceY(Cycle3) ' coordonnées case adjacente en y
    t(1) = t(1) + IndiceX(Cycle3) ' coordonnées case adjacente en x
               
    DécalageCaseTampon = NoCaseJ(t(1), t(0), Xmap, Ymap) ' converti les coordonnées en n° de case
   
    If DécalageCaseTampon <> -1 Then ' on est pas en dehors de la map
        If ValeurCase(DécalageCaseTampon) = 0 And CaseJ(DécalageCaseTampon).Visible <> False Then ' une autre case conjointe est vide (sauf si c'est une case déjà effacé)
            If Cycle3 <= 3 Then ' seulement les 4 coordonnées cardinales pour effacer les cases
                CaseJ(DécalageCaseTampon).Visible = False ' rendre invisible le bouton
                Call Gangrène(DécalageCaseTampon) ' appel récursif de la procédure
            End If
        Else
            CaseJ(DécalageCaseTampon).Caption = ValeurCase(DécalageCaseTampon) ' affiche les chiffres dans les cases conjointes aux cases vides
        End If
    End If
Next Cycle3

End Sub

Bon courage !


jeudi 26 mai 2005 à 11:52:58 | Re : Recursivité du démineur

missmagou

Tout d'abord merci pour vos réponses.
Econs: j'ai bien compris ton code mais quand on clique sur une case, cela va me balayer uniquement les 8 cases vides qui sont autours et pas toutes les autre cases vides autour non?(je c pas si je me suis bien expliquée dsolée)
3615jenveux: est ce que ton code correspond uniquement à la procedure gangrene si oui, c'est possible d'appeler cette procedure à l'interieure d'elle mm?(la encore je c pas si ma question est comprehensible ms c vrai que j'ai un peu de mal à m'expliquer sorry)
En tt les cas merci à tous les 2 d'avoir pris du tps pr me repondre


jeudi 26 mai 2005 à 11:55:39 | Re : Recursivité du démineur
jeudi 26 mai 2005 à 17:33:04 | Re : Recursivité du démineur

missmagou

excuse 3615jenveux  j suis un peu à l'ouest ces tps ci dc oublie ma question un peu idiote lol et merci pour ton code ca correspond à ce que je cherchais



Cette discussion est classé dans : démineur, recursivité, ptit


Répondre à ce message

Sujets en rapport avec ce message

2 ptit KesTiOns [ par H@lloWin___HiA ] SAlutComment extrait on un bitmaps d'un .RESj'ai une image que je veux extrairePrivate Sub Form_Load()Picture1.Picture = LoadResData(101, "Bitmaps")En J'propose un ptit module [ par Setaou ] => Un chtit module "Génétique" + un autre "Copulation" (ca va de pair :)J'me propose de faire les deux puisque c'est très étroitement lié .Alors, comm ptit boulo pour ptit graphiste [ par | - BLAFARD - | ] ca interresserait qlqun de faire des dessins pour un petit jeu que je suis en train de pondre ?y faudrait faire des dessins animes en 2D toute mignone un ptit PB avec les tableau [ par Djer13 ] bon voilà je debute, et G appris un peu de basic, avant de me faire les dent sur le C++. Fort de mes 3-4 connaissance je me lance dans la création d'u Ptit prob avec DataReport [ par bumba ] Salut,En fait, j'ai un problème avec le DataReport, il n'y a pas moyen d'introduire un DataSource ou un DataMember, donc il ne veux pas non plus s'ouv Besoin d'un ptit peu d'aide! [ par Crazyblinkgirl ] Salut!Je voudrais comparer un entier que lutilisateur tape dans un textbox(var2) avec une autre contenue dans une base(var3) ainsi : if(var2>var3) the Ptit pb avec les ActiveX [ par Starter ] J'aimerai savoir si je suis un cas isoler ou non, mais l'ActiveX que j'ai developper avec VB, n'est compatible qu'avec VB.Si qqun sait comment faire p un ptit coup de main serai le bien venu !! [ par bouboussjunior ] je voulais savoir comment obtenir dans la barre d'outil des icones tels que progressbar, winsocks, ...je sais c pas grand chose mais sa m'aiderai bien pb utilisation DTPICKER avec date [ par tibops ] bsalut j'utilise un DTPICKEr, pour avoir un ptit calendrier pour choisir un date, cepedant je n'arrive a y afficher la date du systeme quand je elance Aidez un ptit lamez du VB siouplé [ par Tomair ] Bon Voila...c'est débile et tout simple mais j'ai juste besoin de savoir comment inclure une variable de type integer ou autre dans un champ string...


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.