Menu
Coddy logo textTech

Обработка некорректных ходов

Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 30 из 54.

challenge icon

Задание

Легко

Добавьте обработку ошибок в систему перемещения, чтобы обеспечить обратную связь, когда игрок вводит неверное направление.

Вам предоставлены переменные startingRoom, gardenRoom и player из предыдущего испытания.

Измените игровой цикл для обработки неверных команд перемещения:

  • Соедините комнаты, используя выходы north/south: установите startingRoom.exits["north"] в значение gardenRoom, а gardenRoom.exits["south"] в значение startingRoom
  • Выведите описание текущей комнаты игрока
  • Выведите приглашение "> " (знак «больше», за которым следует пробел) без перехода на новую строку
  • Прочитайте команду пользователя с помощью io.read()
  • Проверьте, соответствует ли команда ключу в таблице exits текущей комнаты
  • Если соответствует, обновите player.currentRoom, установив комнату, хранящуюся в этом выходе
  • Если команда не соответствует ни одному выходу и не является "quit", выведите "You can't go that way."
  • Если команда — "quit", установите gameRunning в значение false, чтобы выйти из цикла

Цикл должен продолжаться до тех пор, пока пользователь не введет "quit".

Ожидаемый формат вывода:

You find yourself in a dusty library filled with ancient books and scrolls.
> 
A hidden garden with overgrown plants and a small fountain.
> 
You can't go that way.
A hidden garden with overgrown plants and a small fountain.
> 
You find yourself in a dusty library filled with ancient books and scrolls.
> 

Попробуйте сами

-- Room definitions
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 = {}
}

-- Set exits using east / west
startingRoom.exits = {
  east = gardenRoom
}

gardenRoom.exits = {
  west = startingRoom
}

-- Player
local player = {
  currentRoom = startingRoom
}

-- Game loop
local gameRunning = true

while gameRunning do
  print(player.currentRoom.description)
  io.write("> ")
  local command = io.read()

  if command == "quit" then
    gameRunning = false
  elseif player.currentRoom.exits[command] then
    player.currentRoom = player.currentRoom.exits[command]
  end
end

Все уроки раздела Logic & Flow