× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Autres langages
 Aide pour puissance 4 en C
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
ziad
  Posté le 03/12/2008 @ 21:07 
Aller en bas de la page 
Petit astucien

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;
}

Aidez moi SVP.

Publicité
ziad
 Posté le 03/12/2008 à 22:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Comment je fais pour l'obliger?

J'ai mis le \n pour aller à la ligne parce qu'on aurai rien comprie.

Esclapion
 Posté le 03/12/2008 à 22:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

Ce qui m'ennnuie, c'est que tu lise caratère par caractère. Il te faut, soit une boucle while jusqu'à la fin de ta ligne (\n), soit lire ta chaîne d'un coup par un gets ou un fgets sur stdin.

ziad
 Posté le 03/12/2008 à 23:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

A non c'est bon j'ai utilisé une chaine de caractères, en remplacant dans scanf les %c par des %s.

ziad
 Posté le 03/12/2008 à 23:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

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.

Esclapion
 Posté le 03/12/2008 à 23:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

Dans un char, tu ne peux ranger qu'un seul caractère. Si tu veux en ranger plus, il te faut un tableau genre

char nom[255] ;

et y ranger le nom, avec par ex. un '\0' à la fin.

comment veux-tu qu'il en soit autrement ? De plus, en sortie, il faut également utiliser %s.

ziad
 Posté le 04/12/2008 à 00:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

J'ai avancé mais j'ai toujours un problème avec les noms des joueurs. Quand il n'y a qu'un seul joueur qui joue ça affiche bien le nom du joueur mais quand il y en a 2 ça beug.

Voici ce que j'ai écrit pour l'instant:

#include <stdio.h>
/* Début du programme principal */
int main()
{/*Déclaration des variables */
char tab[6][6];
char X='X';
char O='O';

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*/
int i,j;
{
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=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");
}
}
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;
}
}

return 0;
}

a_parisfr
 Posté le 05/12/2008 à 14:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

case '1' :{
char J1[20], J2[20];

......

scanf("%s",J1);

....

scanf("%s",J2);



Modifié par a_parisfr le 05/12/2008 14:37
ziad
 Posté le 14/12/2008 à 13:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,
J'ai bientot fini le 2 joueurs mais le problème c'est que au lieu de jouer l'un àprès l'autre, c'est le premier joueur qui joue tout le temps et aprés qu'il a gagné c'est le deuxième joueur qui joue.
SVP de l'aide

Publicité
ziad
 Posté le 14/12/2008 à 23:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Voici la MAJ de mon code souce, j'ai réussi à régler quelque problème mais d'autre sont apparu, pouvez vous m'aider SVP.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//Début du programme principal
int main()
{//Déclaration des variables
char tab[8][6];
char X='X';
char O='O';
int i,j,C1,C2,L0,L1,L2,L3,L4,L5;
int gagn1=0;
int gagn2=0;
int jeux=0;
char L,x;
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[20], J2[20]; //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\n",J1,J2);
{//Initialisation du tableau toutes les cases affichent des espaces
for (i = 0; i < 8; 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");
printf("| a | | | | | | | a |\n");
printf("---------------------------------\n");
printf("| b | | | | | | | b |\n");
printf("---------------------------------\n");
printf("| c | | | | | | | c |\n");
printf("---------------------------------\n");
printf("| d | | | | | | | d |\n");
printf("---------------------------------\n");
printf("| e | | | | | | | e |\n");
printf("---------------------------------\n");
printf("| f | | | | | | | f |\n");
printf("---------------------------------");
}
{ for(i=0;i<8;i++)
for(j=0;j<6;j++)
{
if(j=0)
x='a';
if(j=1)
x='b';
if(j=2)
x='c';
if(j=3)
x='d';
if(j=4)
x='e';
if(j=5)
x='f';
}
printf("| %c |",tab[i][j]);
printf("| | 0 | 1 | 2 | 3 | 4 | 5 | |\n");
printf("---------------------------------\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 une lettre de ligne (de a à f) et un numero de colonne (de 1 à 6):\n",J1);
scanf("&c%d",&L,&C1);
//Test sur la hauteur des colonnes, si elle sont remplies ou non
if((C1==1 && L0>5)|| (C1==2 && L1>5) || (C1==3 && L2>5) || (C1==4 && L3>5) || (C1==5 && L4>5) || (C1==6 && L5>5))
{
printf("\nDesole %s mais, la colonne %d est pleine, veuillez donner un autre numero de colone\n",J1,C1);
C1=-1;
}
}
while((C1<1 || C1>6));
//Donne le caractère X à la case jouée par le 1er joueur
{
if(C1==1)
tab[C1][L0]='X';
if(C1==2)
tab[C1][L1]='X';
if(C1==3)
tab[C1][L2]='X';
if(C1==4)
tab[C1][L3]='X';
if(C1==5)
tab[C1][L4]='X';
if(C1==6)
tab[C1][L5]='X';
}
//On incremente la hauteur d'une colonne à chaque fois que celle si est jouée:
if(C1==1)
tab[C1][L0++];
if(C1==2)
tab[C1][L1++];
if(C1==3)
tab[C1][L2++];
if(C1==4)
tab[C1][L3++];
if(C1==5)
tab[C1][L4++];
if(C1==6)
tab[C1][L5++];
//Affichage de la grille
printf("| | 0 | 1 | 2 | 3 | 4 | 5 | |\n");
for(j=5;j>=0;j--)
{
for(i=0;i<8;i++)
{
tab[0][5]=tab[7][5]='a';
tab[0][4]=tab[7][4]='b';
tab[0][3]=tab[7][3]='c';
tab[0][2]=tab[7][2]='d';
tab[0][1]=tab[7][1]='e';
tab[0][0]=tab[7][0]='f';
printf("| %c ",tab[i][j]);
}
printf("|\n");
}
printf("| | 0 | 1 | 2 | 3 | 4 | 5 | |\n\n");
/*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=1;i<4;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=1;i<7;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=1;i<4;i++)
{
for(j=0;j<3;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=6;i>3;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;
}
}
//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
//Le 2eme joueur joue
do
{
L0=0;L1=0;L2=0;L3=0;L4=0;L5=0;
printf("A vous de jouer %s, donner une lettre de ligne (de a à f) et un numero de colonne (de 1 à 6):\n",J2);
scanf("&c%d",&L,&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 autre numero de colone\n",J2,C2);
C2=-1;
}
}
while(C2<1 || C2>6);
//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';
/* 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++];
/* 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");
/*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=2;
}
}
/*Test pour savoir si le joueur 2 a gagné, si c'est le cas alors arret de la boucle*/
if(gagn2==2)
{
printf("Le gagnant est %s!!!\n",J2);
break;
}
}
while(gagn1!=1 || gagn2!=2);
break;
}
default : printf("Erreur de saisie du choix!");
}
return 0;
}

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
27,99 €Switch gigabit Netgear GS108, 8 ports à 27,99 €
Valable jusqu'au 26 Septembre

