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.
El primer paso es el campo de juego
width, height = 20, 20La 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
endCiclo 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")
endQué 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.
