Bonjour à tous ! J’essaye en ce moment de faire le TP Puissance 4 proposé dans le cours de C. Cependant j’ai un problème que je n’arrive vraiment pas à comprendre après mes recherches. Il s’agit d’un retour à la ligne non voulu.
En effet, j’essaye dans un premier temps de créer puis d’afficher la grille de jeu, pour cela j’ai fait une structure cell contenant un tableau 2D de caractères ainsi qu’un symbole (soit 'O' soit 'X’). J’ai aussi fait une structure grille qui est un tableau 2D de cell. Pour l’affichage d’une cellule, je n’ai pas de problèmes. En revanche, pour afficher toutes la grille j’en ai un. Je voudrais faire un retour à la ligne une fois que mon compteur j (voir le code ci-dessous) arrive à NB_COLONNES-1 sauf qu’un retour à la ligne est fait à chaque affichage de cellule. Je ne vois pas pourquoi ? Peut être qu’un appelle à une fonction engendre automatiquement un retour à la ligne ? Merci d’avance pour votre aide
Voici le code :
puissance4.h :
#ifndef PUISSANCE4_H
#define PUISSANCE4_H
#define NB_LIGNES 6
#define NB_COLONNES 7
struct cell
{
char case_cell[3][5];
char symbole;
};
struct grille
{
struct cell grille_cell[NB_LIGNES][NB_COLONNES];
};
int saisir_coup(int joueur);
struct grille creer_grille(int nb_lignes, int nb_colonnes);
#endif
puissance4.c :
#include <stdio.h>
#include <stdlib.h>
#include "puissance4.h"
struct cell creer_cell()
{
struct cell* Cellule = malloc(sizeof(struct cell));
for(int i=0; i<3; i++){
for(int j=0; j<5; j++){
if((i==0 && j==0)||(i==2 && j==4)||(i==2 && j==0)||(i==0 && j==4))
Cellule->case_cell[i][j]='+';
else if((i==0 || i==2) && (j==1 || j==2 || j==3))
Cellule->case_cell[i][j]='-';
else if((i==1 && j==0) || (i==1 && j==4))
Cellule->case_cell[i][j]='|';
else if((i==1 && j==1)||(i==1 && j==3))
Cellule->case_cell[i][j]=' ';
}
}
Cellule->symbole = ' ';
return *Cellule;
}
void afficher_cell(struct cell Cellule)
{
for(int i=0; i<3; i++){
for(int j=0; j<5; j++){
if(j==4)
printf("%c\n", Cellule.case_cell[i][j]);
else if(i==1 && j==2)
printf("%c", Cellule.symbole);
else
printf("%c", Cellule.case_cell[i][j]);
}
}
}
struct grille creer_grille(int nb_lignes, int nb_colonnes)
{
struct grille* Grille = malloc(sizeof(struct grille));
for(int i=0; i<NB_LIGNES; i++){
for(int j=0; j<NB_COLONNES; j++){
Grille->grille_cell[i][j]=creer_cell();
}
}
return *Grille;
}
void afficher_grille(struct grille Grille)
{
for(int i=0; i<NB_LIGNES; i++){
for(int j=0; j<NB_COLONNES; j++){
if(j==NB_COLONNES-1){
afficher_cell(Grille.grille_cell[i][j]);
printf("\n");
}
else
afficher_cell(Grille.grille_cell[i][j]);
}
}
}
int main(void)
{
struct grille G1 = creer_grille(NB_LIGNES, NB_COLONNES);
afficher_grille(G1);
return 0;
}
Et le résultat en ligne de commande après compilation et execution :
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+
+---+
| |
+---+