Anuncios Google

Funcion math.random(6), siempre me sale 1 (LUA) [ENTRAD PORFAVOR PROGRAMADORES]

Pues eso estoy haciendo un parchis, ya tengo todos los graficos diseñados (tienen buena pinta) pero he empezado a programar y para hacer el dado necesito la funcion math.random(6) y nose porque siempre me devuelve 1 de 6 posibilidades. Os pego aqui un script aparte que he creado a ver si encontraba el fallo:

rojo = Color.new(255,0,0)

function dado() -- DEFINO LA FUNCION DADO()

aleatorio = math.random(3)

if aleatorio == 1 then
    screen:print(0,0,"numero 1",rojo)
    screen.flip()
elseif aleatorio == 2 then
    screen:print(0,0,"numero 2",rojo)
    screen.flip()
elseif aleatorio == 3 then
    screen:print(0,0,"numero 3",rojo)
    screen.flip()
end
end

dado() -- EJECUTO LA FUNCION DADO() DEFINIDA ANTERIORMENTE

while true do
screen.waitVblankStart()
end

¿Que hago mal?

Salu2 al mundo de la scene y su comunidad


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de pipagerardo

Tuto LUA

Ver apartado de: "Funciones Matemáticas"

http://pipagerardo.fortunecity.es/Tutorial_LUA_PSP_pipagerardo.html


number math.random( [m [, n] ] )

Esta función es un interface a rand, generador simple de números pseudo-aleatorios proporcionado por el ANSI C. (Sin garantías de sus propiedades estadísticas.) Cuando se invoca sin argumentos devuelve un número pseudoaleatorio real uniforme en el rango [0,1]. Cuando se invoca con un número entero m mayor o igual que 1, math.random devuelve un número pseudoaleatorio entero en el rango [1, m] con igual probabilidad para cada entero entre 1 y m. Cuando se invoca con dos argumentos m y n enteros, math.random devuelve un número pseudoaleatorio entero en el rango [m, n] (siempre que m < n ) con igual probabilidad para cada entero en el rango dado. Si se utilizan números no enteros los resultados no son equiprobables puesto que m y n se convierten a enteros usando lua_tointeger, que trunca de una manera no especificada.


nil math.randomseed( number )

Establece x como "semilla" para el generador de números pseudoaleatorios: iguales semillas producen iguales secuencias de números.

math.randomseed(os.time())

aleatorio = math.random( num_min , num_max )

 

Perdonad por hacer triple

Perdonad por hacer triple mensaje pero sabeis algo sobre el tema??

salu2 y gracias

Imagen de Guillermo_Cornielle

Pues

Si se algo, peor aber, que es lo que quieres arreglar, ya que no veo tanto problema con lo que tienes.

Te explico:

Mira imaginate que estas jugando al parchis y vas a tirar el dado, pues lo que pasa esque ya sabes que numero te va a tocar (el 5) entonces no tiene mucha gracia, y si vas memorizando los numeros pues para la proxima que jueges ya te los sabes, entonces...

¿Sabes porque puede ser? El homebrew lo estoy ejecutando desde la psp con el eboot de ejemplo. ¿Tendré que utilizar LUA Player para PSP?

Un saludo

Imagen de Guillermo_Cornielle

Ok

No creo que por que cambies de eboot el resultado valla a cambiar, pero has lo siguiente.

En la variable aleatorio en esta parte:

