×

Langue

Fermer
Atelier 801
  • Forums
  • Dev Tracker
  • Connexion
    • English Français
      Português do Brasil Español
      Türkçe Polski
      Magyar Română
      العربية Skandinavisk
      Nederlands Deutsch
      Bahasa Indonesia Русский
      中文 Filipino
      Lietuvių kalba 日本語
      Suomi עברית
      Italiano Česky
      Hrvatski Slovensky
      Български Latviešu
      Estonian
  • Langue
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Semimegapost] LUA.
[Semimegapost] LUA.
Thetroz
« Citoyen »
1423585680000
    • Thetroz#0000
    • Profil
    • Derniers messages
    • Tribu
#1
  0
  • main()
  • ¿Qué es LUA?
  • Tablas
  • Funciones
  • Matemáticas
  • Bucles

http://i.imgur.com/hndhNxF.png



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 :
Una tabla no es más que un conjunto de pares índice-valor (keys y values).
El índice es lo que se usa para hacer referencia a un espacio de la tabla y el valor es lo que contiene.

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 :
[...] las funciones de tig no debes de llamarlas, ellas se desencadenan solas, mientras que en cambio, las funciones que haces tú, las debes llamar [...]

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 :
Retorna tres valores: la función next, la tabla, y nil

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()
Thetroz
« Citoyen »
1423585680000
    • Thetroz#0000
    • Profil
    • Derniers messages
    • Tribu
#2
  0
Post reservado*
Nelszk
« Citoyen »
1423598220000
    • Nelszk#0000
    • Profil
    • Derniers messages
#3
  0
Hacía falta un post así para los principiantes.
Muy buen hilo.
Eliaseeg
« Citoyen »
1423852320000
    • Eliaseeg#0000
    • Profil
    • Derniers messages
#4
  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.
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Semimegapost] LUA.
© Atelier801 2018

Equipe Conditions Générales d'Utilisation Politique de Confidentialité Contact

Version 1.27