Actualiser un tableau c
Résolu/Fermé
didy_gwatinik
Messages postés
352
Date d'inscription
samedi 17 novembre 2007
Statut
Membre
Dernière intervention
30 mars 2010
-
8 janv. 2008 à 12:52
mamiemando Messages postés 33387 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 novembre 2024 - 11 janv. 2008 à 17:25
mamiemando Messages postés 33387 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 novembre 2024 - 11 janv. 2008 à 17:25
A voir également:
- Actualiser un tableau c
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Comment faire un tableau - Guide
- Trier un tableau excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
6 réponses
mamiemando
Messages postés
33387
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 novembre 2024
7 803
8 janv. 2008 à 13:52
8 janv. 2008 à 13:52
1) La méthode la plus simple consiste à utiliser deux tableaux :
- un tableau qui stocke les positions des mines, et le cas échéant le nombre de mines présentes sur les cases voisines. On peut imaginer qu'une mine soit codée par la valeur 9 puisqu'il y a au plus 8 cases adjacentes à chaque case.
- un tableau qui stocke les cases découvertes (0 = masqué, 1 = découverte par exemple, 2 = marquée).
2) Une autre solution plus élégante consiste à faire une matrice de structure, chaque structure décrivant l'état d'une case (minée, déminée, nombre de mines alentour etc...).
A chaque itération (ie tentative de déminage) il suffit de parcourir ces deux tableaux afin d'afficher le nouveau tableau de jeu.
Bonne chance
- un tableau qui stocke les positions des mines, et le cas échéant le nombre de mines présentes sur les cases voisines. On peut imaginer qu'une mine soit codée par la valeur 9 puisqu'il y a au plus 8 cases adjacentes à chaque case.
- un tableau qui stocke les cases découvertes (0 = masqué, 1 = découverte par exemple, 2 = marquée).
2) Une autre solution plus élégante consiste à faire une matrice de structure, chaque structure décrivant l'état d'une case (minée, déminée, nombre de mines alentour etc...).
A chaque itération (ie tentative de déminage) il suffit de parcourir ces deux tableaux afin d'afficher le nouveau tableau de jeu.
Bonne chance
Merci beaucoup ça marche au top. j'ai toujours un petit problème :
- Si le nombre de mine alentour est zéro, il faudra révéler le contenu des cases alentour (opération à réitérer tant que l'on trouve des cases sans mines alentour). On affichera le nombre total mines restantes ;
je ne vois pas du tout comment faire j'ai essayé : si mine alentour=0 alors la case devient visible mais comment faire pour rechercher les valeurs alentours?????
- Si le nombre de mine alentour est zéro, il faudra révéler le contenu des cases alentour (opération à réitérer tant que l'on trouve des cases sans mines alentour). On affichera le nombre total mines restantes ;
je ne vois pas du tout comment faire j'ai essayé : si mine alentour=0 alors la case devient visible mais comment faire pour rechercher les valeurs alentours?????
mamiemando
Messages postés
33387
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 novembre 2024
7 803
10 janv. 2008 à 20:45
10 janv. 2008 à 20:45
La méthode la plus simple c'est de faire un appel récursif. Tu fais une fonction découvrir qui est déclenchée quand l'utilisateur veut faire apparaître une case. Si tu as bien structuré ton code elle doit déjà exister et tester si la case en question est minée. Il suffit de rajouter un test pour qui appele récursivement decouvrir sur les cases alentours non découvertes si la case découverte n'est voisine d'aucune case minée.
Si je ne me suis pas trop craquée dans ma récursivité voilà ce qui va se passer :
- quand on atteint un bord du plateau, l'appel est coupé (cas 1 et 2)
- si la case a déjà été découverte, l'appel est aussi coupé (cas 3), donc normalement ton programmera pas à l'infini car il visitera une et une seule fois une case, et ne déclenchera un nouveau jeu d'appels récursifs que si on vient de découvrir une nouvelle case.
Bonne chance
struct case_t{ bool mine; // en c tu peut mettre un short bool decouverte; unsigned nb; // le nombre de mines dans les cases voisines }; struct plateau_t{ unsigned nb_ligne; unsigned nb_colonne; struct case_t **case; } int decouvrir(struct plateau_t *p,const unsigned x,const unsigned y){ unsigned i,j; if(x >= p->nb_colonne) return 1; if(y >= p->nb_ligne) return 2; if(p->case[x][y].decouverte) return 3; // on decouvre une nouvelle case if(p->case[x][y].mine) return 4; case[x][y].nb = true; // en C remplace true par 1 if(p->case[x][y].nb == 0){ for(unsigned i = x -1; i <= x + 1; ++i){ for(unsigned j = x -1; j <= x + 1; ++j){ decouvrir(p,i,j); } } } return 5; }
Si je ne me suis pas trop craquée dans ma récursivité voilà ce qui va se passer :
- quand on atteint un bord du plateau, l'appel est coupé (cas 1 et 2)
- si la case a déjà été découverte, l'appel est aussi coupé (cas 3), donc normalement ton programmera pas à l'infini car il visitera une et une seule fois une case, et ne déclenchera un nouveau jeu d'appels récursifs que si on vient de découvrir une nouvelle case.
Bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai un gros problème je ne gère pas du tout les fonctions, nous n'avons commencer le cours que hier. On ne peut le faire qu'avec des fonctions?
mamiemando
Messages postés
33387
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 novembre 2024
7 803
11 janv. 2008 à 17:25
11 janv. 2008 à 17:25
On ne peut le faire qu'avec des fonctions?
Et à ton avis ce ne sont pas des fonctions ce que j'ai mis dans <3> ? De toute façon les fonctions c'est vraiment la base du C et dans ce cas particulier c'est la manière la plus simple et la plus naturelle de résoudre ton problème.
Bonne chance
Et à ton avis ce ne sont pas des fonctions ce que j'ai mis dans <3> ? De toute façon les fonctions c'est vraiment la base du C et dans ce cas particulier c'est la manière la plus simple et la plus naturelle de résoudre ton problème.
Bonne chance