Den Spieler bewegen
Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 29 von 54.
Aufgabe
EinfachImplementieren Sie das Bewegungssystem, das es dem Spieler ermöglicht, zwischen Räumen zu navigieren, indem seine Eingabe mit den verfügbaren Ausgängen abgeglichen wird.
Ihnen werden die Variablen startingRoom, gardenRoom und player aus der vorherigen Herausforderung zur Verfügung gestellt.
Ändern Sie die Spielschleife (Game Loop), um Bewegungsbefehle zu verarbeiten:
- Geben Sie die Beschreibung des aktuellen Raums des Spielers aus
- Geben Sie die Eingabeaufforderung
"> "(Größer-als-Zeichen gefolgt von einem Leerzeichen) ohne Zeilenumbruch aus - Lesen Sie den Befehl des Benutzers mit
io.read()ein - Prüfen Sie, ob der Befehl mit einem Schlüssel in der Tabelle
exitsdes aktuellen Raums übereinstimmt - Wenn er übereinstimmt, aktualisieren Sie
player.currentRoomauf den in diesem Ausgang gespeicherten Raum - Wenn der Befehl
"quit"lautet, setzen SiegameRunningauffalse, um die Schleife zu beenden
Die Schleife sollte so lange fortgesetzt werden, bis der Benutzer "quit" eingibt.
Hinweis: Da io.write("> ") keinen Zeilenumbruch hinzufügt, erscheint die nächste Zeile der Ausgabe (die Raumbeschreibung) im rohen Ausgabestrom sofort nach der Eingabeaufforderung in derselben Zeile. Jede Schleifeniteration erzeugt: die Raumbeschreibung in einer eigenen Zeile, dann > ohne Zeilenumbruch, sodass die folgende Beschreibung in derselben Zeile fortgesetzt wird.
Erwartetes Ausgabeformat (Eingaben: east, dann quit):
You find yourself in a dusty library filled with ancient books and scrolls.
> A hidden garden with overgrown plants and a small fountain.
> Probier es selbst
-- 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
endAlle Lektionen in Logic & Flow
1Fortgeschrittene Table-Iteration
Iterieren mit pairs()Iterieren mit ipairs()pairs() vs. ipairs()Zusammenfassung – Charakterbogen4Einführung in Metatables
Was ist eine Metatable?setmetatable & getmetatableDie __index-MetamethodeDie __newindex-MetamethodeDie __tostring-MetamethodeArithmetische Metamethoden Teil 1Arithmetische Metamethoden Teil 2Zusammenfassung – Schreibgeschützte Tabellen7Fortgeschrittene String-Manipulation
string.gsub() für ErsetzungenEinführung in String-Patternsstring.find()string.match()Iterieren mit string.gmatch()Rückblick – Log-File-Parser2Weitere Funktionen der Table-Bibliothek
table.concat()Tabellenerstellung & unpack()table.sort()Benutzerdefiniertes Sortieren mit FunktionenRückblick – Highscore-Tabelle5Projekt: Text-Adventure-Engine
Projekt-Setup: Der RaumRäume verknüpfen