J'aimerai réaliser le jeu Bingo en C. Je tiens d'abord à préciser que je suis débutant en c. J'aimerai savoir comment créer une grille avec les numeros par carte s'il vous plaît. J'ai commencé pour l'instant à coder le tirage de "la boule" pour l'instant.
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // pour rand
int main(void){
srand(time(NULL));
int tirage=rand()%90+1; //entre 1-9
printf("%d\n",tirage);
return 0;
}
Dans une grille, il y a 5 numéro par ligne, et il ne peut y avoir 2 numéro dans la même dizaine pour une ligne, d'où :
void fillGrid( unsigned char grid[2][5] ) {
for ( int j = 0 ; j < 2 ; ++j ) { // pour chaque ligne
for ( int i = 0 ; i < 5 ; ++i ) { // pour chaque numero de la ligne
for (;;) { // trouver un unique dans sa dizaine
unsigned char numero = rand()%90+1;
unsigned char dizaine = numero==90 ? 8 : numero / 10;
int k;
for ( k = 0 ; k < i ; ++k ) { // chercher parmi les precedents
unsigned char diz = grid[j][k]==90 ? 8 : grid[j][k] / 10;
if ( diz == dizaine )
break; // dans la même dizaine, pas bon
}
if ( k >= i ) // on a tout vérifie sans voir de probleme
break; // le numero tire est valide
// sinon en chercher un autre
}
grid[j][i] = numero;
} // fin chaque numero de la ligne
} // fin chaque ligne
}
Merci infiniment pour ta réponse ! Cependant lorsque j'essaie de compiler avec gcc ça me met comme message d'erreur :
bingo.c: In function ‘fillGrid’:
bingo.c:5:36: warning: implicit declaration of function ‘rand’ [-Wimplicit-function-declaration]
unsigned char numero = rand()%90+1;
^
bingo.c:17:23: error: ‘numero’ undeclared (first use in this function)
grid[j][i] = numero;
^
bingo.c:17:23: note: each undeclared identifier is reported only once for each function it appears in
bingo.c: In function ‘fillGrid’:
bingo.c:6:22: warning: implicit declaration of function ‘rand’ [-Wimplicit-function-declaration]
numero = rand()%90+1;
^
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: dans la fonction « _start »:
(.text+0x20): référence indéfinie vers « main »
collect2: error: ld returned 1 exit status
c'était dans ton code d'origine... l'as tu supprimé ?
il semble aussi que ton code ne contienne aucune fonction main ?
sinon, je ne comprends pas tout dans le code de Dalfab (qui est très compact et efficace, comme d'habitude), en particulier pourquoi il n'y a que 2 lignes à la grille, ni cette règle à propos des dizaines... mais peut-être est-ce mon ignorance au sujet des règles de ce jeu :-)
Voici le code que Dalfab m'a envoyé et que j'ai essayé de compiler :
#include <stdio.h>
#include <stdlib.h>
void fillGrid( unsigned char grid[3][5] ) {
for ( int j = 0 ; j < 3 ; ++j ) { // pour chaque ligne
for ( int i = 0 ; i < 5 ; ++i ) { // pour chaque numero de la ligne
unsigned char numero;
for (;;) { // trouver un unique dans sa dizaine
numero = rand()%90+1;
unsigned char dizaine = numero==90 ? 8 : numero / 10;
int k;
for ( k = 0 ; k < i ; ++k ) { // chercher parmi les precedents
unsigned char diz = grid[j][i]==90 ? 8 : grid[j][i] / 10;
if ( diz == dizaine )
break; // dans la même dizaine, pas bon
}
if ( k >= i ) // on a tout vérifie sans voir de probleme
break; // le numero tire est valide
// sinon en chercher un autre
}
grid[j][i] = numero;
} // fin chaque numero de la ligne
} // fin chaque ligne
}
D'ailleurs lorsque j'essaie de comiler sur CodeBlocks ça m'affiche comme erreur :
error: 'for' loop initial declarations are only allowed in C99 or C11 mode
D'acc, merci je comprends mieux maintenant. Du coup le code de daflab permet de creer un grille qui va lire les chiffres du tableau (que je devrais faire) c'est bien ça ?
Selon ma compréhension la fonction proposée par Dalfab permet de générer une grille avec des numéros.
C'est à dire les grilles avec lesquelles les joueurs de "Bingo" jouent, qui leurs sont attribuées, et sur lesquelles ils peuvent "cocher" la case, ou poser un pion dessus, etc., si le numéro correspondant est tiré durant le jeu.
Donc, cette grille doit être attribuée à un joueur. Tu dois logiquement l'afficher, pour que le joueur la voie... et faire le reste du jeu :-)
C'est à dire les grilles avec lesquelles les joueurs de "Bingo" jouent, qui leurs sont attribuées, et sur lesquelles ils peuvent "cocher" la case, ou poser un pion dessus, etc., si le numéro correspondant est tiré durant le jeu.
Donc, cette grille doit être attribuée à un joueur. Tu dois logiquement l'afficher, pour que le joueur la voie... et faire le reste du jeu :-)
Dal
Merci beaucoup pour vos explications très claires et précises!