Amazon propose actuellement  le switch Gigabit Netgear GS108GE 8 ports (10/100/1000) à 27,99 € livré gratuitement. Le switch est garanti 5 ans.


> Voir l'offre
199 €Ecran portable 15,6 pouces Asus MB16ACE (FullHD, IPS, USB-C) à 199 €
Valable jusqu'au 26 Septembre

Amazon fait une promotion sur l'écran portable 15,6 pouces Asus MB16ACE qui passe à 199 € au lieu de 249 €. Cet écran à emporter partout avec vous possède une dalle IPS antireflet FullHD avec un design ultrafin. L'alimentation et l'affichage se font par USB-C. Branchez simplement votre ordinateur portable ou votre smartphone pour profiter d'un second écran ou même votre console, un ordinateur fixe ou un raspberry Pi 4 pour profiter d'écran principal. Fourni avec un étui refermable pouvant être ajusté de manière à former un support et utiliser le moniteur en mode Portrait ou Paysage.


> Voir l'offre
224,99 €Ecran 32 pouces Viewsonic VX3276-2K (WQHD, IPS, bords fins) à 224,99 €
Valable jusqu'au 25 Septembre

Amazon fait une promotion sur l'écran 32 pouces VX3276-2K qui passe à 224,99 € livré gratuitement. On le trouve ailleurs à partir de 250 €. Cet écran dispose d'une dalle WQHD (2560x1440) IPS 4ms, des bords fins, un filtre lumière bleue, de la technologie anti scintillement Flicker Free et intègre des haut-paleurs et des ports VGA, HDMI et Display Port. 


> Voir l'offre

Sujets relatifs
Aide pour un programme simple en C++
Aide POur initiation a SQL ( oracle 10G)
demande d'aide pour un petit script
Aide pour macro sur Notepad ++
Aide pour jeux
aide pour fichier .bat
aide pour une fonction
[SQL access] besoin d'aide pour une requete
Demande d'aide pour création d'un logiciel
Besoin d'aide pour un programme
Plus de sujets relatifs à Aide pour puissance 4 en C
 > Tous les forums > Forum Autres langages