Buen día a todos
Estoy iniciandome en la programacion en LUA para mi psp y empece un proyecto de un programita que realice tiradas de dados. (Hago destacar que he visto y provado con exito los dos homebrew que existen en la Scene, pero siento que pueden dar mas de si mismos)
Lo lamentable es que tuve que iniciar de cero ya que no pude encontrar el codigo fuente de ninguno y estoy atorado en lo siguiente:
No puedo hacer que la tirada permanesca en pantalla, presiono "x" que en mi caso es la que designe para ejecutar la tirada, y muestra los resultados, pero unicamente mientras mantengo "x" presionado, ademas tambien rotan los numeros continuamente mientras mantengo la "x"
¿Que puedo hacer?
les coloco lo que llevo de mi codigo y ojala alguien pueda ayudarme
verde = Color.new(0,255,0)
rojo = Color.new(255,0,0)
turquesa = Color.new(0,255,255)
blanco = Color.new(255,255,255)
Tdados = {}
Ndados = {1,2,3,4,5,6,7,8,9,10}
Tdados[1] = 2
Tdados[2] = 4
Tdados[3] = 6
Tdados[4] = 8
Tdados[5] = 10
Tdados[6] = 12
Tdados[7] = 20
x=1
y=1
Texto1 = "Arriba y Abajo Selecciona el tipo de dados a lanzar: "
Texto2 = "Derecha e Izquierda Selecciona el # de dados a lanzar: "
oldpad = Controls.read()
Resultados = {}
-- Funcion que elija el tipo y numero de dados a utilizar
function SeleccionDados()
if pad:right() and oldpad:right() ~= pad:right() and y < 10 then
y = y+1
end
if pad:left() and oldpad:left() ~= pad:left() and y > 1 then
y = y-1
end
if pad:up() and oldpad:up() ~= pad:up() and x > 1 then
x = x-1
end
if pad:down() and oldpad:down() ~= pad:down() and x < 7 then
x = x+1
end
screen:print(0,100,Texto1 .. Tdados[x],verde)
screen:print(0,150,Texto2 .. Ndados[y],turquesa)
end
-- Funcion que ejecute la tirada de dados
function lanzarDados()
if pad:cross() then
screen:clear()
math.randomseed(os.time())
z = 15
for a = 1,y do
Resultados[a] = math.random(1,Tdados[x])
z = z + 15
screen:print(100,z,Resultados[a],blanco)
end
end
end
while true do
screen:clear()
pad = Controls.read()
SeleccionDados()
lanzarDados()
screen.waitVblankStart()
screen.flip()
oldpad = pad
end
eso te ocurre porque
cuando dices pulso X es mientras lo mantengas pulsado, con lo cual te recomiendo usar un booleano, mira:
Compruebalo ahora.
Gracias, pero falto un poquito
El codigo que me diste funciona, si genera la tirada y la mantiene en pantalla, sin embargo se queda realizando tiradas y no se detiene, cambia muy rapidamente por lo que se dificulta ver los resultados.
Te agraadesco la ayuda, voy a pensar un poco haber si logro resolverlo, por que tambien me falta encontrar la forma de una vez realizada la tirada, volver al menu anterior y seleccionar nuevamente los dados
Muchas Gracias
Pues facil,
Es cuestion de jugar con las variables y los ifs.
Algo fallo...
Adicione el ultimo cambio al codigo y marca un error al ejecutarlo en la linea 53 (considerando que no existan espacios entre las lineas)
el error dice: 53: bad argument #2 to 'print' (string expected, got nil)
que me imagino dice que algun valor de los que se quieren imprimir en pantalla es nulo o esta vacio, pero la verdad no se cual, porque o que onda.
pues dime cual es,
y te dire porque falla, si falla es porque algo falta, dime el codigo de esa linea.
el codigo
53 screen:print(100,z,Resultados[a],blanco)
eso es todo lo que hay en la linea (53 es la referencia a la linea)
EDITO
Ya lo resolvi XD
Use tu sugerencia, pero analisando la estructura al fin me di cuenta de que pasaba.
Si intento imprimir fuera del comando for, es imposible por que no hay nada que haga que el numero cambie y considerara al valor nulo, ya que se intenta imprimir una tabla usando un valor unico, para el caso "a"
Ahora bien, al frenar la pantalla siempre brincaba el comando, por una sencilla razon, "EL TIEMPO NO SE DETIENE" al definir math.randomseed(os.time()) en cada vuelta del bucle la sentencia siempre es verdadera, por lo tanto el tiempo cambia y los valores con el, cada segundo
Antonces lo repare nombrando una variable para el tiempo en mi caso d=os.time(), por lo que solo cada que presione "x" este valor cambiara y entonces math.randomseed(d) tambien.
Magia
Te agradesco mucho en verdad, sin la replica de opciones y el pequeño debate, no habria conseguido llegar a la solucion, adjunto el codigo para que se vea el resultado final, y por si a alguien le sirve.
Sigo aceptando sugerencias y seguire haciendo preguntas, aun me falta bastante para acabarlo.
Hasta luego
Perdon por no haber estado
como veo, lo has resuelto, muy bien.
Un Saludo