IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Puissance 4 C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Par défaut Puissance 4 C
    Bonjour,

    Je suis en train de créer un « puissance 4 » pour un TP et je ne parviens pas à créer la fonction qui me permettrait de vérifier lorsque la partie est gagnée par l'un des joueurs. Mon cerveau ne fonctionne plus, je pense. Si jamais vous pouvez m'aiguiller un peu…

    Voici mon fichier puissance.c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    #include <stdio.h>
    #include <string.h>
    #include "puissance4.h"
     
     
     
    /*
       affiche la grille de jeu
    */
    void afficheGrille(couleur gr[MAX_L][MAX_C],int nbcoupj1,int nbcoupj2, char nom1[], char nom2[])
    {
    	int i,j;
     
    	/* affiche la ligne de titre */
    	printf("\n%s %s %s %d %s %s %s %d %s","Joueur 1 [",nom1,"] : ",nbcoupj1,
    		" -- Joueur 2 [",nom2,"] : ",nbcoupj2,"\n\n");
     
    	/* affiche les lignes de légende */
    	printf("%s"," ");
    		for (j=0;j<MAX_C;j++) { printf("%s %d"," | ",j); }
    	printf("%s"," |\n");
    	printf("%s"," ");
     
    	/* affiche la ligne de séparateur */
    	for (j=0;j<MAX_C;j++) { printf("%s","-----"); }
    	printf("%s","---\n");
     
    	/* affiche chaque ligne de la grille */
    	for(i=MAX_L-1;i>=0;i--)
    	{
    		printf("%2d",i);
    		for (j=0;j<MAX_C;j++)
    			printf("%s %c"," | ",(char)gr[i][j]);
    		printf("%s"," |\n");
    	}
    }
    /*
      initialise la structure principale d’une partie
    */
    void initialise(partie * mapartie)
    {
      char temp;
     
      for(int i=0;i<MAX_L;i++)
    	{
    		for (int j=0;j<MAX_C;j++)
    			{
    			mapartie->grille[i][j]=aucune;
    			}
    	}
        printf("%s ", "entrer nom joueur1");
        scanf("%s",mapartie->joueur1.nom);                 //le nom entré par le joueur est stocké dans mapartie.
        printf("\n%s ", "entrer la couleur du joueur1");
        scanf("%s",&temp);                                 //la couleur entrée par le joueur est stocké dans une variable temporaire.
        mapartie->joueur1.couleur_joueur=(couleur) temp;   //le contenu stocké dans la variable temporaire est placé dans mapartie.
        mapartie->nbcp1=0;
     
        printf("\n%s ", "entrer nom joueur2");
        scanf("%s",mapartie->joueur2.nom);                 //le nom entré par le joueur est stocké dans mapartie.
        printf("\n%s ", "entrer la couleur du joueur2");
        scanf("%s",&temp);                                 //la couleur entrée par le joueur est stocké dans une variable temporaire.
        mapartie->joueur2.couleur_joueur=(couleur) temp;   //le contenu stocké dans la variable temporaire est placé dans mapartie.
        mapartie->nbcp2=0;
    }
     
    /*
       lance une partie
    */
    void jouePartie(partie * mapartie)
    {
     
    int col;                //col sera la colonne entré par le joueur .
    int i=0;                //i nous permettera de parcourir la colonne séléctionner par le joueur.
    int trouver=0;          //trouver nous aidera à placer la couleur du joueur à un emplacement libre.
     
     
    //la condition principale va nous permettre de savoir qui doit jouer selon le compteur des deux joueurs.
    	if (mapartie->nbcp2 <= mapartie->nbcp1){
    		printf("%s", mapartie->joueur1.nom);
    		printf(" deposer votre pion dans une colonne :");
    		scanf("%d",&col);
     
     
      //la boucle ci-dessous s'arretera lorsque l'emplacement sera trouver ou que la colonne sera pleine.
      //elle nous permet de parcourir la colonne.
                while(i<MAX_L && !trouver){
     
          //la condition permet de vérifier si la case souhaiter et vide ou non.
    	    	if (mapartie->grille[i][col]=aucune){
                    mapartie->grille[i][col]= mapartie->joueur1.couleur_joueur;
                    trouver=1;
                    }
                else{
                i++;
                }
            }
        }
      //on retrouve le même schéma que précedemment pour le joueur 2.
        else{
            printf("%s", mapartie->joueur2.nom);
            printf(" deposer votre pion dans une colonne :");
    		scanf("%d",&col);
     
            while(i<MAX_L && !trouver){
     
     
    	    	if (mapartie->grille[i][col]=aucune){
                    mapartie->grille[i][col]= mapartie->joueur2.couleur_joueur;
                    trouver=1;
                    }
                else{
                    i++;
                    }
            }
        }
    }
    main.c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdlib.h>
    #include "puissance4.h"
     
    partie mapartie;
     
    int main()
    {
        printf("Le puissance 4\n");
     
        initialise(&mapartie);
     
        afficheGrille(mapartie.grille,mapartie.nbcp1,mapartie.nbcp2, mapartie.joueur1.nom, mapartie.joueur2.nom);
     
        jouePartie(&mapartie); //faire une boucle (on continue de jouer tant que la partie n'a pas été gagner.
     
        afficheGrille(mapartie.grille,mapartie.nbcp1,mapartie.nbcp2, mapartie.joueur1.nom, mapartie.joueur2.nom);
     
        return 0;
    }
    et puissance.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #ifndef PUISSANCE4_H_INCLUDED
    #define PUISSANCE4_H_INCLUDED
    #define MAX_L 6
    #define MAX_C 6
    #define MAX_COUP 36
     
     
    typedef enum {aucune=' ',rouge='R',jaune='J',vert='V',bleu='B' } couleur ;
     
     
    typedef struct {
        char nom[40];               // nom du joueur
        couleur couleur_joueur;     // couleur du joueur
    } joueur;
     
     
    typedef struct {
      couleur grille[MAX_L][MAX_C]; // la grille
      joueur joueur1;               // le joueur 1
      int nbcp1;                    // nb coup joeur 1
      joueur joueur2;               // le joueur 2
      int nbcp2;                    // le nombre de coup du joueur 2
    } partie ;
     
     
    // procédure d’affichage de la grille (parametres à modifier selon votre structure de partie)
    void afficheGrille(couleur gr[MAX_L][MAX_C],int nbcoupj1,int nbcoupj2, char nom1[], char nom2[]);
     
    // procédure d’initialisation de d’une partie
    void initialise(partie * mapartie) ;
     
    // procédure d’initialisation de d’une partie
    int agagner(partie * mapartie) ;
     
    // procédure d’affichage de la grille
    void jouePartie(partie * mapartie);
     
    // à compléter avec les fonctions dont vous avez besoin
     
     
    #endif // PUISSANCE4_H_INCLUDED

  2. #2
    Membre averti
    Homme Profil pro
    Recherche, Comprendre, apprendre et encore recherche !
    Inscrit en
    Janvier 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Recherche, Comprendre, apprendre et encore recherche !

    Informations forums :
    Inscription : Janvier 2019
    Messages : 38
    Par défaut
    Peut-être quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    couleur verifgagnant(partie partieX)
        {
            int x,y;
            x=0;y=0;
            couleur couleur_enregistre;
            while(x<MAX_L && y<MAX_C)
            {
                if(x==MAX_L)
                    {
                        x=0;
                        y++;
                    }
                couleur_enregistre=partieX.grille[x][y];
                if(x+4<=MAX_L && partieX.grille[x+1][y]==couleur_enregistre && partieX.grille[x+2][y]==couleur_enregistre && partieX.grille[x+3][y]==couleur_enregistre)
                            return couleur_enregistre;
                if(y+4<=MAX_C && partieX.grille[x][y+1]==couleur_enregistre && partieX.grille[x][y+2]==couleur_enregistre && partieX.grille[x][y+3]==couleur_enregistre)
                            return couleur_enregistre;
                if(x+4<=MAX_L && y+4>=MAX_C && partieX.grille[x+1][y+1]==couleur_enregistre && partieX.grille[x+2][y+2]==couleur_enregistre && partieX.grille[x+3][y+3]==couleur_enregistre)
                            return couleur_enregistre;
                x++;
            }
            return aucune;
        }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Tes printf sont intéressants.
    mapartie n'a rien à faire en globale.
    Pour l'algo, il faut juste repartir des règles du jeu.
    Une partie est gagnée s'il y a 4 pièces d'une couleur donnée alignées.

    Tu n'as normalement besoin de faire cette vérification qu'après un coup joué.
    Tu peux te contenter de vérifier si la pièce ajoutée complète une ligne de 4, horizontale, verticale ou diagonale de la couleur jouée.
    Pour l'horizontale, tu peux balayer à gauche et droite, sans déborder, et compter combien tu en trouves.
    Pour la verticale, tu fais de même vers le bas, le nouveau pion se trouve forcément au plus haut (merci Sve@r).
    Raisonnement similaire pour les 2 diagonales.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 802
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Bousk Voir le message
    Pour la verticale, tu fais de même en haut et bas.
    Juste vers le bas ça doit suffire non ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 753
    Par défaut
    Ah non. Il peut y avoir des pions sur les colonnes adjacentes qui sont "plus haut" que le pion joué et qui permet de gagner la partie. Je joue en b6, si a7 c5 et d4 sont de ma couleur, bingo

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Oui, on appelle ça une diagonale
    Sve@r a raison. Je suis allé vite. D'un autre côté je suis pas là pour donner une solution parfaite et complète à un exercice scolaire, et c'est le genre de réflexion qu'on devrait avoir quand on implémente réellement le problème.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Entre technologie et puissance: duel 6800Ultra & X850xt
    Par DarkOcean dans le forum Composants
    Réponses: 5
    Dernier message: 03/02/2005, 17h11
  2. [LG]Puissance et Indice
    Par luno2545 dans le forum Langage
    Réponses: 2
    Dernier message: 08/05/2004, 10h01
  3. [LG]fonction puissance en pascal
    Par le 27 dans le forum Langage
    Réponses: 8
    Dernier message: 13/12/2003, 23h21
  4. x² et puissance de x par récurrence
    Par olivieram dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 15/12/2002, 23h59
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo