{}const=>[]async()letfn</>var
DéveloppementLua

🐍 Écrire « Serpent » en Lua à partir de zéro

Vous voulez écrire votre premier jeu sans moteurs ? Voyons comment faire le légendaire « Snake » sur Lua directement dans la console, de manière simple et claire.

К

Kodik

Auteur

3 min de lecture

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.

🔥 100 000+ étudiants déjà avec nous

Marre de lire la théorie ?
Il est temps de coder !

Kodik — une appli où tu apprends à coder par la pratique. Mentor IA, leçons interactives, projets réels.

🤖 IA 24/7
🎓 Certificats
💰 Gratuit
🚀 Commencer
Ont rejoint aujourd'hui

La première étape - le terrain de jeu

width, height = 20, 20

Le 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
end

Cycle 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")
end

Ce 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.

🎯Arrête de reporter

Tu as aimé l'article ?
Place à la pratique !

Avec Kodik, tu ne lis pas seulement — tu codes immédiatement. Théorie + pratique = vraies compétences.

Pratique instantanée
🧠L'IA explique le code
🏆Certificat

Sans inscription • Sans carte