Problème démineur

pitidragon Messages postés 27 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 21 mai 2008 - 16 avril 2008 à 17:12
pitidragon Messages postés 27 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 21 mai 2008 - 23 avril 2008 à 01:50
Bonjour !

Alors voilà, je dois créer un démineur en C pour mes études. Bon j'ai bien avancé, mais je bloque sur un truc débile !

Je ne vois pas comment faire pour savoir qu'on a gagné, quel test effectuer en fait (ça doit être super simple mais je trouve pas lol).
Pour savoir si je perd c'est simple, c'est quand je tombe sur une mine (pour moi la valeur -1)... mais pour savoir si j'ai gagné je vois pas.

Dans mon programme, je demande au joueur de rentrer les coordonnées d'une case... et j'effectue l'opération jusqu'à ce que le joueur perde (et dans ce cas j'affiche un message ainsi que la grille). Mais il faudrait que je redemande ceci jusqu'à ce que le joueur perde, OU jusqu'à ce qu'il gagne.

Donc voilà, si quelqu'un pouvait me dire quel test effectuer ça serait cool :) Merci d'avance !

14 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
16 avril 2008 à 17:21
Salut

C'est simple de savoir si on a gagne: tu connais le nombre de cases totales, le nombre de mines, il suffit donc d'incrementer une variable a chaque nouvelle case decouverte et tu peux faire ton test.

A+
Mon site internet : http://pistol.petesampras.free.fr
0
pitidragon Messages postés 27 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 21 mai 2008
21 avril 2008 à 16:15
Re!

Je suis désolé, mais je n'arrive pas à le faire. Je vois l'idée mais je n'arrive pas à l'écrire en fait. Cela m'embête vraiment de bloquer sur un truc aussi simple (à priori). Je dois le rendre bientôt et je sais pas quoi faire donc je mets un lien sur ce que j'ai fait (c'est la version de base, elle fonctionne il manque juste ça).

http://rapidshare.com/files/109248543/version_1.rar.html

Si une âme charitable pouvait y jeter un coup d'oeil et me dire comment faire ça serait vraiment sympa :)

Merci d'avance !
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
21 avril 2008 à 19:01
Salut
Pas arriver a télécharger ton fichier, met la source ici.

Mon site internet : http://pistol.petesampras.free.fr
0
pitidragon Messages postés 27 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 21 mai 2008
21 avril 2008 à 19:08
Ah bon, pourtant ça fonctionne chez moi, je remet le lien au cas ou... c'est :

http://rapidshare.com/files/109248543/version_1.rar.html
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pitidragon Messages postés 27 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 21 mai 2008
21 avril 2008 à 19:17
J'ai réussi à la mettre sur le site aussi
http://www.cppfrance.com/codes/DEMINEUR_46420.aspx
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
21 avril 2008 à 19:24
OK ca a marcher, j'ai eu du mal a déchiffrer l'image

Bon tu peux créer une variable NbCaseDecouverte initialiser a 0 que tu passeras en parametre (l'adresse bien sur)a la fonction resoudre  puis a la fonction affichecasevide. Tu l'incrementes a chaque fois que tu decouvres une case et dans ton main tu n'as plus qu'a faire ton test: if(NbCaseTot-NbCaseDecouverte-NbMine==0)printf("GAGNER\n");

A+
Mon site internet : http://pistol.petesampras.free.fr
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
21 avril 2008 à 19:26
As ca tu n'aurais pas du. Poster une source pas fini c'est juste bon a énerver les admins.

Je voulais juste que tu mettes ton code dans ce thread...

Mon site internet : http://pistol.petesampras.free.fr
0
pitidragon Messages postés 27 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 21 mai 2008
21 avril 2008 à 20:06
Ok donc si j'ai bien compris (que je fasse pas de bétises lol) je dois faire ça :

Dans mon main je crée une variable int NbCaseDecouverte;
Ensuite dans les fonctions resoudre et affichecasevide je rajoute en paramètre &NbCaseDecouverte et je l'incrémente chaque fois que je découvre une case en mettant NbCaseDecouverte++;
Je fais mon test dans le main et c'est bon.

C'est bien ça ?

Je te remercie beaucoup de ton aide en tout cas :)
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
21 avril 2008 à 20:59
Yep tu as bien résumé la situation.

A+
Mon site internet : http://pistol.petesampras.free.fr
0
pitidragon Messages postés 27 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 21 mai 2008
21 avril 2008 à 22:28
Bon j'ai fait ce que tu m'as conseillé mais ça ne fonctionne pas :( Je pense que je fais une erreur avec les * ou les & mais je ne sais pas laquelle).

http://rapidshare.com/files/109346270/version_1.rar.html

Avec cette modif j'ai pleins d'erreurs de compilation mais même après les avoir corrigés ça bugge donc je dois me planter quelque part.
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
21 avril 2008 à 23:13
bon voila un petit complément sur les pointeurs:

void fonct(int *i)
{
  //i est un pointeur maintenant
  on accède a sa valeur par *i;
  *i=1;

}
int main()
{
int i=0;
fonct(&i);
printf("%i",i);//affiche 1
return 1;
}
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
21 avril 2008 à 23:17
Pour ton code essaye ca:

.......
        affiche_case_vide(d,l,c,nbl,nbc,nb_case_decouverte);   nb_case_decouverte est un pointeur =>pas besoin de &
    }

    else
    {
        d[l][c].affiche=true;
        *nb_case_decouverte+=1;    //ATTENTION si tu mets *nb_case_decouverte++, tu incremente le pointeur pas la variable pointé.
    }
    return(0);
}

void affiche_case_vide(Demineur d, int l, int c, int nbl, int nbc, int *nb_case_decouverte)
{   
    d[l][c].affiche=true;
   * nb_case_decouverte+=1;

    if(l==0 && c==0)
    {
        if(d[l][c+1].valeur==0 && d[l][c+1].affiche==false)
        {
            d[l][c+1].affiche=true;
            affiche_case_vide(d,l,c+1,nbl,nbc,nb_case_decouverte);
.....

A+

Mon site internet : http://pistol.petesampras.free.fr
0
pitidragon Messages postés 27 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 21 mai 2008
23 avril 2008 à 01:42
Bonsoir !

Bon, tout fonctionne, ma version de base (niveau facile), ainsi que ma 1ère évolution (différents niveaux + un mode personnalisé). Mais (il y a toujours un mais...) j'ai un petit soucis, que je ne comprend absolue pas, enfin c'est super bizarre. Je m'explique :

Pour tester mon jeu, je lance une partie en mode perso, taille 20x20 avec 0 mines. Je devrais donc avoir que des cases vides, ben non !
Sur ma 1ère ligne, aux colonnes 8, 9 et 10, j'ai la valeur 1 au départ (et donc s'il y a des mines à côtés dans une partie normale j'ai un décalage de +1).

J'ai beau cherché je vois pas d'où ça vient cette chose ! Ce bug est constaté dans la version que j'ai posté sur un message précédent. Si quelqu'un veux bien y jeter un oeil ça serait très gentil parce que je n'y comprend rien lol !

ps : j'aurais besoin dun peu d'aide pour avancer, un petit conseil, mais je demanderais quand j'aurais réglé ça :)

Merci d'avance ^^
0
pitidragon Messages postés 27 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 21 mai 2008
23 avril 2008 à 01:50
Je met un lien vers la dernière version que j'ai fait où il y a le mode personnalisé (pratique pour tester mon bug).

http://rapidshare.com/files/109658574/D_mineur.rar.html
0
Rejoignez-nous