Aide au programme de démineur en c

Fermé
zincus Messages postés 4 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 13 mars 2007 - 12 mars 2007 à 12:46
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 - 24 juin 2008 à 10:07
salut

j'ai essayé de réaliser un programme sur le démineur ùais des érreures m'enpêche d'envanvées.
voici le code

geshi {c}
#define USE_TI89
#define USE_TI92PLUS
#define SAVE_SCREEN
#define VIDE 0
#define DRAPEAU 12
#define INCONNU 25
#define GAGNE 1
#define PERDU 2
#define OUI 15
#define NON 21
#include <tigcclib.h>

short victoire; //Status de la victoire
short champ[11][11], demin[11][11]; //Champ de mine et de decouverte de 9 de coté (on ignore champ[0] champ[11] etc.. qui servent pour compte)
short drapeau;

void cv (void);
void grille (void); //dessine la grille
void dessine (short, short); //dessine le contenu des grilles a chaque fois qu une touche(utile) est pressée
void minage (void); //mine aléatoirement champ de 10 mines
void deminage (short, short); //lance le déminage de demin[x][y]
short compte (short, short); //retourne le nombre de mines autour de champ[x][y]
void recherche (short, short); //découvre une plaine vide
/*void point (short, short); //trace un pt de 4 pixer au centre d une case vide*/
void drap (short x, short y); //dessine le drapeau (une croix)
void intro(void);

int _main(void)
{
LCD_BUFFER sauvegarde_ecran;
LCD_save(sauvegarde_ecran); // sauve l ecran avant de lancer l appli
extern short victoire;
extern short demin[][];
int c;
short x, y;
extern short drapeau;
victoire = VIDE;
intro ();
debut:
x = y = 1;
drapeau = 10;
minage (); //mine champ[][] de 10 mines et remet demin[][] a inconnuu
grille (); //dessine la grille
do {
dessine (x, y); //dessine le terrain avec la grille et tout
switch (c = ngetchx ()){
case '0':
return 0;
case 263: //touche clear : on recommence la partie
goto debut;
case 338: //fleche gauche
if (x > 1)
--x;
break;
case 344: //fleche droite
if (x < 9)
++x;
break;
case 337: //fleche haut
if (y > 1)
--y;
break;
case 340: //fleche bas
if (y < 9)
++y;
break;
case 268: // touche F1: demine
if (demin[x][y] == INCONNU)
deminage (x, y);
break;
case 269: //touche F2: met un drapeau
if (demin[x][y] == DRAPEAU){
++drapeau;
demin[x][y] = INCONNU;
break;
}
else if (demin[x][y] == INCONNU && drapeau > 0){
demin[x][y] = DRAPEAU;
--drapeau;
if (drapeau == 0)
cv();
}
break;
}
}
while (victoire == VIDE);
ClrScr ();
MoveTo (5, 30);
if (victoire == GAGNE)
printf ("Bravo!! \n \nTu as deminé le terrain!");
else if (victoire == PERDU)
printf ("!!! BOOM !!!\n \nTu as marché sur une mine!");
else
printf ("BUG\nvictoire: %d \n demin: %d \n champ: %d \n", victoire, demin[x][y], champ[x][y]);
ngetchx ();
LCD_restore(sauvegarde_ecran); // remet lecran home de la ti
return 0;
}

void intro (void)
{
int i = 0;
ClrScr ();
printf ("F1: déminer\n\nF2: mettre/enlever un \n drapeau\n\nCLEAR: nouvelle partie\n\n0: quitter");
while (i < 3000)
++i;
ngetchx ();
}

void grille (void) //dessine la grille
{
extern short drapeau;
int i = 0;
while (i <= 100){
DrawLine (1, i, 100, i, A_NORMAL); //dessin des lignes horizontales
i += 11;
}
i = 1;
while (i <= 100){
DrawLine (i, 1, i, 100, A_NORMAL); //dessin des lignes horieontales
i += 11;
}
MoveTo (103, 10);//affiche le nombre de mines restant à placer
printf("mines: %d", drapeau);
return;
}

