Partage
  • Partager sur Facebook
  • Partager sur Twitter

PROGRAMME QUI COMPILE ET SE LANCE MAIS ECRAN VIDE

Sujet résolu
    14 mai 2019 à 19:18:41

    Bonsoir,

    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;
    }
    
    
    
    
    • Partager sur Facebook
    • Partager sur Twitter

    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.
    • Editeur
    • Markdown