Il y a actuellement 361 visiteurs
Vendredi 26 Avril 2024
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:
Avatar de l'utilisateur
RobinSG
Moderateur
Moderateur
 
Messages: 1509
Inscription: 29 Juin 2004 14:26
Localisation: Atys
 



Sujets similaires

Message Souci avec epson xp 2205
Bonjour Ma fille a une epson xp 2205, elle a utilisé les cartouches epson, jusqu'au bout, puis elle a changé toutes les cartouches par des adaptables, en oubliant d'enlever le scotch (obturateur) sur la noire, on l'a enlevé, mais depuis le voyant rouge "encre" est allumé, j'ai essayé de dé ...
Réponses: 12

Message [résolu] Supprimer une mise a jour ou souci avec chromium ?
Bonjour J'ai fait une mise a jour hier soir avant d'éteindre l'ordinateur, je m'étais dit que je ne ferais plus que celles des navigateurs, c'est de ma faute. Depuis ce matin, sur certains sites, FA et ma boite mail, je n'ai plus les cadres autour des messages, ça fait très "bazar" ai ...
Réponses: 12

Message Augmenter la puissance de calcul avec un algorithme
Salut, je voudrais savoir si il est possible d'augmenter considérablement la puissance de calcul de son ordinateur avec un algorithme ? J'ai lu par exemple que des physiciens français on fait surpasser la puissance de calcul d'un simple pc au point de lui faire dépasser celle d'un ordinateur quantiq ...
Réponses: 1

Message [Réglé]Souci Dual Boot impossible Win10 & Sparky Game Over ?
bonjour à toutes et tous Sur le pc de mes enfants, un ordinateur tout en un Lenovo C260, ils ont Win10 (grrr) et je leur ai installé en dual-boot, Sparky Game Over, la derniere version...Les deux fonctionnent sans souci, sauf que pour démarrer sur Sparky, je suis obligé d'utiliser SuperGrub pour qu ...
Réponses: 1

Message [RESOLU] Souci de raccourci jeu windaube sur LinuxFX ?
Bonjour à toutes et tousLinuxFX (https://www.windowsfx.org/) = Pur Daube et anti système libre Linux...bonne journée à toutes et tous
Réponses: 4

Message Puissance de calcul algorithmique et carte graphique
Salut, je voudrais savoir si la puissance de calcul d'un algorithme (taux de hachage par seconde H/s) programmer sur un ordinateur et forcément égal a celle de la puissance de la carte graphique de celui-ci ? Par exemple puis-je programmer un algorithme qui a une puissance de 30 Gh/s sur un ordinate ...
Réponses: 4

Message souci fichier swf de videosurveillance
BonjourJ'ai un vieux système de vidéo-surveillance qui vient de tomber en panne. J'ai réussi à récupérer les fichier en SWF mais IMPOSSIBLE de les lire! J'ai essayé de les convertir, d'utiliser plusieurs logiciels de lecture, tous me disent: "erreur de lecture" et ce sur l'ensemble des fic ...
Réponses: 4


Qui est en ligne

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


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