Ver la versión completa : Números aleatorios con el Official SDK
Lizardos
11/11/2004, 23:45
Hola a todos:
¿Alguien sabe como funcionan los números aleatorios en el sdk? Siempre me devuelve la misma seed. Si me podeis explicar bien como funcionan estas 3 funciones os lo agradeceré:
void GpSrand(int seed);
unsigned int GpRand(void);
unsigned int GpRandN(unsigned n);
Saludos, Lizardos.
Pasa de las funciones del SDK oficial:
#include <math.h>
#include <time.h>
.................................
srand(clock());//inicializas la semilla dependiendo del tiempo
.................................
num_aleatorio=(rand()%4)+1;//p.e. números aleatorios entre 1 y 4
Espero que te sea de ayuda....un saludo por la mañana temprano :o
Lizardos
12/11/2004, 11:52
Cagüen el ansi... time() siempre devuelve la misma seed.
He leido por ahí que también se usa GpTickCountGet() de seed, pero a mí me genera tan solo dos seed distintas.
A ver si alguien puede decirme la forma de quitar esta ñapa, que es lo único que se me ha ocurrido:
.
.
.
gp_text("Pulsa START para iniciar el random");
while(!(GpKeyGet()& GPC_VK_START));
GpSrand(GpTickCountGet());
Saludos y gracias, Lizardos.
Las funciones del SDK oficial funcionan correctamente.
Con GpSrand(semilla) indicas la semilla inicial. Lo mejor es utilizar GpTickCountGet(), pero no lo tienes que hacer al iniciar el juego, sino después de que el usuario haya apretado algun botón, sinó siempre te devolverá el mismo Tick.
Yo lo suelo hacer a la que el jugador pulsa Start para empezar la partida.
Es similar a tu ñapa, pero sin ser una ñapa ya que no pido nada al jugador.
GpRandN(numero) devuelve un número entre 0 y numero - 1.
No utilizo GpRand()
Solo una pregunta, los estás probando con el VC? o en la GP32?
Resulta que esas funciones para VC no funcionan. Si es el caso, ya te diré como lo he solucionado ya que yo programo con VC.
Oankali
Lizardos
12/11/2004, 12:13
Escrito originalmente por oankali
No sé porque no te funciona el código que indicas, tendría que hacerlo. Solo una pregunta, los estás probando con el VC? o en la GP32?
Resulta que esas funciones para VC no funcionan. Si es el caso, ya te diré como lo he solucionado ya que yo programo con VC.
Oankali
No, si ese codigo sí me funciona y genera buenas seeds. Lo que quería era quitar el truquito del start, a ver si había otra cosa aparte del GpTickCountGet (algún puntero, interrupción o truquito raro por ahí).
Saludos y gracias, Lizardos.
La explicación al problema está en que GpTickCountGet() devuelve los ticks desde que ha empezado el programa. Como siempre tarda lo mismo en empezar, pues siempre tienes pillaras la misma hora en el reloj interno, por lo que la semilla será siempre la misma si lo haces de forma automática al principio del juego.
Por esto tienes que esperar a que el usuario haya interactuado al menos una vez con el juego antes de usar GpTickCountGet() o similar.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.