Inufelipe Postado Julho 28, 2007 Denunciar Share Postado Julho 28, 2007 Ola galera do script brasil forum.Eu estou a criar um joguinhode cartas( ou cromos ), e estouusando o rand() e o srand(time(NULL))para criar as cartas aleatoriamentee seus atributos, o problema éque não esta muito aleatorioporque as cartas se repetem,se alguém puder ajudara tornar mais aleatorioeu agradeço.#include <stdio.h> #include <iostream> #include <stdlib.h> #include <time.h> int ra(){ int temp; temp = rand(); return temp; } void direction(int a, int b){ switch(b){ case 1: printf("Toda:"); break; case 2: switch(a){ case 0: printf("Topo e Esquerda:"); break; case 1: printf("Base e Direita:"); break; } break; case 4: switch(a){ case 0: printf("Topo:"); break; case 1: printf("Esquerda:"); break; case 2: printf("Base:"); break; case 3: printf("Direita:"); break; } break; } } class Cromo{ private: int colors; int *color; bool field; public: bool hand; Cromo(){} void set(int a){ colors = 1; hand = 0; field = 0; color = (int*)malloc(sizeof(int)); *color = a; } void set(int a,int b){ colors = 2; hand = 0; field = 0; color = (int*)malloc(sizeof(int)*2); color[0] = a; color[1] = b; } void set(int a,int b,int c, int d){ colors = 4; hand = 0; field = 0; color = (int*)malloc(sizeof(int)*4); color[0] = a; color[1] = b; color[2] = c; color[3] = d; } void random(){ int i=0; int temp; temp = (ra()%3)+1; switch(temp){ case 1: srand(time(NULL)); set(ra()%5); break; case 2: srand(time(NULL)); set(ra()%5,ra()%5); break; case 3: srand(time(NULL)); set(ra()%5,ra()%5,ra()%5,ra()%5); break; } }; void status(int j){ int i = 0; printf("\n%d:",j); while(i<colors){ switch(color[i]){ case 0: printf("\n\t"); direction(i,colors); printf("Vermelho"); break; case 1: printf("\n\t"); direction(i,colors); printf("Amarelo"); break; case 2: printf("\n\t"); direction(i,colors); printf("Verde"); break; case 3: printf("\n\t"); direction(i,colors); printf("Azul"); break; case 4: printf("\n\t"); direction(i,colors); printf("Branco"); break; } i++; } } }; class Table{ private: Cromo table[6][3]; public: Table(){ } }; class Book{ private: int cards; Cromo *card; int top_card; public: Book(){ } void set( int a ){ int i; top_card = 0; cards = a; card = (Cromo *)malloc(sizeof(Cromo)*a); for(i=0;i<a;i++){ card[i].random(); } buy(); buy(); buy(); } void buy(){ card[top_card++].hand = 1; } void show_hand(){ int i; while(i<cards){ if(card[i].hand == 1){ card[i].status(i); } i++; } } }; class Player{ private: Book book; public: Player(){ book.set(25); } void turn(){ printf("Mao:\n\n"); book.show_hand(); getchar(); book.buy(); } }; int main(){ srand(time(NULL)); Player p1,p2; bool turn = 0; while(1){ if(turn == 0){ p1.turn(); turn = 1; } if(turn == 1){ p2.turn(); turn = 0; } } };falous Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Julho 29, 2007 Denunciar Share Postado Julho 29, 2007 tente colocar apenas um srand(time(NULL)) em seu codigo.tipow:tire todos os srand() do seu codigo deixando apenas o do main.... isso deve funcionar a deixar mais aleatorio.abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rafael Schouery (VidaGeek) Postado Julho 29, 2007 Denunciar Share Postado Julho 29, 2007 Evite fazer rand()%n para qualquer n.Isso é pessimo, pois pega os bits menos significativos do numero.O ideal é fazer:(rand() / (RAND_MAX + 1.0))*n onde n é o primeiro valor que não entra na parada... Ou seja, (rand() / (RAND_MAX + 1.0))*15gera numeros double entre [0,15) como você precisa de inteiros basta guardar num int para dar o cast... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 balduino Postado Julho 29, 2007 Denunciar Share Postado Julho 29, 2007 eu pensava que para a função srand era necessario passar um argumento diferente do tipo null. não sera esse o problema Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Inufelipe Postado Julho 29, 2007 Autor Denunciar Share Postado Julho 29, 2007 Valeu pela ajuda!!!Quando estiver prontoeu postarei o codigocompleto paraquem quizer comferirfalous Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Inufelipe
Ola galera do script brasil forum.
Eu estou a criar um joguinho
de cartas( ou cromos ), e estou
usando o rand() e o srand(time(NULL))
para criar as cartas aleatoriamente
e seus atributos, o problema é
que não esta muito aleatorio
porque as cartas se repetem,
se alguém puder ajudar
a tornar mais aleatorio
eu agradeço.
falous
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
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.