Aide pour puissance 4

Fermé
malotex - 3 déc. 2008 à 20:36
 malotex - 4 déc. 2008 à 16:41
Bonjour,
J'ai un projet en informatique à faire, qui consiste à faire un puissance 4 mais je suis pas très doué.
J'ai commencé par demander le nom des joueurs. Ca marche pour le premiers joueur il me demande d'entrer le nom du premier joueur, je le fais mais après pour le deuxième joueur il n'attend pas que je rentre son nom, il passe direct à l'étape suivante.
Voici ce que j'ai écrit:

#include <stdio.h>
#define LIGNE 6
#define COLONNE 6
int main(void)
{
char tab[LIGNE][COLONNE];
char X='X';
char O='O';
char J1;
char J2;
{
printf("Entrez le nom du joueur 1: ");
scanf("%c",&J1);
printf("Entrez le nom du joueur 2: ");
scanf("%c",&J2);
}
printf("\nLe combat oppose %c Vs %c",J1,J2);
return 0;
}
A voir également:

7 réponses

#include <stdio.h>
/* Début du programme principal */
int main()
{/*Déclaration des variables */
char tab[6][6];
char X='X';
char O='O';
int i,j,C1,C2,L0,L1,L2;
int L3,L4,L5,gagn1,gagn2;
char choix=0;
printf("Veuillez choisir un mode de jeux entre:\n");
printf("Deux joueurs: Joueur 1 Vs Joueur 2 -> 1");
printf("\nUn joueur: Joueur 1 Vs Ordi --------> 2\n");
choix=getchar();
switch(choix)
{
case '1' :{
char J1, J2; /*Saisie des noms des deux joueurs: */
printf("Vous avez choisi de jouer a deux joueurs");
printf("\nEntrez le nom du joueur 1: ");
scanf("%s",&J1);
printf("\nEntrez le nom du joueur 2: ");
scanf("%s",&J2);
printf("\nLe combat oppose %s Vs %s",J1,J2);
{/* Initialisation du tableau toutes les cases affichent des espaces*/
for (i = 0; i < 6; i++)
for (j = 0; j < 6; j++)
tab[i][j] = ' ';
{ /*Affichage du plateau de jeu vide*/
printf("| 0 | 1 | 2 | 3 | 4 | 5 |\n");
printf("| | | | | | |\n");
}
{
for(j=0;j<6;j++)
for(i=0;i<6;i++)
printf("| %c ",tab[i][j]);
{
printf("|\n");
printf("| | | | | | |\n");
}
printf("\n| 0 | 1 | 2 | 3 | 4 | 5 |\n\n");
}
}
do
{
/*Le 1er joueur joue*/
do
{
L0=0;L1=0;L2=0;L3=0;L4=0;L5=0;
printf("A vous de jouer %s, donner un numero de colonne (de 0 à 5):\n",J1);
scanf("%d",&C1);
/*Test sur la hauteur des colonnes, si elle sont remplies ou non*/
if((C1==0 && L0>5)|| (C1==1 && L1>5) || (C1==2 && L2>5) || (C1==3 && L3>5) || (C1==4 && L4>5) || (C1==5 && L5>5))
{
printf("\nDesole %s mais, la colonne %d est pleine, veuillez donner un numero de colone autre que %d \n",J1,C1,C1);
C1=-1;
}
}
while(C1<0 || C1>5);
/*Donne le caractère X à la case jouée par le 1er joueur*/
{
if(C1==0)
tab[C1][L0]='X';
if(C1==1)
tab[C1][L1]='X';
if(C1==2)
tab[C1][L2]='X';
if(C1==3)
tab[C1][L3]='X';
if(C1==4)
tab[C1][L4]='X';
if(C1==5)
tab[C1][L5]='X';
}
/*Vérification horizontale pour savoir si le joueur a gagné:
on balaye toutes les lignes de 0 à 5 en vérifiant 4 cases à chaque fois
Si 4 cases qui se suivent sont à X alors gagne prend pour valeur 1*/
for(i=0;i<3;i++)
{
for(j=0;j<6;j++)
{
if(tab[i][j]=='X' && tab[i+1][j]=='X' && tab[i+2][j]=='X' && tab[i+3][j]=='X')
gagn1=1;
}
}
/*Même chose mais verticalement maintenant*/
for(i=0;i<6;i++)
{
for(j=0;j<3;j++)
{
if(tab[i][j]=='X' && tab[i][j+1]=='X' && tab[i][j+2]=='X' && tab[i][j+3]=='X')
gagn1=1;
}
}

/*Et diagonale bas gauche vers haut droit*/
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
if(tab[i][j]=='X' && tab[i+1][j+1]=='X' && tab[i+2][j+2]=='X' && tab[i+3][j+3]=='X')
gagn1=1;
}
}
/*Même chose pour les diagonales bas droite vers haut gauche*/
for(j=0;j<3;j++)
{
for(i=5;i>=0;i--)
{
if(tab[i][j]=='X' && tab[i-1][j+1]=='X' && tab[i-2][j+2]=='X' && tab[i-3][j+3]=='X')
gagn1=1;
}
}
/* Affichage de la grille */
printf("| 0 | 1 | 2 | 3 | 4 | 5 |\n");
printf("| | | | | | |\n");
for(j=5;j>=0;j--)
{
for(i=0;i<6;i++)
{
printf("| %c ",tab[i][j]);
}
printf("|\n");
printf("| | | | | | |\n");
}
printf("\n| 0 | 1 | 2 | 3 | 4 | 5 |\n\n");
/* On incremente la hauteur d'une colonne à chaque fois que celle si est jouée:*/
if(C1==0)
tab[C1][L0++];
if(C1==1)
tab[C1][L1++];
if(C1==2)
tab[C1][L2++];
if(C1==3)
tab[C1][L3++];
if(C1==4)
tab[C1][L4++];
if(C1==5)
tab[C1][L5++];
/*Test pour savoir si le joueur 1 a gagné, si c'est le cas alors arret de la boucle*/
if(gagn1==1)
{
printf("Le gagnant est %s!!!\n",J1);
break;
}
}
/*On recommence pour le joueur 2*/
do
{
/*Le 2eme joueur joue*/
do
{
L0=0;L1=0;L2=0;L3=0;L4=0;L5=0;
printf("A vous de jouer %s, donner un numero de colonne (de 0 à 5):\n",J2);
scanf("%d",&C2);
/*Test sur la hauteur des colonnes, si elle sont remplies ou non*/
if((C2==0 && L0>5)|| (C2==1 && L1>5) || (C2==2 && L2>5) || (C2==3 && L3>5) || (C2==4 && L4>5) || (C2==5 && L5>5))
{
printf("\nDesole %s mais, la colonne %d est pleine, veuillez donner un numero de colone autre que %d \n",J2,C2,C2);
C2=-1;
}
}
while(C2<0 || C2>5);
/*Donne le caractère O à la case jouée par le 2eme joueur*/
if(C2==0)
tab[C2][L0]='O';
if(C2==1)
tab[C2][L1]='O';
if(C2==2)
tab[C2][L2]='O';
if(C2==3)
tab[C2][L3]='O';
if(C2==4)
tab[C2][L4]='O';
if(C2==5)
tab[C2][L5]='O';
/*Vérification horizontale pour savoir si le joueur a gagné:
on balaye toutes les lignes de 0 à 5 en vérifiant 4 cases à chaque fois
Si 4 cases qui se suivent sont à O alors gagn2 prend pour valeur 1*/
for(i=0;i<3;i++)
{
for(j=0;j<6;j++)
{
if(tab[i][j]=='O' && tab[i+1][j]=='O' && tab[i+2][j]=='O' && tab[i+3][j]=='O')
gagn2=1;
}
}
/*Même chose mais verticalement maintenant*/
for(i=0;i<6;i++)
{
for(j=0;j<3;j++)
{
if(tab[i][j]=='O' && tab[i][j+1]=='O' && tab[i][j+2]=='O' && tab[i][j+3]=='O')
gagn2=1;
}
}

/*Et diagonale bas gauche vers haut droit*/
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
if(tab[i][j]=='O' && tab[i+1][j+1]=='O' && tab[i+2][j+2]=='O' && tab[i+3][j+3]=='O')
gagn2=1;
}
}
/*Même chose pour les diagonales bas droite vers haut gauche*/
for(j=0;j<3;j++)
{
for(i=5;i>=0;i--)
{
if(tab[i][j]=='O' && tab[i-1][j+1]=='O' && tab[i-2][j+2]=='O' && tab[i-3][j+3]=='O')
gagn2=1;
}
}
/* Affichage de la grille */
printf("| 0 | 1 | 2 | 3 | 4 | 5 |\n");
printf("| | | | | | |\n");
for(j=5;j>=0;j--)
{
for(i=0;i<6;i++)
{
printf("| %c ",tab[i][j]);
}
printf("|\n");
printf("| | | | | | |\n");
}
printf("\n| 0 | 1 | 2 | 3 | 4 | 5 |\n\n");
/* On incremente la hauteur d'une colonne à chaque fois que celle si est jouée:*/
if(C2==0)
tab[C2][L0++];
if(C2==1)
tab[C2][L1++];
if(C2==2)
tab[C2][L2++];
if(C2==3)
tab[C2][L3++];
if(C2==4)
tab[C2][L4++];
if(C2==5)
tab[C2][L5++];
/*Test pour savoir si le joueur 1 a gagné, si c'est le cas alors arret de la boucle*/
if(gagn2==1)
{
printf("Le gagnant est %s!!!\n",J2);
break;
}
}
break;
}
case '2' :{
char J[20]; /*Saisie du nom du joueur: */
printf("Vous avez choisi de jouer a un joueurs");
printf("\nEntrez le nom du joueur: ");
scanf("%s",&J);
printf("\nLe combat oppose %s Vs PC",J);
break;
}
default : printf("Erreur de saisie du choix!");
}
return 0;
}
1
Profil bloqué
3 déc. 2008 à 22:18
voila,que commet nombreux des developpeurs de c,quand on saisit 2 caractéres avant de passer à la saisie du second caractére faut vider le tampon avec l'instruction suivante fflush(stdin) :

