IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Case de Démineur


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Case de Démineur
    Bonjour tout le monde,

    Je suis entrain de développer le jeu célebre jeu de Démineur. Je voulais réaliser une fonction qui me permet d'ouvrir les cases autour si la case cliquée etait une case vide. Mon probleme c'est que je n'arrive pas à dépasser la case cliqué. Ma fonction est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Case[,] c = new Case[15, 20]; 
    //.....
    //......
    private void CaseClick( object sender, MouseEventArgs e)
            {
               Case c = sender as Case;
                 if (c.valeur == Valeur.val0)
                 {
    //Pour ouvrir 8 cases au tour
                        for (int row = 0; row < 4; row++)
                            for (int col = 0; col < 4; col++)
                            {
                                foreach (int Nlig in c.ligne) //c.ligne: une liste contenant le numéro de ligne de la case cliquée
                                                                //selon la grille du jeu.  
     
                                    if (Nlig + 1 >14 || Nlig - 1 < 0) continue;     //débordement de la grille en ligne.
                                    else if (c.etat == Etat.isOpened) continue;//Pour savoir si la case est ouverte
     
                                    else if (c.valeur != Valeur.isMine) continue;//Si la case n'est pas minée.
                                { c.Open();  }//Permet d'ouvrir une seule case.
     
                                foreach (int Ncolo in c.colonne)//c.colonne: une liste qui contient  le numero de la colonne qui a été cliquée.
                                    if (Ncolo + 1 > 19 || Ncolo - 1 < 0) continue;//debordement de la grile en colonne.
                                    else if (c.etat == Etat.isOpened) continue;
                                    else if (c.valeur == Valeur.isMine) continue;
                                    { c.Open(); }
     
                  }
           }
    Voilà mon programme. Ma boucle tourne autour d'une seule case et je n'arrive pas à accéder à la case suivante.

    Merci à l'avance à quiconque peut m'aider à trouver une solution

  2. #2
    Membre du Club
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 44
    Points
    44
    Par défaut
    salut,
    il faut que chacune de tes cases comprennent deux fonctions:
    -renvoi moi les cases Limitrophes.
    -Nombre de mines limitrophes.
    -si la case est visible.

    Ta case cliquée te renvoi la liste des cases limitrophes.
    De chacune de ces cases tu appel la fonction renvoi moi les cases limitrophes.
    Ainsi tu peux parcourir tout ton tableau.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Personnellement, je ne pense pas que ce soit à ta case de connaître ses voisines, mais à la classe qui gère le "plateau de jeu".

    Quand la personne clique sur une case, tu appelles une méthode RevelerCase(Case case) qui fait case.Reveler(); puis qui regarde EstVide(); vaut vrai. Si c'est le cas, tu prends toutes les cases autour ( et tu appelles cette même méthode récursivement pour que cette logique sur propage

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Merci à vous deux Maxime et Ullur, je veux ajouter cette methode et vous tiendrai au courant.

Discussions similaires

  1. [MIGRATION] champ de type "case à cocher"
    Par The_Nail dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 10/05/2011, 11h07
  2. Démineur: détection des cases vides
    Par Angerbode dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 07/02/2008, 14h24
  3. [VB6]rajout d'une case en haut à droite...
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 02/09/2003, 10h33
  4. Réponses: 6
    Dernier message: 26/01/2003, 13h45
  5. case sensible
    Par zdra dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/11/2002, 20h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo