Il y a actuellement 76 visiteurs
Mercredi 28 Juillet 2021
accueilactualitésdossierscomparer les prixtélécharger gratuitement vos logicielsoffres d'emploiforum informatique
Connexion
Créer un compte

Souci puissance 4 en C

Besoin d'aide pour configurer un serveur ? Vous souhaitez obtenir des conseils pour référencer votre site ? Un petit souci pour accéder à votre FTP ? Des soucis de programmation en PHP / ASP / HTML / XHTML / XML / XSLT / CSS / ReactJS / AngularJS / VueJS / CGI / PERL / C / MySQL / PostgreSQL ??? Nous avons peut-être la solution dans ce forum ...

Souci puissance 4 en C

Message le 09 Jan 2012 15:49

Bien le bonjour à tous,

Voilà, j'ai un projet à réaliser pour l'école. Je dois faire puissance 4 en utilisant des modules, procédures/fonctions.
J'ai d'abord réalisé mon programme sur une seule page et il fonctionne correctement cependant je trouve ça trop illisible. C'est pourquoi j'ai décidé de le faire par modules séparés (xxx.h). Et maintenant, lorsque je lance le jeu, après avoir gagné il reset automatiquement la grille et continue le jeu. J'aimerais juste qu'il quitte le jeu.

Voici les codes:
(Je n'ai pas poster les .h car ce sont juste les prototypes)

JEU.C
Code: Tout sélectionner
/*Librairies standards*/
#include<stdio.h>
#include<stdlib.h>

/* Module spécifique au fonctionnement de la procédure*/
#include"jeu.h"


/* Debut du programme jeu */
void jeu()
{

/*Declaration des variables */
int lignes,colonnes,choix;
int hauteur0,hauteur1,hauteur2,hauteur3,hauteur4,hauteur5,hauteur6,choix1;
int jeu[7][6];
int gagnant1, gagnant2;


/*Initialisation de certaines variables*/
gagnant1=0;
gagnant2=0;
hauteur0=0;hauteur1=0;hauteur2=0;hauteur3=0;hauteur4=0;hauteur5=0;hauteur6=0;


/* ###################################
########## INITIALISATION ############
################################### */
initialisation(jeu);                       //Initialisation du plateau de jeu



/* ######################################
############ AFFICHAGE PLATEAU ##########
###################################### */
affichagePlateau(jeu);                //Affichage du plateau de jeu vide


/*Tant qu'un joueur n'a pas gagne le programme demande de jouer*/
do
{

    /* ######################################
    ################ JOUEUR 1 ###############
    ###################################### */

    /* ######################################
    ############ RECUP NR COLONNE ###########
    ###################################### */
    choix = nrColonneJ1(jeu, choix, hauteur0, hauteur1, hauteur2, hauteur3, hauteur4, hauteur5, hauteur6, choix1);  //Recupere le numéro de la colonne indiqué par le joueur et insert le pion.


    /* ######################################
    ############ VERIFIER NR COLONNE ########
    ###################################### */
    gagnant1 = verifResultatJ1(jeu, gagnant1); //Vérifie les colonnes si le joueur 1 à gagne.


    /* ######################################
    ############ AFFICHAGE PLATEAU ##########
    ###################################### */
    affichagePlateau(jeu);                      //Affiche le plateau de jeu avec les pions.


    /* On incremente la hauteur d'une colonne a chaque fois que celle si est jouee:*/
    if(choix==0)
        jeu[hauteur0++];

    if(choix==1)
        jeu[hauteur1++];

    if(choix==2)
        jeu[hauteur2++];

    if(choix==3)
        jeu[hauteur3++];

    if(choix==4)
        jeu[hauteur4++];

    if(choix==5)
        jeu[hauteur5++];

    if(choix==6)
        jeu[hauteur6++];

    /*Test pour vérifier si le joueur 1 à gagne*/
    if(gagnant1 == 1)
        {
            testfinJ1(gagnant1);
            break;
        }
    /****************************************************************************************************/

    /* ######################################
    ################ JOUEUR 2 ###############
    ###################################### */

    /* ######################################
    ############ RECUP NR COLONNE ###########
    ###################################### */
    choix1 = nrColonneJ2(jeu, choix, hauteur0, hauteur1, hauteur2, hauteur3, hauteur4, hauteur5, hauteur6, choix1); //Recupere le numéro de la colonne indiqué par le joueur et insert le pion.


    /* ######################################
    ############ VERIFIER NR COLONNE ########
    ###################################### */
    gagnant2 = verifResultatJ2(jeu, gagnant2); //Vérifie les colonnes si le joueur 2 à gagne.


    /* ######################################
    ############ AFFICHAGE PLATEAU ##########
    ###################################### */
    affichagePlateau(jeu);                     //Affiche le plateau de jeu avec les pions.

    /* On incremente la hauteur d'une colonne a chaque fois que celle si est jouee:*/
    if(choix1==0)
        jeu[hauteur0++];

    if(choix1==1)
        jeu[hauteur1++];

    if(choix1==2)
        jeu[hauteur2++];

    if(choix1==3)
        jeu[hauteur3++];

    if(choix1==4)
        jeu[hauteur4++];

    if(choix1==5)
        jeu[hauteur5++];

    if(choix1==6)
        jeu[hauteur6++];

    /*Test pour vérifier si le joueur 2 à gagne*/
    if(gagnant2==2)
    {
        testfinJ2(gagnant2);
        break;
    }
} while(gagnant1!=1 || gagnant2!=2);


}

INITIALISATION.C
Code: Tout sélectionner
/* ###################################################################################
################################### INITIALISATION ###################################
################################################################################### */
#include<stdio.h>

void initialisation(int (*jeu)[6])
{

/*Declaration des variables */
int lignes, colonnes;

/* Initialisation du tableau où toutes les cases prennent la valeur 0*/
    for(lignes=0;lignes<7;lignes++)
    {
        for(colonnes=0;colonnes<=6;colonnes++)
        {
        jeu[lignes][colonnes]=0;
        }
    }
}


AFFICHAGEPLATEAU.C
Code: Tout sélectionner
/* ###################################################################################
################################# AFFICHAGE PLATEAU ##################################
################################################################################### */
#include<stdio.h>

void affichagePlateau(int (*jeu)[6])
   {

/*Declaration des variables */
   int colonnes, lignes;

   /*Affichage du plateau de jeu*/
   printf("\n");
   printf("  0   1   2   3   4   5   6  \n");
   printf("|===|===|===|===|===|===|===|\n");
      for(colonnes=5;colonnes>=0;colonnes--)
      {
         for(lignes=0;lignes<7;lignes++)
         {
            printf("| %d ",jeu[lignes][colonnes]);
         }

      printf("|\n");
      printf("|===|===|===|===|===|===|===|\n");
      }

   }

VERIFNUMCOL.C
Code: Tout sélectionner
/* ###################################################################################
############################# RECUPERER NR DE COLONNE J1 #############################
################################################################################### */
#include<stdio.h>

/*Declaration des variables */
int nrColonneJ1(int (*jeu)[6], int choix, int hauteur0, int hauteur1, int hauteur2, int hauteur3, int hauteur4, int hauteur5, int hauteur6, int choix1)
   {
   /*Le joueur 1 joue*/
    do
    {
    printf("\nA vous de jouer Joueur 1, donner un numero de colonne (de 0 a 6):\n");
    scanf("%d",&choix);
    printf("\n");
        /*Test sur la hauteur des colonnes, si elle sont remplies ou non*/
        if((choix==0 && hauteur0>5)|| (choix==1 && hauteur1>5) || (choix==2 && hauteur2>5) || (choix==3 && hauteur3>5) || (choix==4 && hauteur4>5) || (choix==5 && hauteur5>5) || (choix==6 && hauteur6>5))
        {
        printf("\a\ala colonne %d est pleine, Joueur 1 donner un numero de colonne autre que %d \n",choix1,choix);
        choix = -1;
        }
    }while(choix<0 || choix>6);

   /*Donne la valeur 1 a la case jouee par le joueur 1*/
    if(choix==0)
        jeu[choix][hauteur0]=1;

    if(choix==1)
        jeu[choix][hauteur1]=1;

    if(choix==2)
        jeu[choix][hauteur2]=1;

    if(choix==3)
        jeu[choix][hauteur3]=1;

    if(choix==4)
        jeu[choix][hauteur4]=1;

    if(choix==5)
        jeu[choix][hauteur5]=1;

    if(choix==6)
        jeu[choix][hauteur6]=1;

   return choix;
   }

/* ###################################################################################
############################# RECUPERER NR DE COLONNE J2 #############################
################################################################################### */

int nrColonneJ2(int (*jeu)[6], int choix, int hauteur0, int hauteur1, int hauteur2, int hauteur3, int hauteur4, int hauteur5, int hauteur6, int choix1)
   {

   /*Le joueur 2 joue*/
    do
    {
    printf("\nA vous de jouer Joueur 2, donner un numero de colonne (de 0 a 6):\n");
    scanf("%d",&choix1);
    printf("\n");

        /*Test sur la hauteur des colonnes, si elle sont remplies ou non*/
        if((choix1==0 && hauteur0>5)|| (choix1==1 && hauteur1>5) || (choix1==2 && hauteur2>5) || (choix1==3 && hauteur3>5) || (choix1==4 && hauteur4>5) || (choix1==5 && hauteur5>5) || (choix1==6 && hauteur6>5))
        {
        printf("\a\ala colonne %d est pleine, Joueur 2 donner un numero de colonne autre que %d \n",choix1,choix);
        choix1 = -1;
        }
    }while(choix1<0 || choix1>6);

   /*Donne la valeur 2 a la case jouee par le joueur 2*/
    if(choix1==0)
        jeu[choix1][hauteur0]=2;

    if(choix1==1)
        jeu[choix1][hauteur1]=2;

    if(choix1==2)
        jeu[choix1][hauteur2]=2;

    if(choix1==3)
        jeu[choix1][hauteur3]=2;

    if(choix1==4)
        jeu[choix1][hauteur4]=2;

    if(choix1==5)
        jeu[choix1][hauteur5]=2;

    if(choix1==6)
        jeu[choix1][hauteur6]=2;


   return choix1;
   }


VERIFRESULTAT.C
Code: Tout sélectionner
/* ###################################################################################
############################# VerifierResultatJ1 #######################################
################################################################################### */
#include<stdio.h>
int verifResultatJ1(int (*jeu)[6], int gagnant1)
{

/*Declaration des variables */
int lignes, colonnes;

/*Verification horizontale pour savoir si le joueur a gagne:
on balaye toutes les lignes de 0 a 6 en verifiant 4 cases a chaque fois.
Si 4 cases qui se suivent valent 1 alors gagnant1 prend pour valeur 1*/

    for(lignes=0;lignes<4;lignes++)
    {
        for(colonnes=0;colonnes<6;colonnes++)
        {
            if(jeu[lignes][colonnes]==1 && jeu[lignes+1][colonnes]==1 && jeu[lignes+2][colonnes]==1 && jeu[lignes+3][colonnes]==1)
            gagnant1=1;
        }
    }


/*Meme chose mais verticalement maintenant*/
for(lignes=0;lignes<7;lignes++)
    {
        for(colonnes=0;colonnes<3;colonnes++)
        {
            if(jeu[lignes][colonnes]==1 && jeu[lignes][colonnes+1]==1 && jeu[lignes][colonnes+2]==1 && jeu[lignes][colonnes+3]==1)
            gagnant1=1;
        }
    }


/*En diagonale bas gauche vers haut droit*/
    for(lignes=0;lignes<7;lignes++)
    {
        for(colonnes=0;colonnes<6;colonnes++)
        {
            if(jeu[lignes][colonnes]==1 && jeu[lignes+1][colonnes+1]==1 && jeu[lignes+2][colonnes+2]==1 && jeu[lignes+3][colonnes+3]==1)
            gagnant1=1;
        }
    }


/*Meme chose pour les diagonales bas droite vers haut gauche*/
    for(colonnes=0;colonnes<6;colonnes++)
    {
        for(lignes=6;lignes>=0;lignes--)
        {
            if(jeu[lignes][colonnes]==1 && jeu[lignes-1][colonnes+1]==1 && jeu[lignes-2][colonnes+2]==1 && jeu[lignes-3][colonnes+3]==1)
            gagnant1=1;
        }
    }
   return gagnant1;
}

/* ###################################################################################
############################# VerifierResultatJ2 #######################################
################################################################################### */

int verifResultatJ2(int (*jeu)[6], int gagnant2)
{

int lignes, colonnes;

    /*Verification horizontale pour savoir si le joueur a gagne:
on balaye toutes les lignes de 0 a 6 en verifiant 4 cases a chaque fois.
Si 4 cases qui se suivent valent 2 alors gagnant2 prend pour valeur 2*/

    for(lignes=0;lignes<4;lignes++)
    {
        for(colonnes=0;colonnes<6;colonnes++)
        {
            if(jeu[lignes][colonnes]==2 && jeu[lignes+1][colonnes]==2 && jeu[lignes+2][colonnes]==2 && jeu[lignes+3][colonnes]==2)
            gagnant2=2;
        }
    }

/*Meme chose mais verticalement maintenant*/
    for(lignes=0;lignes<7;lignes++)
    {
        for(colonnes=0;colonnes<3;colonnes++)
        {
            if(jeu[lignes][colonnes]==2 && jeu[lignes][colonnes+1]==2 && jeu[lignes][colonnes+2]==2 && jeu[lignes][colonnes+3]==2)
            gagnant2=2;
        }
    }

/*En diagonale bas gauche vers haut droit*/
    for(lignes=0;lignes<7;lignes++)
    {
        for(colonnes=0;colonnes<6;colonnes++)
        {
            if(jeu[lignes][colonnes]==2 && jeu[lignes+1][colonnes+1]==2 && jeu[lignes+2][colonnes+2]==2 && jeu[lignes+3][colonnes+3]==2)
            gagnant2=2;
        }
    }

/*Meme chose pour les diagonales bas droite vers haut gauche*/
    for(colonnes=0;colonnes<6;colonnes++)
    {
        for(lignes=6;lignes>=0;lignes--)
        {
            if(jeu[lignes][colonnes]==2 && jeu[lignes-1][colonnes+1]==2 && jeu[lignes-2][colonnes+2]==2 && jeu[lignes-3][colonnes+3]==2)
            gagnant2=2;
        }
    }
   return gagnant2;
}


TESTFIN.C
Code: Tout sélectionner
/* ###################################################################################
#################################### TestfinJ1 #######################################
################################################################################### */
#include<stdio.h>
void testfinJ1(int gagnant1)
{

/*Test pour savoir si le joueur 1 a gagne et si c'est le cas alors arret de la boucle (do while dans jeu)*/
if(gagnant1==1)
    {
        printf("Joueur 1 a gagne!!!\n");
        printf("\n\t\t############ BRAVO JOUEUR 1!!! ############\n");
    }

}

/* ###################################################################################
#################################### TestfinJ2 #######################################
################################################################################### */
void testfinJ2(int gagnant2)
{

/*Test pour savoir si le joueur 2 a gagne et si c'est le cas alors arret de la boucle (do while dans jeu)*/
if(gagnant2==2)
    {
        printf("Joueur 2 a gagne!!!\n");
        printf("\n\t\t############ BRAVO JOUEUR 2!!! ############\n");
    }

}


Screenshot du souci
http://img809.imageshack.us/img809/277/screenbugh.jpg

Je vous remercie d'avance pour le temps que vous me consacrerez

Brandon

Ps: je ne cache pas avoir copier/coller directement de mon code (il est indenté normalement)
La partie Main.c n'est pas inclue car je doute que le souci vient de la.
Brandys
Visiteur
Visiteur
 
Messages: 2
Inscription: 09 Jan 2012 15:31
 


Re: Souci puissance 4 en C

Message le 09 Jan 2012 17:09

Hum... Désolé d'avoir pris de votre temps, j'ai finalement trouvé solution à mon problème après 3 jours dessus.
Je n'avais qu'a rajouter un fflush(stdin) à la fin de mon jeu.c et insérez un petit menu "Rejouer/Quitter" après qu'un joueur ai gagné.

A bientot :)
Brandys
Visiteur
Visiteur
 
Messages: 2
Inscription: 09 Jan 2012 15:31
 

Re: Souci puissance 4 en C

Message le 09 Jan 2012 17:19

Bonjour et bienvenue,

Merci de ton retour :wink:
Image
Avatar de l'utilisateur
RobinSG
Moderateur
Moderateur
 
Messages: 1514
Inscription: 29 Juin 2004 14:26
Localisation: Atys
 



Sujets similaires

Message Souci à l'ouverture du site
Bonjour,Chez moi Kaspersky me signale que le site est "douteux.... problème de certificat https://cjoint.com/c/KEvhbNOu4rw
Réponses: 16

Message pc portable HP Stream Laptop 14-cb0XX souci d'allumage
Bonjour,Lorsque je veux démarrer mon pc portable HP Stream Laptop 14-cb0XX l'allumage se fait seulement avec le chargeur brancher, une fois démarrer je peux retirer le chargeur et je peux utiliser le pc jusqu?à que la batterie se vide.Concernant l'allumage au démarrage sans le chargeur l'écran s'all ...
Réponses: 2

Message Est-ce un souci d'alimentation ?
Bonjour à tous, Je ne suis pas très calé dans l'informatique, mais j'ai quelques notions, et la ce matin je viens de m'apercevoir d'un truc en regardant occt concernant les tensions de mon alim.Ordinateur au repos, je sors ces valeurs suivantes sous occt avec l'alimentation d'origine de mon alienw ...
Réponses: 7

