Menu
Coddy logo textTech

Handling Invalid Moves

Part of the Logic & Flow section of Coddy's Lua journey — lesson 30 of 54.

challenge icon

Challenge

Easy

Add error handling to the movement system to provide feedback when the player enters an invalid direction.

You are provided with the startingRoom, gardenRoom, and player variables from the previous challenge.

Modify the game loop to handle invalid movement commands:

  • Connect the rooms using north/south exits: set startingRoom.exits["north"] to gardenRoom, and gardenRoom.exits["south"] to startingRoom
  • Print the description of the player's current room
  • Print the prompt "> " (greater-than sign followed by a space) without a newline
  • Read the user's command using io.read()
  • Check if the command matches a key in the current room's exits table
  • If it matches, update player.currentRoom to the room stored in that exit
  • If the command does not match any exit and is not "quit", print "You can't go that way."
  • If the command is "quit", set gameRunning to false to exit the loop

The loop should continue until the user types "quit".

Expected Output Format:

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

Try it yourself

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

All lessons in Logic & Flow