Dans ton code rectifie com suit:

printf("Entrez le nom du joueur 1: ");
scanf("%c",&J1);
fflush(stdin);
printf("Entrez le nom du joueur 2: ");
scanf("%c",&J2);
0
Waw, j'ai pas encore vu ça en cours, il n'y a pas une autre solution? Même plus longue?
Parce que je ne pense pas que mon professeur acceptera que je sorte ce jore de chose si on ne les a pas vu en cour.
0
Profil bloqué
3 déc. 2008 à 22:42
non est-ce que lui même il connait??LOL
en tout c'est la seule solution qui existe en c.

Bon courage!
0
Lol
C'est bon j'ai trouvé en remplacant dans lé scanf le %c par %s pour faire une chaine de caractères.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mais le problème c'est que quand il m'affiche les noms des joueurs il n'y a que la premières lettre du nom qui est affichée. Je ne sait pas pourquoi.
0
Profil bloqué
3 déc. 2008 à 23:54
j vois ton code
0
Il ne faudra pas oublier d'allouer de l'espace aux chaînes
0
Profil bloqué > loupius
4 déc. 2008 à 06:36
tout à fait exact Loupius!!
0
lol ça veut dire quoi???
0
Voici ce que j'ai écrit, mais il y a une érreur mon compilateur m'affiche:
C:\Documents and Settings\Ziad MNAFAKH\Mes documents\info\projet\projet\main.c||In function `int main()':|
C:\Documents and Settings\Ziad MNAFAKH\Mes documents\info\projet\projet\main.c|149|error: expected `while' before '{' token|
C:\Documents and Settings\Ziad MNAFAKH\Mes documents\info\projet\projet\main.c|149|error: expected `(' before '{' token|
C:\Documents and Settings\Ziad MNAFAKH\Mes documents\info\projet\projet\main.c|149|error: expected primary-expression before '{' token|
C:\Documents and Settings\Ziad MNAFAKH\Mes documents\info\projet\projet\main.c|149|error: expected `)' before '{' token|
C:\Documents and Settings\Ziad MNAFAKH\Mes documents\info\projet\projet\main.c|149|error: expected `;' before '{' token|
||=== Build finished: 5 errors, 0 warnings ===|
0