void dessine (short xx, short yy) //dessine le contenu et le curseur a la case [x][y]
{
extern short demin[][];
static unsigned char curseur[] = {0x3C, 0x42, 0x81, 0x99, 0x99, 0x81, 0x42, 0x3C}; //sprite du curseur de deminage
static unsigned char terre[] = {0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33}; //sprite sur un terrain non devoilé
short x, y;
ClrScr ();
grille ();
for (x = 1; x <= 9; ++x)
for (y = 1; y <= 9; ++y){
if (demin[x][y] <= 8 && demin[x][y] >=1){ //si la case est a cote d un ou plusieurs mines
char buffer[3];
sprintf (buffer, "%d", demin[x][y]);
DrawStr ((11 * x) - 8, (11 * y) - 8, buffer, A_NORMAL);
}
else if (demin[x][y] == INCONNU)
Sprite8((11 * x - 8), (11 * y - 9), 8, terre, LCD_MEM, SPRT_XOR);
else if (demin[x][y] == DRAPEAU)
drap (x, y);
}
Sprite8((11 * xx - 8), (11 * yy - 9), 8, curseur, LCD_MEM, SPRT_OR);
Sprite8((11 * xx - 8), (11 * yy - 9), 8, curseur, LCD_MEM, SPRT_AND); //dessine le curseur
return;
}

void drap (short x, short y)
{
DrawLine (x * 11 -2, y * 11 - 2, x * 11 - 9, y * 11 - 9, A_NORMAL); // dessine une croix (le drapeau) a la case x y
DrawLine (x * 11 -2, y * 11 - 9, x * 11 - 9, y * 11 - 2, A_NORMAL);
}

void minage (void) //initialise le champ de mine et de deminage
{
extern short demin[][], champ[][];
short x, y, mine = 10;
int n;
for (x = 0; x <= 10; ++x){
for (y = 0; y <= 10; ++y){
demin[x][y] = INCONNU; //met demin[][] a inconnu
champ[x][y] = NON; //met champ[][] a NON meme les 11 et 0 car compte
}
}

do{
for (x = 1; x <= 9; ++x)
for (y = 1; y <= 9; ++y)
if ((n = rand()) < 200 && champ[x][y] == NON && x <= 9 && x >= 1 && y <= 9 && y >= 1) { //place 10 mines au hasard sur champ[][]
champ[x][y] = OUI;
--mine;
}
}
while (mine > 0);
/*
champ [2][2] = OUI;
champ [3][3] = OUI;
champ [4][4] = OUI;
champ [5][5] = OUI;
champ [6][6] = OUI;*/
return;
}

void deminage (short x, short y) //tente de deminer la case
{
extern short victoire;
extern short demin[][], champ[][];
if (champ[x][y] == OUI){
victoire = PERDU;
return;
}
demin[x][y] = compte (x, y);
if (demin[x][y] != VIDE)
return;
demin[x][y] = INCONNU; //pour que la recherche ne croie pas qu elle a deja cherché ici
recherche (x, y); //il n'y a pa de mine aux alentours, on lance la recherche d'etendues vides

return;
}

short compte (short x, short y)
{
extern short champ[][];
short n = 0; //nombre de mine adjacentes
signed short i, j;
for (i = -1; i <= 1; ++i)
for (j = -1; j <= 1; ++j)
if (champ[x + i][y + j] == OUI)
++n;
return n;
}

void recherche (short x, short y) //recherche et devoilage de grandes etendues vides, elle s'apelle recursivemment
{
extern short demin[][];
if (demin[x][y] != INCONNU)
return; //la fonction a deja cherché ici ou le joueur connait cette case, la fonction quitte
if ((demin[x][y] = compte (x, y)) == VIDE){
signed short i, j;
for (i = -1; i <= 1; ++i)
for (j = -1; j <= 1; ++j)
recherche (x + i, y + j); //recherche aux alentours
}
}

void cv (void)
{
extern short victoire, champ[][], demin[][];
short x, y;
victoire = GAGNE;
for (x = 1; x <= 9 ; ++x)
for (y = 1; y <= 9 ; ++y)
if ((demin[x][y] == DRAPEAU && champ[x][y] == NON) || (demin[x][y] != DRAPEAU && champ[x][y] == OUI))
victoire = VIDE;
return;
}
A voir également:

5 réponses

