Ce programme fonctionne sur code block mais pas sur xcode,
merci d'avance pour votre aide
//
// main.c
// projet algo f
//
// Created by Amaury on 27/08/2018.
// Copyright © 2018 Amaury CLEMENT. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#define QUADRILLAGE 11
#define TAILLE_MAX 10000
int gagner = 0;
char A[10];
char B[10];
/************************ Choix des noms des joueurs ************************/
char noms_des_joueurs() {
printf(" Choix des noms des joueurs \n");
printf("Veuillez selectionner le nom du joueur 1 jouant les pions (X): \n");
scanf("%s",&*A);
printf("Veuillez selectionner le nom du joueur 2 jouant les pions (O): \n");
scanf("%s",&*B);
system ("cls");
gagner = 0;
}
/************************ Savoir si tout le tableau est rempli et dans ce cas annoncer une egalite ************************/
char test_tableau_rempli (char tab[QUADRILLAGE][QUADRILLAGE]){
int i;
int j;
for(i=0; i<QUADRILLAGE; i++){
for(j=0; j<QUADRILLAGE; j++){
if(tab[i][j]==' '){
return 0;
}
}
}
printf(" Egalite ! Bravo aux deux joueurs %s et %s !\n",A,B);
gagner = 1;
system ("pause");
sauvegarde_du_gagnant();
system("cls");
return main();
}
/************************ Savoir si il y 5 symboles identiques sur une meme colonne ************************/
char horizontal (char tab[QUADRILLAGE][QUADRILLAGE]){
char joueur;
int i;
int j;
int k;
int compt=0;
for(i=0; i<QUADRILLAGE; i++){
for(j=0; j<QUADRILLAGE; j++){
compt=0;
if(tab [i][j] == 'X') {
for(k=0; k<=4; k++) {
if (tab[i+k][j]=='X')
compt = compt+1;
}
if (compt == 5) {
printf("Felicitation ! Joueur %s (X), vous avez reussi a aligner 5 pions en colonne \n",A);
gagner = 1;
system ("pause");
sauvegarde_du_gagnant();
system("cls");
return main();}
}
}
}
compt = 0;
for(i=0; i<QUADRILLAGE; i++){
for(j=0; j<QUADRILLAGE; j++){
compt=0;
if(tab [i][j] == 'O') {
for(k=0; k<=4; k++) {
if (tab[i+k][j]=='O')
compt = compt+1;
}
if (compt == 5) {
printf("Felicitation ! Joueur %s (O), vous avez reussi a aligner 5 pions en colonne \n",B);
gagner = 1;
system ("pause");
sauvegarde_du_gagnant();
system("cls");
return main();}
}
}
}
}
/************************ Savoir si il y 5 symboles identiques sur une meme ligne ************************/
char vertical (char tab[QUADRILLAGE][QUADRILLAGE]){
char joueur;
int i;
int j;
int k;
int compt=0;
for(i=0; i<QUADRILLAGE; i++){
for(j=0; j<QUADRILLAGE; j++){
compt=0;
if(tab [i][j] == 'X'){
for(k=0; k<=4; k++) {
if (tab[i][j+k]=='X')
compt = compt+1;
}
if (compt == 5) {
printf("Felicitation ! Joueur %s (X), vous avez reussi a aligner 5 pions en ligne \n",A);
gagner = 1;
system ("pause");
sauvegarde_du_gagnant();
system("cls");
return main();}
}
}
}
compt = 0;
for(i=0; i<QUADRILLAGE; i++){
for(j=0; j<QUADRILLAGE; j++){
compt=0;
if(tab [i][j] == 'O') {
for(k=0; k<=4; k++) {
if (tab[i][j+k]=='O')
compt = compt+1;
}
if (compt == 5) {
printf("Felicitation ! Joueur %s (O), vous avez reussi a aligner 5 pions en ligne \n",B);
gagner = 1;
system ("pause");
sauvegarde_du_gagnant();
system("cls");
return main();}
}
}
}
}
/************************ Savoir si il y 5 symboles identiques sur une meme diagonale (du haut gauche au bas droit) ************************/
char diagonale_1 (char tab[QUADRILLAGE][QUADRILLAGE]){
char joueur;
int i;
int j;
int k;
int compt=0;
for(i=0; i<QUADRILLAGE; i++){
for(j=0; j<QUADRILLAGE; j++){
compt=0;
if(tab [i][j] == 'X'){
for(k=0; k<=4; k++) {
if (tab[i+k][j+k]=='X')
compt = compt+1;
}
if (compt == 5) {
printf("Felicitation ! Joueur %s (X), vous avez reussi a aligner 5 pions en diagonale\n",A);
gagner = 1;
system ("pause");
sauvegarde_du_gagnant();
system("cls");
return main();}
}
}
}
compt = 0;
for(i=0; i<QUADRILLAGE; i++){
for(j=0; j<QUADRILLAGE; j++){
compt=0;
if(tab [i][j] == 'O') {
for(k=0; k<=4; k++) {
if (tab[i+k][j+k]=='O')
compt = compt+1;
}
if (compt == 5) {
printf("Felicitation ! Joueur %s (O), vous avez reussi a aligner 5 pions en diagonale \n",B);
gagner = 1;
system ("pause");
sauvegarde_du_gagnant();
system("cls");
return main();}
}
}
}
}
/************************ Savoir si il y 5 symboles identiques sur une meme diagonale (du bas gauche au haut droit) ************************/
char diagonale_2 (char tab[QUADRILLAGE][QUADRILLAGE]){
char joueur;
int i;
int j;
int k;
int compt=0;
for(i=0; i<QUADRILLAGE; i++){
for(j=0; j<QUADRILLAGE; j++){
compt=0;
if(tab [i][j] == 'X'){
for(k=0; k<=4; k++) {
if (tab[i-k][j+k]=='X')
compt = compt+1;
}
if (compt == 5) {
printf("Felicitation ! Joueur %s (X), vous avez reussi a aligner 5 pions en diagonale\n",A);
gagner = 1;
system ("pause");
sauvegarde_du_gagnant();
system("cls");
return main();}
}
}
}
compt = 0;
for(i=0; i<QUADRILLAGE; i++){
for(j=0; j<QUADRILLAGE; j++){
compt=0;
if(tab [i][j] == 'O') {
for(k=0; k<=4; k++) {
if (tab[i-k][j+k]=='O')
compt = compt+1;
}
if (compt == 5) {
printf("Felicitation ! Joueur %s (O), vous avez reussi a aligner 5 pions en diagonale \n",B);
gagner = 1;
system ("pause");
sauvegarde_du_gagnant();
system("cls");
return main();}
}
}
}
}
/************************ Sauvegarder le nom du gagnant a la fin de la partie ************************/
int sauvegarde_du_gagnant(){
char gagnant[]="joueur";
printf ("entrez le nom du gagnant:\n");
scanf("%s",gagnant);
FILE* fichier = NULL;
fichier = fopen("historique.txt", "a");
fprintf(fichier," %s a gagne \n",gagnant);
fclose(fichier);
return 0;
}
/************************ Afficher l'historique des parties ************************/
char historique() {
FILE* fichier = NULL;
char chaine[TAILLE_MAX] = "";
fichier = fopen("historique.txt", "r");
if (fichier != NULL) {
while (fgets(chaine, TAILLE_MAX, fichier) != NULL) {
printf("%s", chaine);
}
fclose(fichier);
}
return 0;
}
int nouvelle_partie() {
system ("cls");
noms_des_joueurs();
/************************ Debut ************************/
char tab[QUADRILLAGE][QUADRILLAGE];
char table_rempli;
int x_j1=0;
int y_j1=0;
int x_j2=0;
int y_j2=0;
int i;
int j;
/************************ Affichage du tableau initial ************************/
for (i=0; i<QUADRILLAGE; i++) {
for (j=0; j<QUADRILLAGE; j++) {
tab[i][j] = ' ';
/************************ On place le X au milieu du tableau ************************/
if (tab[x_j1][y_j1] != 'X')
x_j1 = 5;
y_j1 = 5;
tab[x_j1][y_j1] = 'X';
}
}
while (gagner == 0) {
/************************ Affichage des coordonnées utiles pour que les joueurs tapent les coordonées ************************/
system ("cls");
printf(" 0 1 2 3 4 5 6 7 8 9 10 \n");
printf (" --------------------------------------------- \n" );
for (i=0; i<QUADRILLAGE; i++) {
if (i<10){
printf(" %d |", i);}
else{ printf (" %d |", i);
}
/************************ Affichage du tableau ************************/
for (j=0; j<QUADRILLAGE; j++) {
printf(" %c |", tab[i][j]);
}
printf("\n" );
printf (" ---------------------------------------------\n");
}
table_rempli = test_tableau_rempli (tab);
table_rempli = horizontal (tab);
table_rempli = vertical (tab);
table_rempli = diagonale_1 (tab);
table_rempli = diagonale_2 (tab);
/************************ Demande des coordonnées au joueur 2 ************************/
printf("\nJoueur %s (O), veuillez entrer la ligne :\n",B );
scanf("%d", &x_j2);
while (x_j2>10) {
printf ("\nValeur incorrecte,\n");
printf("\nJoueur %s (O), veuillez entrer la ligne :\n",B );
scanf("%d", &x_j2);
}
printf("\nJoueur %s (O), veuillez entrer la colonne :\n",B );
scanf("%d", &y_j2);
while (y_j2>10) {
printf ("\nValeur incorrecte,\n");
printf("\nJoueur %s (O), veuillez entrer la colonne :\n",B );
scanf("%d", &y_j2);
}
tab[x_j2][y_j2] = 'O';
/************************ Affichage du tableau avec les coordonnes utiles apres chaque tour ************************/
system ("cls");
printf(" 0 1 2 3 4 5 6 7 8 9 10 \n");
printf (" --------------------------------------------- \n" );
for (i=0; i<QUADRILLAGE; i++) {
if (i<10){
printf(" %d |", i);}
else{ printf (" %d |", i);
}
for (j=0; j<QUADRILLAGE; j++) {
printf(" %c |", tab[i][j]);
}
printf("\n" );
printf (" --------------------------------------------- \n");
}
table_rempli = test_tableau_rempli (tab);
table_rempli = horizontal (tab);
table_rempli = vertical (tab);
table_rempli = diagonale_1 (tab);
table_rempli = diagonale_2 (tab);
/************************ Demande des coordonnées au joueur 1 ************************/
printf("\nJoueur %s (X), veuillez entrer la ligne :\n",A );
scanf("%d", &x_j1);
while (x_j1>10) {
printf ("\nValeur incorrecte,\n");
printf("\nJoueur %s (X), veuillez entrer la ligne :\n",A );
scanf("%d", &x_j1);
}
printf("\nJoueur %s (X), veuillez entrer la colonne :\n",A );
scanf("%d", &y_j1);
while (y_j1>10) {
printf ("\nValeur incorrecte,\n");
printf("\nJoueur %s (X), veuillez entrer la colonne :\n",A );
scanf("%d", &y_j1);
}
tab[x_j1][y_j1] = 'X';
}
return main();
}
int affichageMenu(void) {
system ("color 1A");
system ("cls");
int choixMenu;
printf(" === MENU === \n\n");
printf(" Jeu de Gomoku \n\n");
printf(" 1. Nouvelle partie \n");
printf(" 2. Resultats des parties precedentes \n");
printf(" 3. A propos \n");
printf(" 4. Regles du Gomoku \n");
printf(" 5. Quitter le jeu \n");
printf("\n Quel est votre choix ? \n");
scanf("%d", &choixMenu);
return choixMenu;
}
int main(void) {
int choixMenu;
while (choixMenu != 5) {
choixMenu = affichageMenu();
switch (choixMenu) {
case 1:
printf(" Vous avez choisi :\n Nouvelle partie \n ");
system ("pause");
nouvelle_partie();
break;
case 2:
printf(" Vous avez choisi :\n Resultats des parties precedentes \n ");
historique();
break;
case 3:
printf(" Vous avez choisi :\n A propos \n ");
printf("Le jeu de Gomoku utilise le meme plateau que le jeu de go, mais aux regles beaucoup plus simple qui consistent a \n aligner 5 pions du meme signe. Il est egalement connu sous le nom de Morpion en France. Notre objectif dans ce projet \n est de developper une console simple pour le jeu tout en respectant un cahier des charges impose en debut de projet. \n Notre equipe se compose d'un programmeur de jeu, Nathan GRIVEAU et d'un programmeur de la partie sauvegarde \n et redacteur du compte rendu Adrien DEMOL. En esperent que vous apprecirez notre jeu ! ^^ \n ");
break;
case 4:
printf (" Vous avez choisi :\n Regles du jeu \n");
printf(" 1. Deux joueurs sont representes par O et X. \n 2. Le jeu se deroule sur un plateau de taille 11x11 carreaux pour la version simplifiee. \n 3. Le premier pion doit etre pose au milieu du plateau. \n 4. Un joueur gagne si il aligne cinq pions de son signe en colonne, en ligne, ou bien en diagonale. \n");
break;
case 5:
exit(main());
break;
default:
printf(" Nous n'avons pas compris votre requete \n Reessayer s'il vous plait \n ");
break;
}
system("PAUSE");
system ("cls");
}
return 0;
}
Afficher la suite
27 août 2018 à 20:52
Merci de l’info