Code c en gomoku

Résolu
sissou69100 Messages postés 2 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 6 mai 2018 - Modifié le 20 avril 2018 à 18:33
 sissou69100 - 23 avril 2018 à 08:10
Bonjour,
Nous sommes des élèves en 1a en école d’ingénieur et nous devons faire un gomoku (morpion 11*11)et nous aimerons votre aide par rapport au code du jeu en lui-même .
voici notre code merci de le corriger et de nous apporter votre aide

#include <stdio.h>
#include <stdlib.h>


#include <stdio.h>
#include <stdlib.h>
#define N 12

int main()
{
    void joueur();
    void jeu();
    //void apropos
    int choix;
    int i = 0;

    printf("____________________________________________________________________________________________________________________________________________________________________________\n\n\n");
    printf("                                                                               GOMOKU\n\n\n");
    printf("____________________________________________________________________________________________________________________________________________________________________________\n\n\n");
    printf("si c est votre premiere partie, allez faire un tour dans les regles du jeu!\n");
    do
    {
        printf("Que voulez vous faire?\n Tapez 1 pour commencer une partie\n Tapez 2 pour voir les regles du jeu\n Tapez 3 pour acceder aux credits \n\n");
        scanf("%d", &choix);
        printf("\n");

        switch (choix)
            {
            case 1:
            printf("c'est parti!");
            joueur();
            jeu();
            break;

            case 2:
            printf("=== Regles du jeu ===\n\n\n");
            printf("== Synopsis ==\n\n");
            printf("A l origine, le Gomoku utilise le materiel du jeu de \ngo, c est a dire : deux lots de pierres de couleurs differentes,\nle tablier dote d un quadrillage de 19 lignes sur 19. \nEn realite, le Gomoku ne necessite qu une vingtaine de \npierres (ou pieces ou boutons de culottes) par joueur et, comme \non joue toujours en position centrale, on peut considerer que le \nterrain est illimite. Le tout est de disposer d un quadrillage, \nles pierres se jouant sur les intersections.");
            printf("\n\n== Regles du jeu ==\n\n");
            printf("Dans notre cas, nous jouerons sur une grille de 11 cases sur 11.\nLe principe est simple, Deux joueurs s'affrontent en jouant chacun leurs\ntour.L'un est represente par les croix, l'autre les rond. Le but \nest d'aligner 5 des ses pions (En colonne, en ligne ou en diagonale.) \n\nPour placer un pion, il faudra rentrer les coordonnees de la case \ndans laquelle vous voudrez placer votre pion.\n");
            break;

            case 3:
            printf("Vous avez choisi le troisieme choix\n\n");
            printf("Quel est votre choix?taper 1, 2 ou 3\n\n");
            scanf("%d", &i);
            switch(i)
                {
                case 1:
                printf("choix 1 du sous menu 3\n\n");
                break;
                case 2:
                printf("choix 2 du sous menu 3\n\n");
                break;
                case 3:
                printf("choix 3 du sous menu 3 \n\n");
                break;
                default:
                printf("Vous n'avez pas rentre un nombre correct.\n\n");
                break;
                }
            break;

            default:
            printf("Vous n'avez pas rentre un nombre correct. Veillez reessayer\n\n");
            break;
            }
    }

    while (choix =! 1,2,3);
    printf("\n\n");

    return 0;
}

void joueur()
{
    typedef struct Player Player;
    struct Player
    {
    char nom[100];
    char prenom[100];
    char adresse[1000];
    int age;
    int sexe; //1 GARCON 0 FILLE
    };

    int i ;
    Player Joueur[2] = {{"","",0, 0},{"", "",0, 0}};
    for (i=0; i<2; i++)
    {
        printf("=== FICHES JOUEURS ===");
        printf("=== JOUEUR %d ===\n",i);
        printf("-Nom :");
        scanf("%s",&Joueur[i].nom);

        printf("-Prenom :");
        scanf("%s",&Joueur[i].prenom);

        printf("-Age :");
        scanf("%d",&Joueur[i].age);
        do
        {
        printf("-Sexe (0-Fille / 1-Garcon) :");
        scanf("%d",&Joueur[i].sexe);
        }while (Joueur[i].sexe<0 || Joueur[i].sexe >1);
    }
}