andejen Messages postés 148 Date d'inscription jeudi 9 juin 2005 Statut Membre Dernière intervention 30 juillet 2008 22
12 mars 2007 à 12:48
Quelles sont ces erreurs?
0
zincus Messages postés 4 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 13 mars 2007
12 mars 2007 à 18:46
salut,
ça me marque trop de variable non déclarer.sans les fichiers d'entêtes.
merci
0
andejen Messages postés 148 Date d'inscription jeudi 9 juin 2005 Statut Membre Dernière intervention 30 juillet 2008 22
12 mars 2007 à 23:35
tu peux copier exactement les erreurs de ton compilo ici plz?
0
zincus Messages postés 4 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 13 mars 2007
13 mars 2007 à 19:46
voici les erreurs
Compilateur: Default compiler
Exécution de gcc.exe...
gcc.exe "C:\Documents and Settings\Administrateur\Mes documents\demin.c" -o "C:\Documents and Settings\Administrateur\Mes documents\demin.exe" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"
C:\Documents and Settings\Administrateur\Mes documents\demin.c:4:22: tigcclib.h: No such file or directory
C:\Documents and Settings\Administrateur\Mes documents\demin.c: In function `main':
C:\Documents and Settings\Administrateur\Mes documents\demin.c:35: error: `LCD_BUFFER' undeclared (first use in this function)
C:\Documents and Settings\Administrateur\Mes documents\demin.c:35: error: (Each undeclared identifier is reported only once
C:\Documents and Settings\Administrateur\Mes documents\demin.c:35: error: for each function it appears in.)
C:\Documents and Settings\Administrateur\Mes documents\demin.c:35: error: syntax error before "sauvegarde_ecran"
C:\Documents and Settings\Administrateur\Mes documents\demin.c:36: error: `sauvegarde_ecran' undeclared (first use in this function)

C:\Documents and Settings\Administrateur\Mes documents\demin.c:73: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:77: error: invalid use of array with unspecified bounds

C:\Documents and Settings\Administrateur\Mes documents\demin.c:81: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:84: error: invalid use of array with unspecified bounds

C:\Documents and Settings\Administrateur\Mes documents\demin.c:85: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:101: error: invalid use of array with unspecified bounds

C:\Documents and Settings\Administrateur\Mes documents\demin.c: In function `grille':
C:\Documents and Settings\Administrateur\Mes documents\demin.c:122: error: `A_NORMAL' undeclared (first use in this function)

C:\Documents and Settings\Administrateur\Mes documents\demin.c: In function `dessine':
C:\Documents and Settings\Administrateur\Mes documents\demin.c:145: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:145: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:147: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:148: error: `A_NORMAL' undeclared (first use in this function)
C:\Documents and Settings\Administrateur\Mes documents\demin.c:150: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:151: error: `LCD_MEM' undeclared (first use in this function)
C:\Documents and Settings\Administrateur\Mes documents\demin.c:151: error: `SPRT_XOR' undeclared (first use in this function)
C:\Documents and Settings\Administrateur\Mes documents\demin.c:152: error: invalid use of array with unspecified bounds

C:\Documents and Settings\Administrateur\Mes documents\demin.c:155: error: `SPRT_OR' undeclared (first use in this function)
C:\Documents and Settings\Administrateur\Mes documents\demin.c:156: error: `SPRT_AND' undeclared (first use in this function)

C:\Documents and Settings\Administrateur\Mes documents\demin.c: In function `drap':
C:\Documents and Settings\Administrateur\Mes documents\demin.c:162: error: `A_NORMAL' undeclared (first use in this function)
C:\Documents and Settings\Administrateur\Mes documents\demin.c: In function `minage':
C:\Documents and Settings\Administrateur\Mes documents\demin.c:173: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:174: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:181: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:182: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c: In function `deminage':
C:\Documents and Settings\Administrateur\Mes documents\demin.c:200: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:204: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:205: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:207: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c: In function `compte':
C:\Documents and Settings\Administrateur\Mes documents\demin.c:220: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c: In function `recherche':
C:\Documents and Settings\Administrateur\Mes documents\demin.c:228: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:230: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c: In function `cv':
C:\Documents and Settings\Administrateur\Mes documents\demin.c:245: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:245: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:245: error: invalid use of array with unspecified bounds
C:\Documents and Settings\Administrateur\Mes documents\demin.c:245: error: invalid use of array with unspecified bounds

Exécution terminée
0

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

Posez votre question
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 3
24 juin 2008 à 10:07
Bonjour Zincus. D'apres mes recherches sur ce site j'ai pu constater que t'as déjà programmé un demineur. je sais pas si tu l'as termine ou pas, mais de toute façon je voudrais qu'on echange un peu. Moi je dois le programmer en C et on m'a chargé d'ecrire la fonction affichage. Serait-il possible que tu me donne un coup de main?
0