{}const=>[]async()letfn</>var
開発Lua

🐍 Luaで「ヘビ」をゼロから書く

エンジンなしで最初のゲームを書きたいですか?コンソールでLuaの伝説的な「スネーク」を作る方法を分析しましょう。シンプルでわかりやすいです。

К

Kodik

著者

2分で読める

独自のゲームを作成することは、プログラミングの学習を開始する多くの人の夢です。そして、言語を取るなら Lua、伝説のゲームは素晴らしいスタートプロジェクトになります 「ヘビ」エンジンやライブラリは使わず、Luaとコンソールだけを使用します。

Luaは習得しやすく、シンタックスが簡潔で、ゲームやプロトタイプの作成に最適です。これはゲームエンジン(Roblox、Love2D、Defold)でよく使用されますが、それらがなくても、Luaで動作するゲームを書くことができます。

「ヘビ」に必要なものは何ですか?

  • ゲームフィールドは、スネークが動く2次元のグリッドです。

  • スネークは、そのセグメントの座標のリストです。

  • 食べ物はフィールド上のランダムなポイントです。

  • コントロール — 矢印(または WASD )。

  • メカニズム — スネークは動き、食べ物を食べると成長し、壁や自分自身と衝突すると負けます。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

最初のステップは、ゲームフィールドです

width, height = 20, 20

ヘビとその動き

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

食事

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

管理

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

ゲームサイクル

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

改善点

  • スコアカウンターを追加します。

  • さまざまな速度レベルを作成します。

  • 終了の可能性を追加します(たとえば、qを入力した場合)。

  • ヘビを美しく描きます(たとえば、頭は「O」、体は「o」)。

エンジンなしでLuaで「Snake」を書くことは、初心者にとって素晴らしいプロジェクトです。それは理解するのを助けます:

  • 表の操作方法、

  • ゲームサイクルの実装方法、

  • ユーザー入力の処理方法。

その後、この経験をLove2D、Robloxに転用したり、独自のミニエンジンを書いたりすることもできます!

B コディケ 私たちはプログラミングの学習を楽しくわかりやすくします。ステップバイステップでスキルを磨くのに役立つ課題を伴う興味深いコースを用意しています。

また、アクティブな テレグラムチャンネル、ここでは素晴らしいアイデアについて話し合い、経験を共有し、課題を一緒に分析します。学習は有益であるだけでなく、楽しいものになります。

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要