Ver la versión completa : random ??
hola, tengo esto:
function randompos() {
srand( (unsigned)time( NULL ) );
xpos = rand()%10;
return xpos;
}
for (idx=0;idx<5;idx++) {
xpos = randompos();
}
no estoy muy seguro pero creo que siempre me sale el mismo numero, porque salen todos los sprites en la misma posicion.
me hace pensar si la funcion time() quizas no es una buena semilla en la gp32.
hay alguna buena semilla que no dependa del usuario, o tengo que hacer uso de algun evento aleatorio externo, como la pulsacion de una tecla por parte del usuario??
tambien podria sacar el srand() fuera de la funcion randompos(), supongo que me daria distintas posiciones, pero siempre la misma secuencia, yo creo que es problema de la semilla que estoy usando, es decir de time().
Aiken
Puck2099
05/08/2004, 19:35
Prueba con esto:
unsigned int n_tick;
n_tick = GpTickCountGet();
srand n_tick;
............
La función GpTickCountGet() te devuelve el número de milisegundos transcurridos desde que se lanzó el programa.
Saludos
sip ... tambien lo habia pensado.
tendre que usar la pantalla de presentacion, y que cada usuario tarda un tiempo distinto en darle al start como evento aleatorio????
en el Mr.Mirko creo que habia leido algo de RTC (real time clock) o quizas me estoy volviendo loco. o quizas eran un timer, yo creo que era lo segundo.
Alguien se le ocurre alguna otra fuente de semilla??
Aiken
pues contra todo pronostico .... he probado el gettickcount() y parece hasta "aleatorio".
no lo entiendo, si el codigo es exactamente el mismo que lo unico que hace es empezar la ejecucion y calcular los randoms, el numero de ticks deberia ser exactamente el mismo, la semilla la misma, y los numeros exactamente los mismos.
no se, no se, al menos en el geepee32 funciona, voy a probarlo en la gp32, y os cuento ...
Aiken
Usa GpTickCountGet();
En el emulador siempre saldran = pq el emulador siempre empieza en el mismo estado, mientras que cuando tu lo ejecutes en tu GP32 sera diferente cada vez.
lo estoy probando en la gepe, y parece seudo aleatorio .. creo que me podra mas o menos valer.
cada 3 o 4 ejecuciones sale lo mismo, pero supongo que como estoy trabajando con numeros del 1-10, es decir muy pequeños, la estadistica me puede estar causando efectos opticos.
si nadie se le ocurre nada mejor, creo que lo dejare asi con el tickcount.
estoy por guardar el numero de ticks justo cuando el usuario pulse una tecla, y usar en la siguiente partida ese numero como semilla, es algo bastante aleatorio, creo. ;)
si alguien tiene alguna sugerencia que me lo diga, es un jueguecillo muy tonto con un tablero de 10x10 en el que quiero colocar fichas aleatorias para cada partida, de ahi los numeros aleatorios del 1 al 10 que busco.
Aiken
desde que se inicia la aplicacion??? me refiero al tickcount
si fuera desde que se inicia la consola seria una semilla perfecta, pues claro la aplicacion cada vez se iniciaria en un tickcount diferente.
alguien puede confirmar cuando empiezan a contar los ticks?
Aiken
Yo diria k es desde que enciendes la consola.
Puck2099
05/08/2004, 20:20
Según el SDK Ver 2.1.0:
unsigned int GpTickCountGet(void);
This function returns system tick count in milli seconds after the program starts to run.
Saludos
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.