Ir para conteúdo
Fórum Script Brasil
  • 0

jogo do bingo


lhalmenschlager

Pergunta

Ola pessoal eu gostaria que voçes me ajudassem em uma função do meu programa para que não repetisse os

numeros da cartela dos jogadores. Sempre que eu rodo o programa aparece os mesmos numeros nas cartelas.

O programa esta ai. Está funcionando bem e só falta esse detalhe. Compilado no Turbo C. Abraço

/*Jogo do Bingo*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define SOMA 1
#define NOME 20
#define JOG 6
#define LIN 2
#define COL 15
int verifica(int jog, int linha, int coluna, int boll, int gamer[JOG][LIN][COL]);
int numbola();
int randnume();
int randcart();
void inicio(void);


//*---------------------------------Funcao Principal------------------------------

void main(void) 
{
    char op;
    static int cartao[JOG][LIN][COL], cart[JOG];
    static char jogador[JOG][NOME];
    int l, c, n, j, bola, teste, vetorsoma[JOG][LIN][COL], soma[JOG][LIN], pausa;
    int quadra, linha, bingo, acumulado;
    clrscr();

for(j = 0; j < JOG; j++) /*Laco*/
{

    cprintf("\nQual o nome do Jogador? ");
    scanf("%s", &jogador[j][NOME]);
    printf("\nSeu numero de cartela(s) sera sorteado.\n");
    printf("\n");
    cart[j] = randcart();     /*Numero de cartelas é sorteado*/
    printf("\nJogara com %d cartelas\n", cart[j]);
for(l = 0; l < cart[j]; l++)

{
for(c = 0; c < COL; c++)

{
    cartao[j][l][c] = randnume(); /*Numeros das cartelas são sorteados*/
    printf("-%d-", cartao[j][l][c]); }
    printf("\n");
 }
    getch();
    clrscr();
}

inicio(); /* primeira declaracao desta funcao: cria um placar de enfeite*/
gotoxy(4,8);
printf("Entrem os participantes: ");
gotoxy(1,10);
for(j = 0; j < JOG; j++) /*Laco que imprime os participantes e suas cartelas*/
{
   printf("Senhor(a) %s, sua cartela é:\n", &jogador[j][NOME]);
for(l = 0; l < cart[j]; l++)
 {
   printf("\n================================================================\n");
   printf("||");
for(c = 0; c < COL; c++)
 {
   printf("-%d-", cartao[j][l][c]); } cprintf("||");
   printf("\n================================================================\n");
   printf("\n");
 }

}
getch();
clrscr();
gotoxy(8,8);
cprintf("Precione qualquer tecla para comecar o jogo");
getche();
clrscr();
inicio();
getche();
clrscr();
inicio();
gotoxy(4,8);
cprintf("Vamos sortear as bolas. Boa sorte, jogadores!");
for(j = 0; j < JOG; j++)     /*Laco duplo, para inicializar a variavel*/
{
for(l = 0; l < cart[j]; l++) {soma[j][l] = 0;}}    /*soma[j][l]*/
quadra = 1; linha = 1; bingo = 1; acumulado = 1;
for(n = 0; n < 90; n++)             /*Inicio das bolas e do jogo*/
{                                  /*Laco principal*/
    getche();
    clrscr();
    inicio();
    gotoxy(4,8);
    cprintf("Vamos sortear as bolas. Boa sorte, jogadores!");
    gotoxy(4,10);
    bola = numbola();    /*Chama funcao que sorteia a bola e poe o resultado*/
    cprintf("A %da bola é: %d", n+1, bola); /*na variavel 'bola'*/
    getche();
    clrscr();
    inicio();

for(j = 0; j < JOG; j++)
{
   for(l = 0; l < cart[j]; l++)
{
   for(c = 0; c < COL; c++)
{
   teste = verifica(j,l,c,bola,cartao);     /*Funcao que compara*/
   if(teste == 's') vetorsoma[j][l][c] = 1; /*Aqui, é criado um novo vetor,*/
    else vetorsoma[j][l][c] = 0;            /*vetorsoma[][][], onde sera de 1s e 0s*/
   soma[j][l] += vetorsoma[j][l][c];        /*para todos os 1s serem somados*/
   if(soma[j][l] == 4 && quadra)
{
   gotoxy(2,15); /*Sendo a soma igual a 4, tem a quadra*/
   cprintf("Senhor(a) %s diz: CONSEGUI, GANHEI A QUADRA!!!", &jogador[j][NOME]);
   quadra = 0;
}    /*Dado novo valor para a variavel, para laco n se repetir*/

   else

if(soma[j][l] == 5 && linha)
{
    gotoxy(2,15);/*Sendo a soma igual a 5, tem a linha*/
    cprintf("Senhor(a) %s diz: CONSEGUI, GANHEI A LINHA!!!", &jogador[j][NOME]);
    linha = 0;
}
   else

if(soma[j][0] == 15 && bingo|| (soma[j][0]+soma[j][1]) == 30 && bingo)
{
    gotoxy(2,15); /*Todos os numeros das cartelas preenchidos, temos bingo*/
    cprintf("Senhor(a) %s diz: CONSEGUI, GANHEI O BINGO!!!", &jogador[j][NOME]);
    bingo = 0;
}    /*Dado novo valor para a variavel, para laco n se repetir*/

   else

if(n <= 40 && soma[j][0] == 15 && acumulado || n == 40 && (soma[j][0]+soma[j][1] && acumulado) == 30) 
{
    gotoxy(2,15);/*Todos os numeros em 40 bolas, ou menos, acumulada*/
    cprintf("Senhor(a) %s diz: CONSEGUI, GANHEI O ACUMULADO!!!", &jogador[j][NOME]);
    acumulado = 0;/*Dado novo valor para a variavel, para laco n se repetir*/
    pausa = 1;
} /*Entrando no laco da acumulada, d valor de 1 para "pausa"*/

}}}

if(pausa == 1)
{
    gotoxy(2,20);
    cprintf("FIM DE JOGO! PARABENS, VENCEDOR!!!");
    goto Fim;
} /*Cursor vai para o "Fim:"*/
}
Fim:
getch();

}