aleatorio = math.random(6, en ves de poner solo 6 en el parentesisi, pon aleatorio = math.random(1,6) o (1,10).

Y despues lanzalo y ve si se ha arreglado en algo.

PD: Todo se toma su tiempo, si ya lo creaste aunque tenga ese problema no importa, eos se puede corregir en proximas vesiones.

Saludos 


Manual del Perfecto Votante Para un voto libre y justo!.

TheGCProjects

Tampoco funciona..

Si te refieres a aleatorio = math.random(1,6) tampoco funciona ya lo he provado.

De todas formas soy tan pesao con esto porque estoy de vacaciones y no tengo aqui los graficos del juego, pero aun me queda todo el codigo por hacer.

Esque no me quiero poner a fondo a escribir el codigo porque si luego la funcion math.random() no tienen solucion... seria una...

Salu2

Imagen de Guillermo_Cornielle

Pues

Tan bien puedes poner  (1,10) o (1,12) usa tu imaginacion, de alguna forma se resuelve.

Continuare con el codigo..

Continuare con el codigo.. A ver si mientras aparece alguien que sepa de donde puede venir

Salu2

Imagen de ZYX3D

¿Por qué no la inicializas?

Quiero decir, por qué no usas Math.randomseed(aquíUnaSemillaNumérica) para inicializar el motor de números aleatorios. La hora actual suele ir bien, es lo que más se usa (o los segundos actuales más los N decimales de Pi, cosas así).

Es que, a ver, tal y como lo cuentas a mí no me parece que sea un bug, sino una feature, por lo que sé de cómo se generan los números aleatorios en Lua (no se generan, simplemente se coge el valor N de una u otra serie indicada por randomseed). O sea, no es que funcione mal, sino todo lo contrario, funciona exactamente como debe hacerlo...

Lo mismo te pasaba, por ejemplo, con el VBA si no hacías randomize(), etc. Misma serie de números aleatorios, mismos números en el mismo orden...


Strength is irrelevant. Resistance is future. We wish to improve ourselves.

La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.

Imagen de rubenelportero

puedes poner otra cosa

math.ramdom(1,12)

y poner que si sale 1 o 2 es como si el dado a tirado un uno

etc

¿me entiendes?

salu2

Joer creia que ya estaba

Joer creia que ya estaba esa parte terminada y no, nose si es porque lua no funciona bien pero lo pruevo en la psp y el primer valor simpre el 5 despues 3 veces 4 luego un 3....

Esto si que no lo entiendo...

No os preocupeis que si termino el parchis lo sabreis al minuto jeje pero aun me queda mucho por programar y aprender aunque si os interesa a lo mejor hago otro homebrew que tiras un dado y sale un numero como uno que hay ya

Siiiiii SOIS LOS MEJORES!!!

Ya por fin funciona me ha costao un poco encajar los end y los screen.flip() pero al final lo he conseguido, tambien he aumentado un poco el codigo para que salgan 6 posibles numeros (como un dado normal) aki esta el resultado:

rojo = Color.new(255,0,0)

function dado() -- DEFINO LA FUNCION DADO()

aleatorio = math.random(6)

if aleatorio == 1 then
    screen:print(0,0,"Ha salido el numero 1",rojo)
    screen.flip()
elseif aleatorio == 2 then
    screen:print(0,0,"Ha salido el numero 2",rojo)
    screen.flip()
elseif aleatorio == 3 then
    screen:print(0,0,"Ha salido el numero 3",rojo)
    screen.flip()
elseif aleatorio == 4 then
    screen:print(0,0,"Ha salido el numero 4",rojo)
    screen.flip()
elseif aleatorio == 5 then
    screen:print(0,0,"Ha salido el numero 5",rojo)
    screen.flip()
elseif aleatorio == 6 then
    screen:print(0,0,"Ha salido el numero 6",rojo)
    screen.flip()
end
end

oldpad = Controls.read()

while true do
screen:clear()
pad = Controls.read()
if pad:cross() and oldpad:cross() ~= pad:cross() then
dado()
end

screen.waitVblankStart()
oldpad = pad
end

 Salu2 y mil gracias

Imagen de CkFra

Ahora

te queda hacerte el dado en 3D y sea como en la vida real :P jajaja

Oye pues si lo haces, no te lo quedes eh? Dínoslo :P 

Si quieres manejar la posibilidad del 3D, habla con pipagerardo, que es un máquina :P

Saludos 

Imagen de Guillermo_Cornielle

Que bien

Que ya lo solucionaste, y si ya lo terminaste, no dudes en darlo a conocer XD.

Imagen de Guillermo_Cornielle

Pues como

Ya te habian dicho, es mejro que lo pongas de esta forma.

function dado()

aleatorio = math.random(1,6)

......

while true do

...

end

y asi habra mas posibilidades de que salga otro numero, claro, habra que mejorarla en futuras versiones. XXD.

Suerte. 


Manual del Perfecto Votante Para un voto libre y justo!.

TheGCProjects

Como se utiliza el

Como se utiliza el oldpad()?? donde lo pongo?? El codigo bueno es el siguiente (aki si que se ejecuta dado() dentro de un bucle) 

rojo = Color.new(255,0,0)

function dado() -- DEFINO LA FUNCION DADO()

aleatorio = math.random(3)

if aleatorio == 1 then
    screen:print(0,0,"numero 1",rojo)
    screen.flip()
elseif aleatorio == 2 then
    screen:print(0,0,"numero 2",rojo)
    screen.flip()
elseif aleatorio == 3 then
    screen:print(0,0,"numero 3",rojo)
    screen.flip()
end
end

while true do
screen:clear()
pad = Controls.read()
if pad:cross() then
dado() -- EJECUTO LA FUNCION DADO() DEFINIDA ANTERIORMENTE
end
end

while true do
screen.waitVblankStart()
end

Imagen de P22

Segun veo los tres estamos

Segun veo los tres estamos conectados.

Bueno , te explico.

--fuera del bucle

oldpad = Controls.read()

...

while true do

screen:clear()

pad = Controls.read()

... if PAD:CROSS() AND OLDPAD:CROSS() ~= PAD:CROSS() --todo esto sin mayus , lo he puesto para llamar la atencion.-- then

...

end

...

screen.waitVblankStart()

screen.flip()

OLDPAD = PAD

end

Saludos


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de CkFra

Lo mejor

es que no pongas mayúsculas, porque lía bastante :P  Y ya sabemos lo puñetero que son las mayúsculas en la programación jeje

Imagen de P22

Cierto

Cierto

Imagen de CkFra

No sé

si lo has solucionado, pero según lo pones aquí, la función dado() no te puede funcionar estando donde está, tendrás que meterla dentro del bucle no?

Saludos

Imagen de P22

Hola . Ese error es de lo

Hola . Ese error es de lo mas sencillo de solucionar:

oldpad

Saludos

Si no sabes como se hae avisame y te auudo

Casi solucionado...

Bien pues lo del numero aleatorio ya me funciona, he programado para que cuando pulses la X salga un numero aleatorio y SI FUNCIONA pero hay un nuevo problemilla con solucion (supongo), me explico:

Al pulsar la X aparece un numero en pantalla (del 1 al 3 y al azar) pero si dejo un pelin pulsada la X (de 1 a 2 segs) aparecen numeros (al azar) continuamente hasta que suelto el boton, esto creo que es debido a que el codigo se ejecuta continuamente. Lo que quiero conseguir es que una vez hayas pulsado X ya no vuelva a salir otro numero hasta que "despulses" y vuelvas a pulsar para sacar otro. Nose si me entendeis...

Salu2 espero que me ayudeis

Imagen de P22

a lo mejor es por ser el d

a lo mejor es por ser el d ewindows lo has probado en el de la PSP?

Imagen de P22

Para la math.random tienes

Para la math.random tienes que poner esto

variable = math.random(1,6)

asi sera un numero ENTRE 1 y 6

Saludos y espero serte de ayuda


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Asi tampoco funciona tio...

Da igual si pongo math.random(1,6) que si pongo math.random(6) siempre me devuelve el valor 1, pruevalo con LUA Player for Windows a ver si esque tengo algo mal yo, pero prueva ese codigo (el mio del mensaje anterior)

Gracias por tu ayuda

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.