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
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
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
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
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
¿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.
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
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
Que bien
Que ya lo solucionaste, y si ya lo terminaste, no dudes en darlo a conocer XD.
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
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
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
Cierto
Cierto
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
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
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?
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