[Semimegapost] LUA. |
![]() « Citoyen » 1423585680000
| 0 | ||
Bienvenidos al megapost de LUA. Acá se te explicará desde el principio al final. (El tema incluye una versión actualizada del ex-tema "Cosas básicas de LUA") Good, empecemos. Si aún no sabes que es LUA, no debes empezar, por el momento, a programar. Si nos vamos por el lado de Transformice, es un lenguaje de programación incluido en Transformice donde puedes crear minijuegos. Claro, varios códigos están restringidos solo para el uso de personas del LUA Team, esto para evitar abusos. LUA Team: Persona del equipo de módulos de Transformice que puede cargar scripts en salas iniciadas con # y puede utilizar todos los códigos que Transformice tiene para LUA. ¿Suena sencillo no? Entremos en materia. Hinakagiyama a dit : Las tablas las puedes manipular de muchas formas. Existen algunas funciones especificas que te ayudan a modificar/imprimir los contenidos de estas. table.insert(tabla, [posicion,] dato) Agrega un dato a una tabla. Ejemplo 1: Agregando un dato en una posición especificada en una tabla. nombres = {"Thetroz", "Eliaseeg"} table.insert(nombres, 2, "Hinakagiyama") print(table.concat(nombres, ", ")) Como lo notaste, agregamos el nombre "Hinakagiyama" en la posición 2 de la tabla "nombres" y al final llamamos la función "print" junto con table.concat que imprimió todos los datos de la tabla. Resultado: ##Thetroz, Hinakagiyama, Eliaseeg Ejemplo 2: Agregando un dato sin especificar la posición. nombres = {"Thetroz", "Eliaseeg"} table.insert(nombres, "Hinakagiyama") print(table.concat(nombres, ", ")) Esto nos da resultado: ##Thetroz, Eliaseeg, Hinakagiyama table.remove(tabla [,posicion]) Elimina un dato de una tabla. Para esto debes tener mucho cuidado, ya que un pequeño error podría costarte toda la tabla! Ejemplo 1: Elimina un dato de una tabla sin especificar posición. nombres = {"Thetroz", "Eliaseeg", "Hinakagiyama"} table.remove(nombres) print(table.concat(nombres, ", ")) Tenemos la tabla común, con tres datos. En la segunda línea has eliminado un dato ¿pero cuál si no especifiqué posición?. Pues, al no espeficiar este importante campo eliminas el último dato, dándonos el print como resultado: ##Thetroz, Eliaseeg Ejemplo 2: Elimina un dato de una tabla especificando su posición. nombres = {"Thetroz", "Eliaseeg", "Hinakagiyama"} table.remove(nombres, 2) print(table.concat(nombres, ", ")) Pon mucha atención. Eliminaste un tal número "2" ¿Pero cuál?. Mira todo de esta forma: nombres[1] = Thetroz nombres[2] = Eliaseeg nombres[3] = Hinakagiyama. ¿Ya viste cuál borraste? Por supuesto, "Eliaseeg". El resultado nos da: ##Thetroz, Hinakagiyama table.concat(tabla [,separador]) Imprime todos los datos de una tabla. Ejemplo 1: Imprimir todos los datos de una tabla sin separador. numeros = {1,2,3,4,5,6,7,8,9} print(table.concat(numeros)) Con esto imprimimos todos los números, pero al no haber especificado un separador, el resultado será: ##123456789 Ejemplo 1: Imprimir todos los datos de una tabla con separador. numeros = {1,2,3,4,5,6,7,8,9} print(table.concat(numeros, ", ")) Al especificar un separador, en este caso una coma con un espacio, el resultado será: ##1, 2, 3, 4, 5, 6, 7, 8, 9 Cosas importantes que deberías de aprender 1. Podemos crear tablas de texto. Es simple. Si deseas que una tabla contenga un texto ya que está en el script y no se añada durante el script, puedes crear una tabla con comillas y entre dos, el texto. ejemplo = {"Hola mundo"} 2. Podemos definir un nombre a una tabla que se encuentra dentro de otra. Por ejemplo: ejemplo = {frase1 = "Existe un tema de LUA y un tutorial también.", frase2 = "Thetroz es genial"} (Importante: Debes separar cada tabla con una coma (,)) ¿Y que puedes hacer con esto? Es una forma más "ordenada" de llamar a una tabla, entonces puedes llamarla por su nombre y no por un número. print(ejemplo.frase1) El resultado será el texto que está en esa tabla. ##Existe un tema de LUA y un tutorial también. 3. Llamar el contenido de una tabla mediante un número. Si no quieres poner nombre, pero después lo llamarás con un print y no sabes que poner, no te preocupes por que existe una forma dos, y es llamar con un número. ejemplo = {"Desconectar", "Conectar", "Registro"} Cada contenido posee un número, este número lo puedes contar en orden desde 1. Bueno, para que se entiendas mejor mira los ejemplos: print(ejemplo[1]) ##Desconectar print(ejemplo[2]) ##Conectar print(ejemplo[3]) ##Registro 4. Otras maneras de manejar tablas. Quizá no quieras amontonar varias tablas en una, y eso tiene solución. Puedes repetir el nombre de la tabla pero debe ser númerada, o con un nombre. ejemplo[1] = "Desconectar" ejemplo[2] = "Conectar" ejemplo[3] = "Registro" Corrección: Si utilizas ese script solo te dará un error: index expected, got nil y sucede por que no hemos especificado, por llamarlo así la "raíz". ejemplo = {} ejemplo[1] = "Desconectar" ejemplo[2] = "Conectar" ejemplo[3] = "Registro" ¡Ahora sí funcionará! Además puedes poner nombre a esa tabla de esa forma. ejemplo = {} ejemplo["instruccion"] = "Desconectar" Que también lo puedes usar: ejemplo = {} ejemplo.instruccion = "Desconectar" Y se llama tal cual: print(ejemplo.instruccion) print("Gracias a Hinakagiyama por algunas aclaraciones y ejemplos de como se manejan tablas") system.exit() Las funciones son partes de códigos que se pueden llamar en cualquier momento y lugar. Su estructura se basa en function elnombre (parametro) Para poner un ejemplo de una función: function datos() print("Thetroz: 1 queso, 59 first") end Es importante colocar un "end" al final de cada función, esto hace que la función termine ahí y no se revuelva con otros códigos. Ahora tenemos una función corriente, para llamarla basta colocar el nombre de la función donde quieras que este código se ejecute. (El nombre de la función puede ser cualquiera que vos quieras) datos() Y esto ejecutará lo que hay dentro de la función, en este caso es el print. Entonces la respuesta a donde se ejecute será ##Thetroz: 1 queso, 59 first Podemos definir un parámetro, que lo podemos aprovechar en la función, por ejemplo: function mapanombre(nombre) tfm.exec.setUIMapName(nombre) end Esto lo podemos llamar: mapanombre("Mapa 0\n") Y así, el nombre del mapa será "Mapa 0" Para dejar acá como nota, la documentación de LUA de Tigrounette tiene varias funciones que sirven para diferentes cosas, míralo acá: <a href='http://atelier801.com/topic?f=6&t=526201&p=1#m1:'>Documentación</a> El maestro egg a dit : system.exit() Símbolo Descripción + Adicionar - Restar - Negación * Multiplicar / Dividir ^ Potencia Podrás ver que el símbolo "-" puede ser usado en diferentes cosas, tanto como una resta, o como negación. Para no profundizar mucho en esto, por que creo que todos saben como funcionan estos símbolos. print(1+8) ##9 print(1*8) ##8 Y así. Esto sirve mucho más que todo cuando se utiliza coordenadas y cosas de ese tipo. Existen funciones matématicas de LUA, aunque no me gustaría explicar tanto, ya que, existimos muchos que no entendemos algunas y además no quiero que se les enrede. Cuando crean que ya es el tiempo de adelantarse un poco más de "nivel" en el LUA, puedes tratar de aprendértelas. Todas se encuentran en la documentación de LUA 5.1. Para verlas, puedes entrar acá, a partir de esa función empieza. system.exit() Esto hace que todo lo que esté donde de éste se ejecute muchas veces, esas veces tu las defines. BUCLE FOR - FORMA 1 En este tipo de forma, la estructura es así for variable=comienzo,termino,salto do --Lo que ejecutarás end En esto, comienza desde el número del comienzo, hasta el número final, y si quieres puedes hacer o no saltos de números. Para poner un ejemplo sencillo con salto: for i=1,3, 0.5 do print(i) end ##1 ##1.5 ##2 ##2.5 ##3 Como vieron, irá contando desde 1 a 3 de 0.5 en 0.5 También podemos contar para atrás, utilizando el símbolo de negación. for i=3,1, -0.5 do print(i) end Esto imprimirá del número 3 al número 1 restando cada vez 0.5. Ahora, si no especificamos un número de salto, irá como entero. for i=1,2 do print(i) end ##1 ##2 ##3 BUCLE FOR - FORMA 2 Gracias a la función pairs(tabla) que fue agregada en la documentación 5.1 podemos hacer otra forma de bucle. 5.1 a dit : Por lo tanto la estructura de esta forma sería for variable,estimando in pairs(tabla) do --Lo que ejecutarás end Hagamos un ejemplo, para ver si entiendes mejor. Tenemos una tabla tab = {"Tablas", "Funciones", "Matemáticas"} y queremos imprimir todo lo que hay en ella, pero desafortunadamente, debes imprimir una por una con un número entre corchetes. Eso es aburrido. Gracias a esta forma podemos imprimir todas: for q,e in pairs(tab) do print(e) end Y esto imprimirá el contenido de la tabla "tab". BUCLE WHILE Este bucle se termina de ejecutar hasta que la condición termine. Su estructura es while condicion do --Lo que se hará end Podemos crear una tabla con números. num = 1 Y poner un while, que no se detenga hasta el esa tabla llegue al número 5 while num <= 5 do print(num) num = num + 1 end BUCLE REPEAT Repeat = repetir Until = hasta La estructura es: repeat --lo que se ejecutará until condicion Si entendiste el bucle while, entenderás este ya que es prácticamente lo mismo. Utilizando el mismo ejemplo del bucle anterior, creamos una tabla con números. num = 1 Y poner el repeat repeat print(num) num = num + 1 until num > 5 Se seguirá repitiendo todo hasta que llegue al número 5. system.exit() |
![]() « Citoyen » 1423585680000
| 0 | ||
Post reservado* |
![]() « Citoyen » 1423598220000
| 0 | ||
Hacía falta un post así para los principiantes. Muy buen hilo. |
![]() ![]() « Citoyen » 1423852320000
| 0 | ||
Algo que me gustaría decir es que para romper un bucle también se puede utilizar "break". Lo que hace el break es detener cualquier loop de todos los bucles, por ejemplo en el while sería algo así: local x = 0 local y = 5 while (x < 10) do print (x) if x == y then break end x = x + 1 end --Aquí termina el loop A veces es muy útil cuando intentas hacer bastante en un sólo while. Otro ejemplo de esto mismo en un repeat es este: local x = 0 local y = 5 repeat print (x) if x == y then break end x = x + 1 until x > 9 --Aquí termina el loop El loop por así decirlo es que se repite todo el tiempo, y pues cuando rompemos ese loop no pasará nada y dejará de hacer lo que está haciendo. |