[Tutorial] Aprende a programar en PS3 fácilmente (Parte 1ª)
Hola a tod@s. Hoy voy a explicar que son las “variables” y las “tablas” en Lua y después utilizaremos lo aprendido para crear un pequeño programa de prueba, para que así veamos como se maneja el LuaPlayer. Para saber de que hablamos necesitamos los conocimientos de la Parte Inicial.
Empezaremos por variables, que es algo sencillo. Las variables son espacios de memoria en los que se guardan datos, como números o caracteres, que a las que se le asignan una etiqueta. Como su nombre indica, pueden variar según transcurra el programa redefiniéndolas otra vez. Las variables pueden ser globales, es decir, que se pueden utilizar en toda la estructura del programa, o locales, que solo se pueden utilizar en una determinada zona. Vamos a ver unos ejemplos:
Ejemplos de estructuración de las variable:
-- Estructuracion de variable global ... Inicio del programa (Más variables) ... variable = datos ... Resto del programa ... ---------------------------------------------------------- -- Estructura de variables locales --1. Funciones ... Inicio del programa (Variables Globales) ... function Una_funcion() local variable = datos ... Resto de la función ... end ... Resto del programa ... --2. Bucles ... Inicio del programa (Variables Globales) ... for n = 1, 10 do local variable = datos ... Resto del bucle ... end ... Resto del programa ... ---------------------------------------------------------- -- Uso de variables para mostrar en pantalla ... Inicio del programa (Más variables) ... variable = "Hola a todo el mundo!" ... Parte del programa ... DrawText(10, 10, string.format("%s", variable)) ... Resto del programa ... ---------------------------------------------------------- -- Uso de una variable vacia variable = nil -- Se puede utilizar para borrar variables ya definidas
Como veis es fácil. Antes visteis como se utilizan, pero lo voy a explicar, ya que no es igual para todas las variables. A diferencia de los demás LuaPlayer, el LuaPlayer para PS3 aún no trata automáticamente el tipo de dato de las variables al imprimirlas como texto, con lo que al mostrarlas en pantalla tenemos que definir el tipo de dato con la función string.format(). Los que sepan de C/C++ sabrán esto de sobra, pero los demás no. Como habréis observado, para mostrarlo seria:
DrawText( x, y, string.format("%i", variable))
Aquí pongo los tipos de datos que tienen que ir en % (Esta cogido de aquí):
i Se utiliza para la salida de valores de variables enteros.
u Lo mostrará como un entero con signo.
o Entero octal sin el cero inicial.
x Para los hexadecimales pero sin mostrar el 0x.
c Se usa para caracteres
s Se interpretará como una cadena de caracteres.
g El dato se muestra como un numero de coma flotante, con o sin exponente según convenga. Cabe destacar que no se mostrarán ni ceros no significativos ni el punto si no es necesario.
f Valor de coma flotante sin exponente.
e Se muestra como un número de coma flotante con exponente.
Pues las tablas son como una variable que engloba a otras. Una tabla puede contener variables o hasta otras tablas. También puede contener otras dimensiones, también llamados arrays.
No se si pueden ser locales o globales, pero siempre se utilizan globalmente. Unos ejemplos:
Ejemplos de estructuración de las tablas:
-- Estructuracion de una tabla vacia ... Inicio del programa (Variables Globales) ... tabla = {} -- Esto se utiliza para insertar otras tablas o indexar datos ... Resto del programa ... ---------------------------------------------------------- -- Estructura de una tabla con variables no indenxadas ... Inicio del programa (Variables Globales) ... tabla = {hola = "Hola a todos, bienvenidos.", numero = 50, texto = "10", archivo = "C:/Datos/Carpetas/SubCarpetas/archivo.txt"} -- en donde pone texto, lo que se le asinga el el texto 10, no el numero, ya que si intentais modificarlo como numero os va a dar error ... Parte del programa ... -- Uso de las variables DrawText(100, 10, string.format("%s", tabla.hola)) DrawText(100, 20, string.format("%i", tabla.numero)) DrawText(100, 30, string.format("%x" tabla.numero)) ... Resto del programa ... ---------------------------------------------------------- -- Estructura de una tabla con variables indenxadas ... Inicio del programa (Variables Globales) ... tabla = {} tabla[1] = "texto1" tabla[2] = 10000 tabla[3] = "mucha cosas" ... Parte del programa ... -- Uso de las variables DrawText(100, 10, string.format("%s", tabla[1])) DrawText(100, 20, string.format("%i", tabla [2])) DrawText(100, 30, string.format("%x" tabla[2])) ... Resto del programa ... ---------------------------------------------------------- -- Estructura de un array de dos dimensiones con variables no indenxadas e indenxadas ... Inicio del programa (Variables Globales) ... tabla = {}, { hola = "Hola a todos, bienvenidos.", numero = 50, texto = "10"} tabla[1][1] = "texto1" tabla[1][2] = 10000 tabla[1][3]= "mucha cosas" ... Parte del programa ... -- Uso de las variables DrawText(100, 10, string.format("%s", tabla[2].hola)) DrawText(100, 20, string.format("%i", tabla[2].numero)) DrawText(100, 30, string.format("%x" tabla[2].numero)) DrawText(100, 40, string.format("%s", tabla[1][1])) ... Resto del programa ...
Si ya lo habéis entendido, vamos ha hacer un pequeño programilla para entenderlo y practicarlo. Lo que vamos a hacer es poner un texto de saludo en una variable y varios datos en una tabla para despues mostrar todo en pantalla. Abrir un editor de texto plano y intentar escribir lo que pone aquí, no lo copies, ya que así no lo entenderéis mucho. He puesto comentarios, pero os lo explico luego:
InitGFX(720, 480) -- Con esto iniciamos la pantalla en 540p initPads(7) -- Con esto leeremos las pulsaciones de los mandos de PS3, que el máximo es 7. -- Variables y tablas hola = "Bienvenido a [Tutorial] Aprende a programar en PS3 facilmente (Parte 1a) Ejemplo Practico" datos = {} datos[1] = "Hola a todos" datos[2] = "Has conseguido una pocion" datos[3] = 10 datos[4] = 3.14159 datos[5] = "10000" -- Iniciamos un bucle infinito while true do beginGFX() -- Iniciamos las funciones de la pantalla x = 120 DrawText(5, 10, string.format("%s", hola)) -- Imprimimos el mensaje de bienvenida DrawText(100, 100, 'Datos de la tabla "Datos":') -- Ponemos un Bucle for para mostrar los primeros textos for n = 1, 2 do DrawText(110, x, string.format('Dato %i: "%s"', n, datos[n])) x = x + 20 end -- Mostramos el primer numero DrawText(110, x, string.format('Dato 3: "%i"', datos[3])) x = x + 20 -- Mostramos el segundo numero en decimal y el hexadecimal DrawText(110, x, string.format('Dato 4 "f": "%f"', datos[4])) x = x + 20 DrawText(110, x, string.format('Dato 4 "x": "%x"', datos[4])) x = x + 20 -- Mostramos el texto ultimo DrawText(110, x, string.format('Dato 5:"%s"', datos[5])) -- Si pulsamos start o enter si estamos en emulador, saldremos del programa if start(0) >= 1 then break end endGFX() -- Finalizamos las funciones de la pantalla end
Creo que es bastante fácil, solo explicar esto:
Si os ha salido perfecto a la primera, probar y editar el código y modificarlo, y si os da error saber que podréis entrar aquí una y otra vez para ver donde os equivocais. Ser libres y incluso haceros muchos mas miniprogramitas.
Esto ha sido todo por hoy y os espero en la próxima, saludos.
Archivo listo para probar: Ejemplo1.zip
NekeOS, el nuevo shell para PSP
PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.
Sony Xperia Z1 Compact con Android 5.1.1
Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).