Déplacer le joueur
Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 29 sur 54.
Défi
FacileImplémentez le système de mouvement qui permet au joueur de naviguer entre les pièces en vérifiant sa saisie par rapport aux sorties disponibles.
Vous disposez des variables startingRoom, gardenRoom et player du défi précédent.
Modifiez la boucle de jeu pour gérer les commandes de mouvement :
- Affichez la description de la pièce actuelle du joueur
- Affichez l'invite
"> "(signe supérieur suivi d'un espace) sans saut de ligne - Lisez la commande de l'utilisateur en utilisant
io.read() - Vérifiez si la commande correspond à une clé dans 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 est
"quit", définissezgameRunningàfalsepour quitter la boucle
La boucle doit continuer jusqu'à ce que l'utilisateur tape "quit".
Remarque : Comme io.write("> ") n'ajoute pas de saut de ligne, la ligne de sortie suivante (la description de la pièce) apparaît immédiatement après l'invite sur la même ligne dans le flux de sortie brut. Chaque itération de la boucle produit : la description de la pièce sur sa propre ligne, puis > sans saut de ligne, de sorte que la description suivante continue sur cette même ligne.
Format de sortie attendu (entrées : east, puis quit) :
You find yourself in a dusty library filled with ancient books and scrolls.
> A hidden garden with overgrown plants and a small fountain.
> Essayez vous-même
-- Game rooms
local startingRoom = {
description = "You find yourself in a dusty library filled with ancient books and scrolls."
}
local gardenRoom = {
description = "You step into a beautiful garden with blooming flowers and a gentle breeze."
}
-- Player
local player = {
currentRoom = startingRoom
}
-- Game loop
local gameRunning = true
while gameRunning do
print(player.currentRoom.description)
io.write("> ")
local command = io.read()
print("You entered: " .. command)
if command == "quit" then
gameRunning = false
end
endToutes les leçons de Logic & Flow
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() vs. ipairs()Récapitulatif - Fiche de personnage2Plus de fonctions de la bibliothèque table
table.concat()Construction de table & unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des scores5Projet : Moteur de jeu d'aventure textuel
Configuration du projet : La pièceRelier les pièces3Concepts avancés sur les fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu'est-ce qu'une closure ?Récapitulatif - Gestionnaire d'événements simple