× 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
89,07 €Onduleur APC BX 700 à 89,07 €
Valable jusqu'au 30 Octobre

Amazon fait une promotion sur le très bon onduleur APC BX 700U FR qui passe à 89,07 € livré gratuitement alors qu'on le trouve ailleurs à partir de 105 €. Cet onduleur assure une alimentation de secours sur batteries et une protection contre les surtensions pour votre ordinateur et vos périphériques le temps que vous fermiez vos documents et éteignez correctement votre materiel en cas de coupure de courant. Il offre une puissance de sortie de 390W/700 VA. Son port USB vous permettra de brancher votre NAS ou votre ordinateur dessus pour qu'il gère automatiquement l'arrêt en cas de coupure.


> Voir l'offre
699,99 €Portable 14 pouces Asus Vivobook Flip (FullHD, Ryzen 5, 8Go, SSD 512 Go) à 699,99 €
Valable jusqu'au 31 Octobre

Cdiscount fait une promotion sur le PC portable convertible en tablette 14 pouces Asus Vivobook Flip TM420IA-EC027T qui passe à 699,99 € alors qu'on le trouve ailleurs à partir de 799€. Ce portable que vous pouvez plier comme une tablette est très bien équipé. Il possède un écran 14 pouces Full HD (1920x1080) IP mat antireflet et tactile, un processeur AMD Ryzen 5 4500U, 8 Go de RAM (extensible à 16 Go), un processeur graphique AMD Radeon Vega 6 et un SSD NVMe de 512 Go. Le WiFi, le bluetooth, un pavé numérique et une webcam sont de la partie. Le tout tourne sous Windows 10. Une bonne affaire.


> Voir l'offre
38,90 €Microsoft Office 2019 Professional Plus à 38,90 €
Valable jusqu'au 01 Novembre

Le vendeur sérieux LicenSE-ONLine propose sur Amazon la clé d'activation légale pour Microsoft Office Professionnel 2019 Plus en français à 38,90 €. Cette clé livrée par email vous permettra d'activer Microsoft Office Professionnel 2019 Plus légalement et vous permettra ainsi d'utiliser autant de temps que vous voulez (il s'agit de la version complète et pas d'un abonnement) Word,Excel, PowerPoint, OneNote, Outlook, Publisher et Access 2019 sur un PC. La clé sera à activer sur Office.com où vous pourrez ensuite télécharger toute la suite bureautique. Pour mémoire, Microsoft Office Professionnel 2019 nécessite Windows 10. Pour plus d'info sur la procédure, n'hésitez pas à jeter un oeil à notre dossier pratique Acheter une clé OEM d'Office 2019 et l'installer.


> 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