void jeu()
{

    int i,j;
    int plateau[N][N];
    printf("    1       2       3       4       5       6       7       8       9       10      11\n");
    printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
    for(i = 1; i < N; i++)
    {
        printf("*       *       *       *       *       *       *       *       *       *       *       *\n");
        for(j = 1; j < N; j++)
        {
            plateau[i][j] = ' ';
            printf("*   %c   ",plateau[i][j]);

        }
    printf("*");
    printf(" %d\n",i);
    printf("*       *       *       *       *       *       *       *       *       *       *       *\n");
    printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
    }
}
void programmejeu()
{


char tableau[11][11];
int i;
int j;

void inittab()
    {
            for(i=0;i<11;i++)
    {
                for(j=0;j<11;j++)
                {
                        tableau[i][j] = ' ' ;
                }

    }

    }

void modiftab()
{

            int colonne;
            int ligne;
            int k=0;
            void joueur();
do {
printf("Au joueur %d :\n\n");
printf("Choisir une ligne\n\n");
scanf("%d", &ligne);
printf("Choisir une colonne\n\n");
scanf("%d",&colonne);
system("cls");



                if (tableau[ligne][colonne] != ' ' ) {
                    ligne --;
                    colonne --;
                    printf("Incorrect, veuillez ressaisir une valeur !\n");
                }
                else {
                tableau [ligne -1][colonne -1] ='X';
                affichertab();
                k=1; }
} while(k==1);




printf("Au joueur 2 :\n\n");
printf("Choisir une ligne\n\n");
scanf("%d", &ligne);
printf("Choisir une colonne\n\n");
scanf("%d",&colonne);
system("cls");
tableau [ligne -1][colonne -1] ='O';
affichertab();

}

//

}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 11
21 avril 2018 à 11:57
Bonjour,

Merci NHenry pour les balises, je n'aurais pas pu répondre sans.

Lignes 11 et 12, les prototypes de fonctions sont à mettre avant d'entrer dans la fonction, l'encapsulation est à utiliser à bon escient.
Ligne 15, apparition d'une mystérieuse variable nommée 'i' utilisée bien plus tard...
Ligne 20, en France la langue officielle est le français, pas le SMS.
Ligne 38, rien n'empêche l'utilisation d'apostrophes dans un texte. Il est vrai que pour les accents, il existe des subtilités.
Ligne 70, le compilateur doit accepter cette ligne syntaxiquement correcte, mais doit générer des warnings car n'a pas de sens. Pour vérifier trois cas d'égalités il faut trois tests, et l'opérateur différent s'écrit non pas
=!
mais plutôt
!=
.
Lignes 78 à 86, encore un excès d'encapsulation, définir un type en interne ne permet pas de le voir en dehors de la fonction, le mettre avant la fonction serait mieux. Est-ce logique d'avoir des joueurs qui n'existent plus une fois passé dans la fonction
jeu()
?
Lignes 95 et 98, le nom d'un tableau correspond à son adresse donc le
&
n'est pas à utiliser ici, le code fonctionne mais pourrait poser un problème dans un cas complexe.
Lignes 117 et 120, les tableaux commencent à l'indice
0
pas à l'indice
1
.
Lignes 122 et 123, initialiser les éléments de la table au moment de l'affichage n'est pas judicieux. Il faut relier les données dans cette fonction aux données dans les autres, la fonction
initialisation()
initialise autre chose!
Lignes 136, un
tableau[][]
qui n'est pas le
plateau[][]
qui est affiché avant, à terme il faudrait que ces objets soient les mêmes.
Lignes 140 et 153, encapsulation de fonctions dans une fonction. Bien qu'un compilateur supporte cela, il ne faut pas définir des fonctions dans des fonctions.
Il manque de relier toutes les données qui sont trop encapsulées (beaucoup font l'erreur inverse en mettant tout en global), la solution est dans le passage de paramètres entre fonctions que vous devriez apprendre.
0
Merci de votre aide nous allons corriger le code en prenant compte de vos remarques
0
Rejoignez-nous