{}const=>[]async()letfn</>var
DesarrolloLua

🐍 Escribimos «Serpiente» en Lua desde cero

¿Quieres escribir tu primer juego sin motores? Veamos cómo hacer el legendario «Snake» en Lua directamente en la consola, de forma sencilla y clara.

К

Kodik

Autor

3 min de lectura

Crear su propio juego es el sueño de muchos que comienzan a aprender programación. Y si tomas el lenguaje Lua, el legendario juego será un excelente proyecto de inicio «Serpiente». Y lo haremos sin motores ni bibliotecas, solo Lua limpio y la consola.

Lua es fácil de aprender, tiene una sintaxis concisa y es ideal para crear juegos y prototipos. A menudo se utiliza en motores de juegos (Roblox, Love2D, Defold), pero incluso sin ellos, puedes escribir un juego funcional en Lua.

¿Qué se necesita para nuestra «Serpiente»?

  • El campo de juego es una cuadrícula bidimensional en la que se mueve la serpiente.

  • Serpiente - lista de coordenadas de sus segmentos.

  • La comida es un punto aleatorio en el campo.

  • Control: flechas (o WASD).

  • Mecánica: la serpiente se mueve, crece al comer, pierde al chocar contra una pared o contra sí misma.

🔥 100.000+ estudiantes ya están con nosotros

¿Cansado de leer teoría?
¡Hora de programar!

Kodik — una app donde aprendes a programar con práctica. Mentor IA, lecciones interactivas, proyectos reales.

🤖 IA 24/7
🎓 Certificados
💰 Gratis
🚀 Empezar
Se unieron hoy

El primer paso es el campo de juego

width, height = 20, 20

La serpiente y su movimiento

snake = {
  {x = 10, y = 10},
  {x = 9, y = 10},
  {x = 8, y = 10}
}
direction = "right"

Comida

math.randomseed(os.time())
food = {x = math.random(1, width), y = math.random(1, height)}

Control

io.input():setvbuf("no")

function getInput()
  local key = io.read(1)
  if key == "w" then direction = "up" end
  if key == "s" then direction = "down" end
  if key == "a" then direction = "left" end
  if key == "d" then direction = "right" end
end

Ciclo de juego

while true do
  getInput()
  
  -- перемещаем змейку
  head = {x = snake[1].x, y = snake[1].y}
  if direction == "up" then head.y = head.y - 1 end
  if direction == "down" then head.y = head.y + 1 end
  if direction == "left" then head.x = head.x - 1 end
  if direction == "right" then head.x = head.x + 1 end

  table.insert(snake, 1, head)

  -- проверка на еду
  if head.x == food.x and head.y == food.y then
    food = {x = math.random(1, width), y = math.random(1, height)}
  else
    table.remove(snake)
  end

  -- проверка столкновений
  if head.x < 1 or head.y < 1 or head.x > width or head.y > height then
    print("Game Over!")
    break
  end

  -- вывод поля
  os.execute("clear") -- для Linux/macOS (или "cls" для Windows)
  for y = 1, height do
    for x = 1, width do
      local symbol = " . "
      if x == food.x and y == food.y then
        symbol = " @ "
      end
      for i, segment in ipairs(snake) do
        if segment.x == x and segment.y == y then
          symbol = " # "
        end
      end
      io.write(symbol)
    end
    io.write("\n")
  end

  os.execute("sleep 0.1")
end

Qué se puede mejorar

  • Añadir un contador de puntos.

  • Hacer diferentes niveles de velocidad.

  • Añadir la posibilidad de salir (por ejemplo, al introducir q).

  • Dibuja una serpiente de forma bonita (por ejemplo, la cabeza «O», el cuerpo «o»).

Escribir «Serpiente» en Lua sin motores es un gran proyecto para un principiante. Ayuda a entender:

  • cómo trabajar con tablas,

  • cómo implementar el ciclo del juego,

  • cómo procesar la entrada del usuario.

Y solo entonces puedes transferir esta experiencia a Love2D, Roblox o incluso escribir tu propio mini-motor.

En Codice hacemos que el aprendizaje de la programación sea emocionante y comprensible: tenemos cursos interesantes con tareas que ayudan a mejorar las habilidades paso a paso.

Y también tenemos un canal de telegram, donde discutimos ideas geniales, compartimos experiencias y analizamos juntos las tareas: aprender no solo es útil, sino también divertido.

🎯Deja de postergar

¿Te gustó el artículo?
¡Hora de practicar!

En Kodik no solo lees — escribes código de inmediato. Teoría + práctica = habilidades reales.

Práctica instantánea
🧠IA explica código
🏆Certificado

Sin registro • Sin tarjeta