Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal,

 

Tenho um jogo de tabuleiro com 530 territórios. 


- Quero sortear 3 números de 1 à 530 pra ser as bases do jogador (base 1, base 2 e base 3).

- Quero sortear 3 números de 1 à 530 pra ser o objetivo do jogador (Objetivo 1, Objetivo 2 e Objetivo 3).


Acontece que os números que estou gerando de 1 à 530 estão todos iguais. Preciso de números verdadeiramente aleatórios.

 

Olha a imagem com o resultado:

 

https://i.ibb.co/H23w4bd/image.png

 

Código:

 

/* srand example */
#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */

int main ()
{
   
   /* initialize random seed: */
   srand (time(NULL));
   printf ("Base 1: %d\n", rand()%530 + 1);  // Base número 1
   
   /* initialize random seed: */
   srand (time(NULL));
   printf ("Base 2: %d\n", rand()%530 + 1);  // Base número 2
   
   /* initialize random seed: */
   srand (time(NULL));
   printf ("Base 3: %d\n", rand()%530 + 1);  // Base número 3
   
   /* initialize random seed: */
   srand (time(NULL));
   printf ("Objetivo 1: %d\n", rand()%530 + 1);  // Objetivo número 1

   
   /* initialize random seed: */
   srand (time(NULL));
   printf ("Objetivo 2: %d\n", rand()%530 + 1);  // Objetivo número 2
   
   /* initialize random seed: */
   srand (time(NULL));
   printf ("Objetivo 3: %d\n", rand()%530 + 1);  // Objetivo número 3
   
  return 0;
}


Alguém pode ajudar sobre como fazer os números serem sorteados de 1 à 530?

 

Obrigado.

  • Curtir 1
Postado

@KXSY

 

Grato pela ajuda. Mas ainda não consegui resolver meu código. Eu compilei e rodei seu código mas não consegui resolver meu problema ainda....Preciso gerar 6 numeros apenas entre 1 e 530. Qualquer ajuda é bem vinda!

 


Obrigado.

 

 

-- Edit --

 

Eu optei por utilizar, já que achei como opção, usar um site online pra gerar os números randomicos de 1 à 530.

 

O problema é que se eu estiver sem internet não conseguirei jogar...hehe! 

 

Se alguém souber uma solução ainda eu agradeço. Trabalhei no código do @KXSY mas não consegui imprimir 6 números. Esta imprimindo 1 número apenas. Enfim, vou usar a versão online.

 

Agradecido!

  • Curtir 1
Postado
16 minutos atrás, Insurgent3 disse:

@KXSY

 

Grato pela ajuda. Mas ainda não consegui resolver meu código. Eu compilei e rodei seu código mas não consegui resolver meu problema ainda....Preciso gerar 6 numeros apenas entre 1 e 530. Qualquer ajuda é bem vinda!

 


Obrigado.

 

Você provavelmente não leu com cuidado a documentação de rand()/srand()... Quando você chama isso --- srand() --- com um certo valor a sequência é reiniciada. Isso se chama seeding, de semear. Como você chama srand() de novo com o mesmo valor fica tudo igualzinho de novo ;) 


Veja a saída

