Créer son propre jeu est le rêve de beaucoup de ceux qui commencent à apprendre la programmation. Et si vous prenez le langage Lua, alors le jeu légendaire sera un excellent projet de départ « Serpent ». Et nous allons nous passer de moteurs et de bibliothèques - seulement un Lua propre et une console.
Lua est facile à apprendre, a une syntaxe concise et est idéal pour créer des jeux et des prototypes. Il est souvent utilisé dans les moteurs de jeu (Roblox, Love2D, Defold), mais même sans eux, vous pouvez écrire un jeu fonctionnel en Lua.

De quoi avons-nous besoin pour notre « Serpent » ?
Le terrain de jeu est une grille bidimensionnelle dans laquelle se déplace le serpent.
Serpent - liste des coordonnées de ses segments.
La nourriture est un point aléatoire sur le terrain.
Contrôle - flèches (ou WASD).
Mécanique - le serpent se déplace, grandit en mangeant de la nourriture, perd en cas de collision avec un mur ou avec lui-même.
La première étape - le terrain de jeu
width, height = 20, 20Le serpent et son mouvement
snake = {
{x = 10, y = 10},
{x = 9, y = 10},
{x = 8, y = 10}
}
direction = "right"Alimentation
math.randomseed(os.time())
food = {x = math.random(1, width), y = math.random(1, height)}Gestion
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
endCycle de jeu
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")
endCe qui peut être amélioré
Ajouter un compteur de points.
Faire différents niveaux de vitesse.
Ajouter la possibilité de quitter (par exemple, en entrant q).
Dessinez un beau serpent (par exemple, la tête « O », le corps « o »).
Écrire « Snake » en Lua sans moteurs est un excellent projet pour un débutant. Il aide à comprendre :
comment travailler avec des tableaux,
comment mettre en œuvre un cycle de jeu,
comment traiter l'entrée utilisateur.
Et alors seulement, vous pourrez transférer cette expérience dans Love2D, Roblox ou même écrire votre propre mini-moteur !
Dans Codique nous rendons l'apprentissage de la programmation passionnant et compréhensible : nous avons des cours intéressants avec des tâches qui aident à améliorer les compétences étape par étape.
Et nous avons aussi un chaîne de télégram, où nous discutons d'idées intéressantes, partageons nos expériences et analysons ensemble les tâches, apprendre devient non seulement utile, mais aussi amusant.
