× 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
16,99 €Ponceuse vibrante TACKLIFE 130W + 12 papiers abrasifs à 16,99 € avec le code 4278J2PC
Valable jusqu'au 28 Octobre

Amazon fait une double promotion sur la ponceuse vibrante TACKLIFE 130W + 12 papiers abrasifs qui vous reviendra à 16,99 € seulement avec le code 4278J2PC au lieu d'une quarantaine d'euros habituellement. Pour profiter de l'offre, utilisez le code promo 4278J2PC. Le prix passera à 16,99 € sur la page de confirmation de commande.


> Voir l'offre
72,94 €Enceintes 2.0 Bose Companion 2 Série III à 72,94 € livrées (via coupon)
Valable jusqu'au 27 Octobre

Amazon Allemagne propose actuellement l'excellent kit 2.0 Bose Companion 2 Série III qui passe à 64,98 € grâce à un coupon de réduction automatiquement appliqué alors qu'on le trouve ailleurs à partir de 99 €. Comptez 7,96 € pour la livraison en France, soit un total de 72,94 € livré. Découvrez un son d'une profondeur et clarté sans égal, que ce soit avec de la musique, des films ou des jeux. Rappelons que vous pouvez utilisez votre compte Amazon France sur Amazon Allemagne et qu'il n'y a pas de douane.


> Voir l'offre
29,99 €XIAOMI Mi TV Stick à 29,99 €
Valable jusqu'au 29 Octobre

Cdiscount propose en exclusivité la nouvelle version de la clé HDMI XIAOMI Mi TV Stick à 29,99 €. Cette clé HDMI à brancher sur votre TV possède un processeur quadricoeur, 1 Go de RAM et 8 Go d'espace de stockage, le WiFi et le bluetooth. Elle intègre un Chromecast, est compatible Dolby et DTS et est fournie avec une télécommande qui peut être pilotée à la voix. Elle tourne sous Android TV 9.0 et vous allez pouvoir voir facilement Prime Video, Netflix, Disney+, YouTube, Spotify, Moltov, ... sur votre TV Full HD.


> 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