Vai usar srand(time(NULL) para iniciar a sequencia!...
rand() 9
rand() 4
rand() 3
rand() 1
rand() 5
rand() 4
rand() 10
rand() 3
rand() 10
Vai usar o mesmo srand() para iniciar a sequencia...
EntÒo vai gerar a mesma sequencia!...
rand() 9
rand() 4
rand() 3
rand() 1
rand() 5
rand() 4
rand() 10
rand() 3
rand() 10

para o programa 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "time.h"
int main(int argc, char* argv)
{
    printf("Vai usar srand(time(NULL) para iniciar a sequencia!...\n");
    srand(time(NULL));
    for (int i = 0; i < 9; i += 1)
        printf("rand()%10 %d\n", rand() % 10 + 1);
    printf("Vai usar o mesmo srand() para iniciar a sequencia...\n");
    printf("Então vai gerar a mesma sequencia!...\n");
    srand(time(NULL));
    for (int i = 0; i < 9; i += 1)
        printf("rand()%10 %d\n", rand() % 10 + 1);
    return 0;
};  // main()

Agora se você mudar...

    printf("srand(2002021355) para iniciar a sequencia!...\n");
    srand(2002021355);
    for (int i = 0; i < 9; i += 1)
        printf("rand()%%10 %d\n", rand() % 10 + 1);
    printf("Continua usando rand() para a nova sequencia...\n");
    for (int i = 0; i < 9; i += 1)
        printf("rand()%%10 %d\n", rand() % 10 + 1);
    return 0;

vai ver 

srand(2002021355) para iniciar a sequencia!...
rand()%10 3
rand()%10 7
rand()%10 4
rand()%10 6
rand()%10 5
rand()%10 4
rand()%10 2
rand()%10 9
rand()%10 6
Continua usando rand() para a nova sequencia...
rand()%10 2
rand()%10 6
rand()%10 8
rand()%10 6
rand()%10 6
rand()%10 8
rand()%10 7
rand()%10 3
rand()%10 5

 

24 minutos atrás, KXSY disse:

Gerar números aleatórios em tempo real geralmente não dá muito certo

 

Que significa? Qual seria o problema em geral?

adicionado 2 minutos depois

As vezes você quer exatamente isso: poder reproduzir uma sequência "aleatória" para novos testes. Mas em muitos casos não é o que você quer. Então você chama srand() de acordo com sua intenção. Qualquer integer serve como parâmetro. 

  • Curtir 1
Postado
1 hora atrás, KXSY disse:

Em jogos os números não podem ser tão aleatórios assim, fora que não poderia repetir o numero que já foi gerado

 

Isso vai depender do jogo e da situação. Se estiver simulando movimento, partículas ou coisas assim não há qualquer problema em repetir números e por outro lado você pode criar problemas ao evitar a repetição. Imagine por exemplo vento, fogo, inimigos...
 

  • Curtir 1
Postado

Poderia tentar assim:

#include <iostream>
#include <climits>

bool existe(int valor, int valores[], int tamanho);

int main() {
    const int tamanho = 6;
    int valores[tamanho] = {INT_MIN, INT_MIN, INT_MIN, INT_MIN, INT_MIN, INT_MIN};

    int base1 = INT_MIN;
    int base2 = INT_MIN;
    int base3 = INT_MIN;
    int objetivo1 = INT_MIN;
    int objetivo2 = INT_MIN;
    int objetivo3 = INT_MIN;

    srand((unsigned) time(nullptr));

    for (int i = 0; i < tamanho; ++i) {
        int valor = INT_MIN;

        do {
            valor = rand() % 530 + 1;
        } while (existe(valor, valores, tamanho));

        valores[i] = valor;
    }

    base1 = valores[0];
    base2 = valores[1];
    base3 = valores[2];
    objetivo1 = valores[3];
    objetivo2 = valores[4];
    objetivo3 = valores[5];

    return 0;
}

bool existe(int valor, int valores[], int tamanho) {
    for (int i = 0; i < tamanho; ++i) {
        if (valores[i] == valor) {
            return true;
        }
    }

    return false;
}

 

  • Curtir 1
  • 2 semanas depois...
Postado

@Insurgent3      testei aqui e está funcionando bem , gera todos Números Aleatórios mesmos , talvez seja o compilador / IDE que você esteja Usando   . e seu código poderia ser Assim   :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define H GetStdHandle(STD_OUTPUT_HANDLE)
void textcolor_2(int l,int f){SetConsoleTextAttribute(H,l+(f<<4));}
int main (){
    srand (time(NULL));
    textcolor_2(14,0);
    printf ("Base 1 ------: %d\n", rand()%530 + 1);  // Base     número 1
    printf ("Base 2 ------: %d\n", rand()%530 + 1);  // Base     número 2
    printf ("Base 3 ------: %d\n", rand()%530 + 1);  // Base     número 3
    printf ("Objetivo 1 --: %d\n", rand()%530 + 1);  // Objetivo número 1
    printf ("Objetivo 2 --: %d\n", rand()%530 + 1);  // Objetivo número 2
    printf ("Objetivo 3 --: %d\n", rand()%530 + 1);  // Objetivo número 3
   return 0;
}

 

  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!