Message Souci avec ecran pc portable asus fx504g
Bonsoir jai un souci avec mon pc portable jai un cadre noir ou blanc parfois sur mon ecran , j'ai doute si c est pas la nappe de lecran qui est h.s.Jai tester le pc sur un ecran pc externe l'image est nickel.Merci.https://zupimages.net/viewer.php?id=20/13/j14a.jpg
Réponses: 12

Message Double processeur, la puissance est t-elle multiplié ?
Bonjour a toutes et a tous,Je suis nouveau sur le forum, en espérant ne mettre pas tromper dans le sujet.J'ai un double processeur intel Xeon E5 2620 2 GHz et j'aimerais savoir si le faite dans avoir deux multiplié les GHz ?(2GHz x2= 4GHz?)Ça fait quelques jours que je cherche sur le net mais je n'a ...
Réponses: 2

Message souci débit
bonjour, j'ai monté un PC à base d'une carte mère MSI MPG X570 GAMING PLUS.Tout fonctionne correctement sauf le débit du port ethernet. Je plafonne à 100Mbps alors qu'elle est donnée pour du 1000. Comme je suis en fibre, je trouve cela dommage de ne pas pouvoir profiter du débit max. Auriez vous une ...
Réponses: 0

Message Souci Windows 7 & Tablette Wacom
salut à toutes et tousune amie m'a demandé de l'aide pour faire fonctionner la tablette de sa fille sur son ecran de pc portable !Rien n'y a fait ! Son systeme est Seven sp1 et la tablette est une "Wacom Intuos 4 Draw" !https://www.wacom.com/fr/products/pen-t ... ntuos-drawon a testé le pi ...
Réponses: 9


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


.: Nous contacter :: Flux RSS :: Données personnelles :.