Supprimer un élément d'une grille

KalenShiv Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   -  
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis actuellement en train de créer le jeu Bingo. J'ai réussi à faire afficher le tirage de la boule mais aussi une grille avec des nombres aléatoires. Cependant je ne sais pas comment à partir de ce programme enlever un élément de la grille si celui ci correspond au nombre tiré.

Règle du jeu bingo : le joueur dispose d'une grille sur laquelle sont notés divers numéros tirés aléatoirement. L'orateur énonce à voix haute les nombres parus à la sortie de l'urne et chaque joueur raye ou non le chiffre s'il apparaît dans sa propre grille. Le premier à avoir rayé tous les nombres d'une même ligne ou d'une même colonne crie « Bingo » pour annoncer qu'il vient de gagner.

PS : Je suis un débutant en C.

Merci d'avance!

Code:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int *tirage(int nombre, int min, int max)
{
    int *tabelems, *ret, i, indice, maxi = max - min;
    if(min >= max || nombre > maxi + 1 || nombre < 1)
        return NULL;
    tabelems = malloc((maxi + 1) * sizeof(int));
    ret = malloc(nombre * sizeof(int));
    for(i = 0; i < maxi + 1; i++)
        tabelems[i] = i + min;
    for(i = 0; i < nombre; i++){
        indice = rand() % (maxi + 1);
        ret[i] = tabelems[indice];
        tabelems[indice] = tabelems[maxi];
        maxi--;
    }
    free(tabelems);
    return ret;
}

int *tirage(int nombre, int min, int max);
int compare(int tabl[45], int nombre , int taille);



int main ()
{
  int i,j,*tab;
  int nb = 5;
  int tableau[45];
  int tire;

    //On affiche la grille
     printf("+----+----+----+----+----+\n");
    srand(time(NULL));
    for(j = 0; j < 5; j++)
    {
        printf("|");
        if((tab = tirage(nb, 10, 45)))
        {

            for(i = 0; i < nb; i++)
                printf(" %d |", tab[i]);
                printf("\n+----+----+----+----+----+\n");
            printf("\n");
            free(tab);
        }
    }
    //Initialisation de la semence
  srand ( time(NULL) );

  system("PAUSE");//fait une pause
  for(i=10;i<45;i++) //boucle pour i de 0 à 45
  {

    do{
        tire=  10+rand() % 45;
    }while (compare(tableau,tire,i));

  tableau[i] = tire;
  printf ("Le nombre de la boule est : %d \n", tire);


    system("PAUSE");
  }

  return 0;


}

int compare(int tabl[45], int nombre , int taille)
{
    int res;
    int j;
    res = 0;
    j=0 ;
    do
    {
        if(tabl[j]==nombre){res=1;}
        j++;
    }while (res==0 && j<taille);
    return res;
}


Ce que le programme affiche :

+----+----+----+----+----+
| 12 | 31 | 28 | 22 | 10 |
+----+----+----+----+----+

| 33 | 20 | 45 | 16 | 28 |
+----+----+----+----+----+

| 15 | 39 | 36 | 12 | 19 |
+----+----+----+----+----+

| 15 | 13 | 14 | 38 | 27 |
+----+----+----+----+----+

| 24 | 15 | 39 | 18 | 32 |
+----+----+----+----+----+

Appuyez sur une touche pour continuer...
Le nombre de la boule est : 48
Appuyez sur une touche pour continuer...
Le nombre de la boule est : 41
Appuyez sur une touche pour continuer...
Le nombre de la boule est : 30
Appuyez sur une touche pour continuer...
A voir également:

2 réponses

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,
On pourrait remplacer dans la grille les éléments tirés par leur opposé.
Une grille est gagnante si une ligne ou une colonne est remplie de nombres négatifs.
0
KalenShiv Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
Effectivement, j'avais aussi penser à les remplacer par des 0. Dois-je créer un fonction exprès qui va verifier chaque ligner et colonne de la grille ? Je suis vraiment bloqué...
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101 > KalenShiv Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
Je ne vois pas le blocage.
Oui, il parait logique d'avoir une fonction qui vérifie la condition de gain. On pourrait associer un compteur à chaque ligne et colonne qui serait incrémenté quand un numéro est bon, un simple test indiquerait qu'il y a gain. Ou bien parcourir la ligne et la colonne pour voir s'il y a gain à chaque coup serait surement plus lisible.
0
KalenShiv Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
Personne ? :(
0