//*--------------Fim da funcao Principal----------------------------------------

void inicio(void)
{
    gotoxy(28,2);
    cprintf("=========================\n");
    gotoxy(28,3);
    cprintf("||----JOGO DO BINGO----||\n");
    gotoxy(28,4);
    cprintf("=========================\n");
}



//*----------------------------Funcao sorteia numeros dos cartoes--------------------

int randnume()
{
    int numero; /*Retorna inteiros*/
    numero = random(90)+1;
    return(numero);
 }

//*-----------------funcao do sorteio da quantidade de cartoes------------------------

int randcart()
{
   int cart; /*Retorna inteiro*/
    cart = random(2)+1;
    return(cart);
}


//*--------------------funcao escolhe um numero de 1 a 90------------------------------

int numbola()
{
    int bola; /*Retorna este numero*/
    bola = random(90)+1;
    return(bola);
}

int verifica(int jog, int linha, int coluna, int boll, int gamer[JOG][LIN][COL])
{
if(gamer[jog][linha][coluna] == boll)
{
return('s');
}       /*Funcao complexa. Compara a bola sorteada com o numero respectivo do cartao */
}

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

cart[j] = randcart();

essa função ai... é que sorteia, então... que eu saiba ela sempre sorteia o mesmo tanto.

Eu uso o rand diferente, assim:

vetor/matriz = rand()%100; //100 seria até onde sairia numeros, por exempli: se definir a matriz ou vetor com 50 elementos, vai ter 50 números, cada um entre 0 e 100.

Se eu mudar esse 100, aí ele vai sortear de novo, novos numeros, caso esse número seja o mesmo, irá sempre sortear os mesmos.

No seu caso eu não analisei pra saber o que significa sua variavel JOG que é o indice q está sendo usado no rand.

Não tenho certeza se não dá pra mudar isso, mas está ai o que eu sei, só vai mudar se você mudar, o que é nesse exemplo, o 100.

Link para o comentário
Compartilhar em outros sites

  • 0
cart[j] = randcart();

essa função ai... é que sorteia, então... que eu saiba ela sempre sorteia o mesmo tanto.

Eu uso o rand diferente, assim:

vetor/matriz = rand()%100; //100 seria até onde sairia numeros, por exempli: se definir a matriz ou vetor com 50 elementos, vai ter 50 números, cada um entre 0 e 100.

Se eu mudar esse 100, aí ele vai sortear de novo, novos numeros, caso esse número seja o mesmo, irá sempre sortear os mesmos.

No seu caso eu não analisei pra saber o que significa sua variavel JOG que é o indice q está sendo usado no rand.

Não tenho certeza se não dá pra mudar isso, mas está ai o que eu sei, só vai mudar se você mudar, o que é nesse exemplo, o 100.

Sim meu amigo mas aonde eu posso encaixar essa função? abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Onde tem a função rand ou random no código... foi você que fez ou pegou pronto? Se não foi você, deve pelo menos entender como funciona a função rand que está sortiando as cartelas e bolas... associando ao que eu disse, você saberá se é possível ir mudando o indice para sortear numeros diferentes ou pode ser que não dê , de acordo com o funcionamento do programa... eu nem testei esse programa...

E uma observação: sou mulher.

Link para o comentário
Compartilhar em outros sites

  • 0

você sabe onde está sorteando o que?

Tem mais de uma função rand aí no código...

tem essa cart[j] = randcart();

usada no ínicio do programa... é usada num for. (realmente ainda não analisei bem para ver pra que serve).

tem três funções no final que usam o rand também...

/*----------------------------Funcao sorteia numeros dos cartoes--------------------

int randnume()
{
int numero; /*Retorna inteiros*/
numero = random(90)+1;
return(numero);
}

//*-----------------funcao do sorteio da quantidade de cartoes------------------------

int randcart()
{
int cart; /*Retorna inteiro*/
cart = random(2)+1;
return(cart);
}


//*--------------------funcao escolhe um numero de 1 a 90------------------------------

int numbola()
{
int bola; /*Retorna este numero*/
bola = random(90)+1;
return(bola);
}

Primeiro, está comentado nessas funções acima pra que servem... então, o que você quer mudar para randmize() ?

Como assim apenas te falaram?! Pesquise e veja como essa função randemize funciona!!

Depois tente colocar aonde você quer, se é na função para sortear números de cartões, quantidade de cartões ou numero das bolas...

Por favor, é realmente muito importante que você estude este código antes de tentar fazer alguma alteração.

Link para o comentário
Compartilhar em outros sites

  • 0

Pois é... randomize é do pascal... srand é em C.

Voce pode usar a funcao srand() e rand() da stdlib. A srand() tem mais ou menos a mesma funcao da Randomize do pascal. Dai, para voce gerar um numero aleatorio (entre 0 e RAND_MAX) voce faz uma chamada para a funcao rand().

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(){
      srand(time(NULL));
      while (1)
             printf("%d\n", rand());
      return 0;
}
Se voce quiser gerar um numero entre linf (limite inferior) e lsup (limite superior) (dois valores que voce escolhe), voce pode fazer assim:
int rvalue = linf + (rand() % (lsup - linf));

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...