Supprimer un élément d'une grille

Fermé
KalenShiv Messages postés 27 Date d'inscription mercredi 23 novembre 2016 Statut Membre Dernière intervention 20 avril 2017 - 20 avril 2017 à 17:06
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 20 avril 2017 à 22:39
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...

2 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
20 avril 2017 à 17:43
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 mercredi 23 novembre 2016 Statut Membre Dernière intervention 20 avril 2017
20 avril 2017 à 17:49
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101 > KalenShiv Messages postés 27 Date d'inscription mercredi 23 novembre 2016 Statut Membre Dernière intervention 20 avril 2017
20 avril 2017 à 22:39
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 mercredi 23 novembre 2016 Statut Membre Dernière intervention 20 avril 2017
20 avril 2017 à 19:48
Personne ? :(
0