Gérer les déplacements invalides
Fait partie de la section Logique et flux du Journey Lua de Coddy. Leçon 30 sur 54.
Défi
FacileAjoutez la gestion des erreurs au système de déplacement afin de fournir un retour lorsque le joueur saisit une direction invalide.
Les variables startingRoom, gardenRoom et player vous sont fournies depuis le défi précédent.
Modifiez la boucle de jeu pour gérer les commandes de déplacement invalides :
- Reliez les pièces à l'aide des sorties nord/sud : définissez
startingRoom.exits["north"]surgardenRoom, etgardenRoom.exits["south"]surstartingRoom - Affichez la description de la pièce actuelle du joueur
- Affichez l'invite
"> "(signe supérieur suivi d'une espace) sans retour à la ligne - Lisez la commande de l'utilisateur à l'aide de
io.read() - Vérifiez si la commande correspond à une clé de la table
exitsde la pièce actuelle - Si elle correspond, mettez à jour
player.currentRoomavec la pièce stockée dans cette sortie - Si la commande ne correspond à aucune sortie et n'est pas
"quit", affichez"You can't go that way." - Si la commande est
"quit", définissezgameRunningsurfalsepour quitter la boucle
La boucle doit continuer jusqu'à ce que l'utilisateur saisisse "quit".
Format de sortie attendu :
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.
> Essayez vous-même
-- 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
Toutes les leçons de Logique et flux
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() contre ipairs()Récapitulatif - Fiche de personnage2Fonctions supplémentaires de la bibliothèque table
table.concat()construction de tables et unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des meilleurs scores5Projet : moteur d’aventure textuelle
Configuration du projet : la pièceRelier les pièces3Concepts avancés des fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu’est-ce qu’une fermeture ?Récapitulatif - Gestionnaire d’événements simpleEntraînez-vous par vous-même : Compilateur Lua en ligne