Menu
CoddyTech

プレイヤーの移動

CoddyのLuaジャーニー「ロジックとプログラムの流れ」セクションの一部。レッスン 29/54。

challenge icon

チャレンジ

簡単

プレイヤーが入力を利用可能な出口と照合して部屋間を移動できるようにする移動システムを実装してください。

前のチャレンジで使用したstartingRoom、gardenRoom、player変数が用意されています。

ゲームループを変更して、移動コマンドを処理してください。

  • 部屋を接続します。図書館からeastに進むと庭に行き、westに進むと戻ります
  • プレイヤーがいる現在の部屋の説明を表示します
  • プロンプト"> "(大なり記号の後にスペース)を改行なしで表示します
  • io.read()を使ってユーザーのコマンドを読み取ります
  • コマンドが現在の部屋のexitsテーブルのキーと一致するか確認します
  • 一致した場合、その出口に格納されている部屋にplayer.currentRoomを更新します
  • コマンドが"quit"の場合、ループを終了するためにgameRunningをfalseに設定します

ユーザーが"quit"と入力するまで、ループを続けます。

注: io.write("> ")は改行を追加しないため、次の出力行(部屋の説明)は生の出力ストリームでプロンプトの直後に同じ行に表示されます。ループの各反復では、部屋の説明が独立した行に表示された後、改行なしで> が表示されるため、次の説明はその同じ行に続きます。

期待される出力形式(入力: east、次にquit):

You find yourself in a dusty library filled with ancient books and scrolls.
> A hidden garden with overgrown plants and a small fountain.
> 

自分で試してみよう

-- 部屋の定義
local startingRoom = {
  description = "You find yourself in a dusty library filled with ancient books and scrolls.",
  exits = {}
}

local gardenRoom = {
  description = "A hidden garden with overgrown plants and a small fountain.",
  exits = {}
}

-- east / west を使って出口を設定する
startingRoom.exits = {
  east = gardenRoom
}

gardenRoom.exits = {
  west = startingRoom
}

-- プレイヤー
local player = {
  currentRoom = startingRoom
}

-- ゲームループ
local gameRunning = true

-- TODO: ここに while ループを書く

ロジックとプログラムの流れのすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