J'ai crée un programme, qui semble n'avoir aucune erreur, mais quand je le lance j'obtiens un ecran vide, sans rien
pouvez vous m'aider svp c'est la panique on dois rendre ca vendredi
voici le code ci-joint
#include <stdio.h>
#include <stdlib.h>
#include <windows.h> //permet de mettre des couleurs
#include <time.h>
#define N 12 //le nombre de lignes de l'ile
#define M 10 // le nombre de colones de l'ile
#define pirate1 3
#define pirate2 5
#define pirate3 7
struct Case //on definit la case et ce qu'il peut y avoir dedans
{
int couleur;// 1 bleu, 2 vert
int drapeau; //drapeau ou pas ( 1 oui, 0 non)
int visite; // 0 on n'est pas encore passé dessus, 1 on est passé dessus
int pirate; // 1 pirate, 0 pas pirate
int terre;// 0 eau, 1 terre
};
typedef struct Case sCase;
//on declare ici les differentes fonctions utilisées
void color(int couleur1, int couleur2);//affichage des couleurs
void touches(); // affichages des touches de base
void regles_jeu(); // affichage des règles principales du jeu
void deplacement(char mouv,int *posX, int*posY, int *score, sCase tab[N][M]);//variable qui permet au personnage de se deplacer
void drapeaux(char mouv, int posX,int posY, int *nbredrapeaux, int nbrepirates, sCase tab[N][M]);
void affCarte(sCase tab[N][M],int posX,int posY);
int valide(int pN, int pM, sCase tab[N][M]);
void affcase(sCase);
int nbrepirates(sCase tab[N][M], int posX, int posY);
int lvl1(sCase tab[N][M]);
int lvl2(sCase tab[N][M]);
int lvl3(sCase tab[N][M]);
int jeu1(sCase lvl1map[N][M], int posX, int posY, char mouv, int score, int nbredrapeaux);
int jeu2(sCase lvl2map[N][M], int posX, int posY, char mouv, int score, int nbredrapeaux);
int jeu3(sCase lvl3map[N][M], int posX, int posY, char mouv, int score, int nbredrapeaux);
int gagne(sCase tab[N][M],int nbredrapeaux, int nombre_pirates);
int main()
{
int posX;
int posY;
char choix;
char mouv;
int nbredrapeaux;
int score;
sCase lvl1map[N][M];//carte lvl1
lvl1(lvl1map);
sCase lvl2map[N][M];//carte lvl2
lvl2(lvl2map);
sCase lvl3map[N][M];//carte lvl3
lvl3(lvl3map);
posX = 2;
posY = 3;
lvl1map[posX][posY].visite = 1;
lvl2map[posX][posY].visite = 1;
lvl3map[posX][posY].visite = 1;
score = 0;
nbredrapeaux = 0;
printf("Bienvenue dans le jeu Embuscade\n\n");
printf(" -Pour afficher les differents touches, taper t\n -Pour afficher les regles du jeu, taper r\n -Pour commencer une partie lvl 1, taper p\n -Pour commencer une partie lvl 2, taper n\n -Pour commencer une partie lvl 3, taper m\n");
fflush(stdin);
scanf("%c",&choix);
switch(choix){
case 't' :
system("CLS");
touches();
return main(); //retour au debut du programme
break;
case 'r' :
system("CLS");
regles_jeu();
return main(); //retour au debut du programme
break;
case 'p' :
system("CLS");
jeu1(lvl1map, posX, posY, mouv, score, nbredrapeaux);
return main(); //retour au debut du programme
break;
case 'n' :
system("CLS");
jeu2(lvl2map, posX, posY, mouv, score, nbredrapeaux);
return main(); //retour au debut du programme
break;
case 'm' :
system("CLS");
jeu3(lvl3map, posX, posY, mouv, score, nbredrapeaux);
return main(); //retour au debut du programme
break;
}
return 0;
}//end int main
//definition de la procédure determinant l'affichage des touches utiles
void touches()
{
printf("Voila les differentes touches utiles au cours de la partie:\n");
printf(" a:deplacement en haut vers la gauche\n");
printf(" z:deplacement vers le haut\n");
printf(" e:deplacement en haut vers la droite\n");
printf(" q:deplacement vers la gauche\n");
printf(" d:deplacement vers la droite\n");
printf(" w:deplacement en bas vers la gauche\n");
printf(" s:deplacement vers le bas\n");
printf(" x:deplacement en bas vers la droite\n");
printf(" m:stopper la partie et revenir au menu\n");
printf(" f:placer un drapeau\n");
printf("Le drapeau peut etre retire en replacant un drapeau au meme endroit ce qui annulera l'etape precedente\n\n");
}
//definition de la procédure determinant affichant les règles du jeu
void regles_jeu()
{
printf("Voici les regles du jeu\n\n");
printf("Vous vous retrouvez sur une ile, infestee de pirates qui creent des embuscades\n");
printf("Votre but est d'eviter et de trouver ces embuscades.\n");
printf("Votre liberte de deplacement est limitee a la terre, vous pouvez vous deplacer dans toutes les directions.\n");
printf("Si vous pensez avoir trouve une embuscade, marquez la case concernee d'un petit drapeau. Vous pouvez placer autant de drapeaux qu'il y a d'embuscades.\n\n");
printf("La partie se termine lorsque:\n -vous tombez sur une embuscade: vous avez alors PERDU.\n -vous avez place tous vos drapeaux, et certains sont mals placés: vous avez PERDU.\n -vous avez marque toutes les embuscades d'un drapeau: vous avez GAGNE!\n");
printf("Bonne chance !\n\n");
}
void color(int couleur1,int couleur2)//c'est ce qui permet aux couleurs de s'afficher dans la console
{
HANDLE H=
GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(H,couleur1*16+couleur2);
}
//définition de la procédure qui va afficher une case
void affcase(sCase c)
{
color(c.couleur,c.couleur);
printf(" ");
}
//procedure qui affiche la carte
void affcarte(sCase tab[N][M],int posX,int posY)
{
int a,b;
for(a=0; a<N; a++)
{
for(b=0; b<M; b++)
{
if(a==posX && b==posY)//position du joueur
{
color(4,4); //rouge
printf(" ");
}
else if(tab[a][b].visite==1)//case visitée
{
color(14,14); //jaune
printf(" ");
}
//si un drapeau a été placé sur cette case
else if(tab[a][b].drapeau==1)
{
color(0,2); //noir sur vert
printf(" D ");
}
else
{
affcase(tab[a][b]);
}
}
printf("\n");
}
}
//creation et initialisation de la fonction valide
int valide (int e, int f, sCase tab[N][M])//pour l'empecher d'aller dans l'eau ou sur un drapeau
{
if ((tab[e][f].terre==0))
{
return 1;
}
else if((tab[e][f].drapeau==1))
{
return 2;
}
else
{
return 0;
}
}
void deplacement(char mvmnt, int *dN, int *dM, int *nbre, sCase tab[N][M])
{
int pN;
int pM;
pN = *dN;
pM = *dM;
if((mvmnt=='a'))
{
pN=pN-1;
pM=pM-1;
}
else if((mvmnt=='z'))
{
pN=pN-1;
pM=pM;
}
else if((mvmnt=='e'))
{
pN=pN-1;
pM=pM+1;
}
else if ((mvmnt=='q'))
{
pN=pN;
pM=pM-1;
}
else if((mvmnt=='s'))
{
pN=pN+1;
pM=pM;
}
else if ((mvmnt=='d'))
{
pN=pN;
pM=pM+1;
}
else if ((mvmnt=='w'))
{
pN=pN+1;
pM=pM-1;
}
else if ((mvmnt=='x'))
{
pN=pN+1;
pM=pM+1;
}
valide(pN,pM,tab);
if(((valide(pN,pM,tab))==1)||((valide(pN,pM,tab))==2))
{
printf("Impossible d'aller la ! C'est de l'eau !\n");
system("PAUSE");
}
else if(valide(pN,pM,tab)==0)
{ //on change la position du joeur
*dN=pN;
*dM=pM;
tab[*dN][*dM].visite=1; //la case devient jaune car le joueur est passé dessus
*nbre=*nbre+1; //le socre augmente grace au pointeur du score
}
}
//placement des drapeaux
void drapeaux(char mvmnt, int dN, int dM, int *nbre, int nbrep, sCase tab[N][M])
{
int pN,pM;
pN = dN;
pM = dM;
if((mvmnt=='a'))
{
pN=pN-1;
pM=pM-1;
}
else if((mvmnt=='z'))
{
pN=pN-1;
pM=pM;
}
else if((mvmnt=='e'))
{
pN=pN-1;
pM=pM+1;
}
else if ((mvmnt=='q'))
{
pN=pN;
pM=pM-1;
}
else if((mvmnt=='s'))
{
pN=pN+1;
pM=pM;
}
else if ((mvmnt=='d'))
{
pN=pN;
pM=pM+1;
}
else if ((mvmnt=='w'))
{
pN=pN+1;
pM=pM-1;
}
else if ((mvmnt=='x'))
{
pN=pN+1;
pM=pM+1;
}
valide(pN,pM,tab);
if(valide(pN,pM,tab)==1)
{
printf("Vous ne pouvez pas poser de drapeau sur cette case !!\n");
system("PAUSE");
}
else if(valide(pN,pM,tab)==0) //le code verifie si on peut mettre un drapeay
{
if(*nbre<nbrep)
{
if ((mvmnt=='a')||(mvmnt=='z')||(mvmnt=='e')||(mvmnt=='q')||(mvmnt=='s')||(mvmnt=='d')||(mvmnt=='w')||(mvmnt=='x'))
{
dN=pN; //on affecte la nouvelle position virtuelle à la position réelle
dM=pM;
tab[dN][dM].drapeau=1; //on indique que la case possède un drapeau
*nbre=*nbre+1; //on incrémente le compteur du nombre de drapeaux
}
else
{
printf("Vous ne pouvez pas poser de drapeau sur cette case !!\n");
system("PAUSE");
}
}
}
else if(valide(pN,pM,tab)==2) //si on veut retirer le drapeau
{
dN=pN;//on affecte la nouvelle position virtuelle à la position réelle
dM=pM;
tab[dN][dM].drapeau=0; //il y a pas de drapeau sur la case
*nbre=*nbre-1; //on décrémente le compteur du nombre de drapeauxon dimineu donc le nombre de drapeaux
}
}
//fonction qui indique combien il y a de pirates autour du joueur
int nbrepirates(sCase tab[N][M], int dN, int dM)
{
int a;
int b;
int pirates;//on cree cette variable pour y stocker le nombre de pirates
pirates=0;
//on cree une boucle qui check les lignes et les colonnes
for (a=dN-1; a<dN+2; a++)
{
for(b=dM-1; b<dM+2; b++) //
{
if(tab[a][b].pirate==1)
{
pirates=pirates+1;
}
}
}
return pirates;
}
//procedure qui indique la victoire de la partie :
int gagne(sCase tab [N][M],int nbref, int nbrep)
{
int a;
int b;
int vict=0;
for(a=0; a<N; a++)
{
for(b=0; b<M; b++)
{
if((tab[a][b].drapeau==1)&&(tab[a][b].pirate==1))
{
vict=vict+1;
}
else if (((tab[a][b].drapeau==1)&&(tab[a][b].pirate==0))||((tab[a][b].drapeau==0)&&(tab[a][b].pirate==1)))
{
return 2;
}
}
}
if(vict==nbrep)
{
return 1;
}
return 0;
}
//ouvre le fichier du lvl1
int lvl1(sCase tab[N][M])
{
int a,b;
FILE *lvl1map = NULL;
lvl1map=fopen("lvl1map.txt","r"); //on lit le fichier du lvl1
if (lvl1map == NULL)
{
printf("Impossible d'ouvrir le plateau.\n"); //si fichier vide message d'arreur affiché
}
else
{
for(a=0; a<N; a++)
{
for(a=0; a<M; a++)
{
fscanf(lvl1map,"%d %d %d %d %d",&(tab[a][b].pirate),&(tab[a][b].terre),&(tab[a][b].drapeau),&(tab[b][a].couleur),&(tab[a][b].visite));
fscanf(lvl1map,"\n");
}
}
fclose(lvl1map); //on ferme le fichier
}
return 0;
}
//ouvre le fichier du lvl2
int lvl2(sCase tab[N][M])
{
int a,b;
FILE *lvl2map = NULL;
lvl2map=fopen("lvl2map.txt","r"); //on lit le fichier du lvl1
if (lvl2map == NULL)
{
printf("Impossible d'ouvrir le plateau.\n"); //si fichier vide message d'arreur affiché
}
else
{
for(a=0; a<N; a++)
{
for(a=0; a<M; a++)
{
fscanf(lvl2map,"%d %d %d %d %d",&(tab[a][b].pirate),&(tab[a][b].terre),&(tab[a][b].drapeau),&(tab[b][a].couleur),&(tab[a][b].visite));
fscanf(lvl2map,"\n");
}
}
fclose(lvl2map); //on ferme le fichier
}
return 0;
}
//ouvre le fichier du lvl3
int lvl3(sCase tab[N][M])
{
int a,b;
FILE *lvl3map = NULL;
lvl3map=fopen("lvl3map.txt","r"); //on lit le fichier du lvl1
if (lvl3map == NULL)
{
printf("Impossible d'ouvrir le plateau.\n"); //message d'erreur en cas de fichier vide
}
else
{
for(a=0; a<N; a++)
{
for(a=0; a<M; a++)
{
fscanf(lvl3map,"%d %d %d %d %d",&(tab[a][b].pirate),&(tab[a][b].terre),&(tab[a][b].drapeau),&(tab[a][b].couleur),&(tab[a][b].visite));
fscanf(lvl3map,"\n");
}
}
fclose(lvl3map); //on ferme le fichier
}
return 0;
}
//procedure qui permet de faire le lvl1
int jeu1(sCase lvl1map[N][M], int posX, int posY, char mouv, int score, int nbredrapeaux)
{
do
{
system("CLS");
affcarte(lvl1map,posX,posY); //appel de la procédure d'affichage du plateau
color(15,0); //on remet les couleurs d'affichage initiale
printf("Vous etes actuellement entoure de %d embuscades/pirates\n",nbrepirates(lvl1map,posX,posY));
printf("Vous avez place %d drapeaux\n\n",nbredrapeaux);
printf("Appuyez une touche de deplacement, \nou placez un drapeau en appuyant sur f\n");
fflush(stdin);
scanf("%c",&mouv);
system ("CLS");
if(mouv=='f') //si le joueur tape 'f', on appelle la procédure de placement de drapeaux
{
affcarte(lvl1map,posX,posY);
color(15,0);
printf("Sur quelle case voulez vous placer le drapeau?\n");
fflush(stdin);
scanf("%c",&mouv);
drapeaux(mouv,posX,posY,&nbredrapeaux,pirate1,lvl1map);
}
else //sinon on appelle la procédure déplacement
{
deplacement(mouv,&posX,&posY,&score,lvl1map);
}
if (lvl1map[posX][posY].pirate==1) //si il y a un pirate sur la case ou le joueur est allé
{
printf("Vous avez croisé un pirate !\nVous avez donc perdu\n\nRetour au menu principal\n\n");
return main();
}
else if (nbredrapeaux==pirate1)// on a gagné
{
gagne(lvl1map,nbredrapeaux,pirate1);
if((gagne(lvl1map,nbredrapeaux,pirate1))==1)
{
printf("Bravo! Vous avez gagné !\n");
printf("Vous avez un score est de %d \n", score);
}
else if((gagne(lvl1map,nbredrapeaux,pirate1))==2)
{
printf("Vous avez utilise tous vos drapeaux, et malheureusement, ils sont mal placé, reessayer donc !\n");
}
return main();
}
}
while (mouv !='b');
//si le joueur tape 'p', on quitte la partie en cours
if(mouv=='b')
{
printf("Retour au menu\n");
return 0;
}
return 0;
}
//procedure qui permet de faire le lvl2
int jeu2(sCase lvl2map[N][M], int posX, int posY, char mouv, int score, int nbredrapeaux)
{
do
{
system("CLS");
affcarte(lvl2map,posX,posY); //appel de la procédure d'affichage du plateau
color(15,0); //on remet les couleurs d'affichage initiale
printf("Vous etes actuellement entoure de %d embuscades/pirates\n",nbrepirates(lvl2map,posX,posY));
printf("Vous avez place %d drapeaux\n\n",nbredrapeaux);
printf("Appuyez une touche de deplacement, \nou placez un drapeau en appuyant sur f\n");
fflush(stdin);
scanf("%c",&mouv);
system ("CLS");
if(mouv=='f') //si le joueur tape 'f', on appelle la procédure de placement de drapeaux
{
affcarte(lvl2map,posX,posY);
color(15,0);
printf("Sur quelle case voulez vous placer le drapeau?\n");
fflush(stdin);
scanf("%c",&mouv);
drapeaux(mouv,posX,posY,&nbredrapeaux,pirate2,lvl2map);
}
else //sinon on appelle la procédure déplacement
{
deplacement(mouv,&posX,&posY,&score,lvl2map);
}
if (lvl2map[posX][posY].pirate==1) //si il y a un pirate sur la case ou le joueur est allé
{
printf("Vous avez croisé un pirate !\nVous avez donc perdu\n\nRetour au menu principal\n\n");
return main();
}
else if (nbredrapeaux==pirate2)// on a gagné
{
gagne(lvl2map,nbredrapeaux,pirate2);
if((gagne(lvl2map,nbredrapeaux,pirate2))==1)
{
printf("Bravo! Vous avez gagné !\n");
printf("Vous avez un score est de %d \n", score);
}
else if((gagne(lvl2map,nbredrapeaux,pirate2))==2)
{
printf("Vous avez utilise tous vos drapeaux, et malheureusement, ils sont mal placé, reessayer donc !\n");
}
return main();
}
}
while (mouv !='b');
//si le joueur tape 'p', on quitte la partie en cours
if(mouv=='b')
{
printf("Retour au menu\n");
return 0;
}
return 0;
}
//procedure qui permet de faire le lvl3
int jeu3(sCase lvl3map[N][M], int posX, int posY, char mouv, int score, int nbredrapeaux)
{
do
{
system("CLS");
affcarte(lvl3map,posX,posY); //appel de la procédure d'affichage du plateau
color(15,0); //on remet les couleurs d'affichage initiale
printf("Vous etes actuellement entoure de %d embuscades/pirates\n",nbrepirates(lvl3map,posX,posY));
printf("Vous avez place %d drapeaux\n\n",nbredrapeaux);
printf("Appuyez une touche de deplacement, \nou placez un drapeau en appuyant sur f\n");
fflush(stdin);
scanf("%c",&mouv);
system ("CLS");
if(mouv=='f') //si le joueur tape 'f', on appelle la procédure de placement de drapeaux
{
affcarte(lvl3map,posX,posY);
color(15,0);
printf("Sur quelle case voulez vous placer le drapeau?\n");
fflush(stdin);
scanf("%c",&mouv);
drapeaux(mouv,posX,posY,&nbredrapeaux,pirate3,lvl3map);
}
else //sinon on appelle la procédure déplacement
{
deplacement(mouv,&posX,&posY,&score,lvl3map);
}
if (lvl3map[posX][posY].pirate==1) //si il y a un pirate sur la case ou le joueur est allé
{
printf("Vous avez croisé un pirate !\nVous avez donc perdu\n\nRetour au menu principal\n\n");
return main();
}
else if (nbredrapeaux==pirate3)// on a gagné
{
gagne(lvl3map,nbredrapeaux,pirate3);
if((gagne(lvl3map,nbredrapeaux,pirate3))==1)
{
printf("Bravo! Vous avez gagné !\n");
printf("Vous avez un score est de %d \n", score);
}
else if((gagne(lvl3map,nbredrapeaux,pirate3))==2)
{
printf("Vous avez utilise tous vos drapeaux, et malheureusement, ils sont mal placé, reessayer donc !\n");
}
return main();
}
}
while (mouv !='b');
//si le joueur tape 'p', on quitte la partie en cours
if(mouv=='b')
{
printf("Retour au menu\n");
return 0;
}
return 0;
}
PROGRAMME QUI COMPILE ET SE LANCE MAIS ECRAN VIDE
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.