En este capítulo veremos las dos funciones que controlan el menú principal, desde el cual elegimos las opciones de juego.
En este menú la opción activa la pondremos de color verde, y el resto de color rojo. La variable que controla que opción está activa, vimos en el capítulo anterior que se llama opcionmenu. Según el valor que tenga opcionmenu, se mostrará como activa una opción según este esquema:
opcionmenu = 1 => "Iniciar juego" opcionmenu = 2 => "Num. Jugadores" opcionmenu = 3 => "Puntos" opcionmenu = 4 => "Modo" opcionmenu = 5 => "Salir"
En la inicialización de variables asignamos opcionmenu=1, por lo que nada mas entrar en el menú principal, la opción activa será la de "Iniciar juego".
A continuación veremos que hace cada parte de esta función.
-- funcion menu
function menuprincipal()
screen:blit(0, 0, menu)
Pone en pantalla el fondo del menú principal.
if opcionmenu == 1 then screen:fontPrint(proportional15, 120, 100, "Iniciar Juego", verdoso) else screen:fontPrint(proportional15, 120, 100, "Iniciar Juego", rojo) end
Si opcionmemu es 1, entonces se pone en color verde el texto "Iniciar juego" en las coordenadas y con la fuente indicada. En caso contrario se pone el texto en color rojo. Para el resto de textos del menú ( "Num. Jugadores", "Puntos", "Modo" y "Salir" ) hacemos la misma comprobación, poniéndolo en verde si debe ser la opción activa, y en rojo si no lo es.
if opcionmenu == 2 then screen:fontPrint(proportional15, 120, 120, "Num. Jugadores", verdoso) else screen:fontPrint(proportional15, 120, 120, "Num. Jugadores", rojo) end screen:fontPrint(proportional15, 250, 120, NumJug, rojo)
A continuación del texto "Num. Jugadores" se escribe el numero de jugadores elegido, según el valor de la variable NumJug. En la inicialización de variables pusimos NumJug = 1.
if opcionmenu == 3 then screen:fontPrint(proportional15, 120, 140, "Puntos", verdoso) else screen:fontPrint(proportional15, 120, 140, "Puntos", rojo) end screen:fontPrint(proportional15, 250, 140, puntos, rojo)
A continuación del texto "Puntos" se escribe el numero de jugadores elegido, según el valor de la variable puntos. En la inicialización de variables pusimos puntos = 9.
if opcionmenu == 4 then screen:fontPrint(proportional15, 120, 160, "Modo", verdoso) else screen:fontPrint(proportional15, 120, 160, "Modo", rojo) end if nivel == 1 then screen:fontPrint(proportional15, 250, 160, "Facil", rojo) elseif nivel == 2 then screen:fontPrint(proportional15, 250, 160, "Medio", rojo) elseif nivel == 3 then screen:fontPrint(proportional15, 250, 160, "Dificil", rojo) end
La variable nivel indica el nivel de juego seleccionado, según el siguiente esquema:
nivel = 1 => "Facil" nivel = 2 = > "Medio" nivel = 3 => "Dificil"
En función del nivel elegido se pone uno u otro texto.
if opcionmenu == 5 then screen:fontPrint(proportional15, 120, 180, "Salir", verdoso) else screen:fontPrint(proportional15, 120, 180, "Salir", rojo) end screen.waitVblankStart() screen.flip()
Ponemos en la pantalla todo lo escrito hasta ahora.
botonesmenu()
Se hace una llamada a la función botonesmenu(), para comprobar si se pulsa algún botón de la PSP con intención de cambiar alguna de las opciones del menú.
screen.waitVblankStart() end
Tras finalizar la función menuprincipal(), se vuelve al bucle principal.
Como acabamos de ver, desde la función menuprincipal() se hace una llamada a la función botonesmenu(), la cual se describe a continuación.
-- funcion botones menu function botonesmenu() pad = Controls.read() if pad ~= oldPad then
Se comprueba que el botón actualmente pulsado pad no sea el mismo que se pulsó por última vez oldPad. Así se evita que el programa interprete como varias pulsaciones seguidas la pulsación prolongada de un botón.
Esta instrucción se podría traducir por : Si el botón actualmente pulsado es diferente del botón pulsado la ultima vez, entonces... Si no se cumple esta condición, se sale directamente de la función botonesmenu().
if pad:down() then opcionmenu = opcionmenu + 1 if opcionmenu == 6 then opcionmenu = 1 end end
Si se pulsa la fecha-abajo para indicar que queremos seleccionar la opción de menú siguiente, deberemos aumentar en 1 el valor de la variable opcionmenu. Si opcionmenu alcanza el valor 6, se hace que opcionmenu valga 1 para saltar de la última opción a la primera.
if pad:up() then opcionmenu = opcionmenu - 1 if opcionmenu == 0 then opcionmenu = 5 end end
De forma similar se trata la pulsación de la flecha-arriba.
if opcionmenu == 1 then if pad:cross() then como = 2 end screen.waitVblankStart() end
Si estamos situados en la primera opción “Salir” y se pulsa la X, se hace que la variable como tome el valor 2. Recuerdo que si como = 1 el bucle principal nos hará entrar en la pantalla de menú, y si como = 2 el bucle principal nos hará entrar en la pantalla de juego.
if opcionmenu == 2 then if pad:cross() then if NumJug == 2 then NumJug = 1 else NumJug = 2 end end screen.waitVblankStart() end
Si estamos situados en la segunda opción "Num. Jugadores" y se pulsa la X, si NumJug es igual a 2 se hace que NumJug sea igual a 1. Sino (cuando NumJug=1) se hace que NumJug sea igual a 2. Es decir, la pulsación de X hace alternar NumJug entre 1 y 2.
if opcionmenu == 3 then if pad:cross() then if puntos == puntosmenor then puntos = puntosmayor else puntos = puntosmenor end end screen.waitVblankStart() end
Si estamos situados en la tercera opción "Puntos" y se pulsa la X, si puntos es igual a puntosmenor se hace que puntos sea igual a puntosmayor. Sino (cuando puntos = puntosmayor) se hace que puntos sea igual a puntosmenor. Es decir, la pulsación de X hace alternar el valor puntos entre puntosmenor y puntosmayor. Recordemos que en la inicialización de variables hicimos puntosmenor = 9 y puntosmayor = 15.
if opcionmenu == 4 then if pad:cross() then nivel = nivel + 1 if nivel == 4 then nivel = 1 end if nivel == 1 then VelPelotaIni = 6 elseif nivel == 2 then VelPelotaIni = 8 elseif nivel == 3 then VelPelotaIni = 10 end end screen.waitVblankStart() end
Si estamos situados en la cuarta opción "Modo" y se pulsa la X, se aumenta el valor de nivel en 1. Si nivel llega a 4 se hace que nivel sea 1, ya que solo hay tres modos de juego. En función del valor de nivel, es decir, en función del modo de juego, se asigna a la variable VelPelotaIni un valor diferente. Recordemos que VelPelotaIni es la velocidad inicial de la pelota, cuando comienza el juego de un punto. Es decir según el modo de juego, "Facil", "Medio" o "Dificil", la velocidad inicial de la pelota será mayor o menor.
oldPad = pad
Aquí se asigna a oldPad el valor del botón que se acaba de pulsar ( pad ). Como vimos al principio de la función botonesmenu(), oldpad se utiliza para evitar problemas con la pulsación prolongada de un botón.
end
Fin de la condicional if pad ~= oldPad then
end
Fin de la función botonesmenu(). Desde aquí el programa vuelve a la función menuprincipal().
Comentarios
PROYECTO
Hola. Estoy trabajando en este juego y intento poner un selector de pista, pero solo consigo que me salga el texto en el menu, y no puedo poner el cursor encima. Ya tengo las imágenes preparadas, pero me faltan las funciones. AYUDAAAA!!!
EDITO: Ya está!! He acabado de modifixcar el juego y ya tiene selector de pista!! De momento Hierba y tierra batida.
PERFECT
Me parece muy buen tutorial y muy buena la idea de crear tutoriales respecto el cómo para programar para PSP.
Solamente creo que haria falta lo más tÃpico en manuales de programación y aclarar el tipo de funciones para una programación mejor, condicionales, bucles, el trato con boleanos, tipos de variables y su iniciación, etc.
Aunque con los ejemplos se aclara uno bastante bien.
Sin duda me parece una idea fantastica.
Sefirot Sama, The One Winged Angel
Sefirot Sama, The One Winged Angel
En el resto de tutoriales
que tenemos en tutoriales avanzados, se habla de algunos puntos que comentas. Pero respecto a detallar todas las funciones...es poco menos que imposible...me temo que ahi tendreis que tirar de Google o documentacion concreta de lo que esteis trabajando en ese momento, casi siempre (o siempre) en ingles. Un saludo, nos alegramos de que te guste la iniciativa, agradeceselo a los creadores o traductores de los tutos ;-)
¿Necesitas ayuda? Usa el buscador, arriba a la derecha de BETA. ¿No lo encuentras? Postea en el lugar adecuado por favor ;-)
Para recibir ayuda más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda revisar el Manual del perfecto forero y las Normas de la Comunidad.
Como bien dice Unicorn, en
Como bien dice Unicorn, en los otros tutoriales ya se han visto la mayoria de las funciones que utiliza este juego. Y si alguna es nueva, se explica detalladamente. Recuerdo que para seguir el presente tutorial es necesario haber leido bien los otros dos.
Este tutorial muestra que conociendo muy pocas funciones de LUA, se puede hacer un juego. Pero es imprescindible tener cierta imaginación o habilidad para poder hacer un programa, la cual se consigue en parte sabiendo buscar la información necesaria, y en parte con la práctica.
Para conocer en profundidad un lenguaje de programación ya están los libros. Estos tutoriales son para tener un primer contacto y perder el miedo.
Un saludo
Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.
Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.