> 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

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 participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
51,99 €Barre de son bluetooth Philips TAB5105 à 51,99 €
Valable jusqu'au 28 Janvier

Cdiscount fait une promotion sur la barre de son bluetooth Philips TAB5105 qui passe à 51,99 € alors qu'on la trouve ailleurs à partir de 80 €. Cette barre de son intègre 2 haut-parleurs 2x15W et peut lire vos musiques sans fil via Bluetooth. Une entrée audio jack 3.5 mm et optique TOSLINK sont également présentes. Compatible HDMI ARC, vous pourrez contrôler la barre de son à l'aide de la télécommande de votre téléviseur. Elle est suffisamment fine pour se glisser sous la plupart des téléviseurs. Vous pouvez également la fixer au mur à l'aide des supports intégrés.


> Voir l'offre
15,99 €SSD PNY CS900 120 Go à 15,99 €
Valable jusqu'au 29 Janvier

Cdiscount fait une promotion sur le SSD PNY CS900 120 Go qui passe à 15,99 €. Ce SSD offre des vitesses d'écriture de 515 Mo/s et de lecture à 550 Mo/s. Il est garanti 3 ans. De quoi donner une seconde jeunesse à un ordinateur un peu ancien.


> Voir l'offre
169,99 €Tablette 10.4 pouces Realme Pad (8 coeurs, 3 Go RAM, 32 Go) à 169,99 €
Valable jusqu'au 28 Janvier

Cdiscount fait une promotion la tablette 10.4 pouces Realme Pad qui passe à 169,99 € au lieu de 289 €. La tablette possède un écran de 26.31 cm WUXGA+ (2000x1200 pixels) à bords fins, un processeur octo core, 3 Go de RAM, 32 Go de stockage extensibles jusqu'à 1 To par MicroSD et tourne sous Android 11. Le WiFi, le bluetooth et le GPS sont également de la partie. Sa batterie de 7100 mAh à charge rapide 18W offre une large autonomie (65 jours en veille, 12h en lecture vidéo).

Notez qu'un mode "Plusieurs utilisateurs" vous permettra de partager votre tablette entre plusieurs membres de votre famille en toute sécurité.


> 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