הזזת השחקן
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Lua של Coddy. שיעור 29 מתוך 54.
אתגר
קלממשו את מערכת התנועה שמאפשרת לשחקן לעבור בין חדרים באמצעות בדיקת הקלט שלו מול היציאות הזמינות.
המשתנים startingRoom, gardenRoom ו-player מהאתגר הקודם זמינים לכם.
שנו את לולאת המשחק כדי לטפל בפקודות תנועה:
- הדפיסו את התיאור של החדר הנוכחי של השחקן
- הדפיסו את ההנחיה
"> "(סימן גדול מ־ ואחריו רווח) ללא מעבר שורה - קראו את הפקודה של המשתמש באמצעות
io.read() - בדקו אם הפקודה תואמת למפתח בטבלת
exitsשל החדר הנוכחי - אם היא תואמת, עדכנו את
player.currentRoomלחדר שמאוחסן ביציאה הזאת - אם הפקודה היא
"quit", הגדירו אתgameRunningלערךfalseכדי לצאת מהלולאה
הלולאה צריכה להמשיך עד שהמשתמש מקליד "quit".
הערה: מכיוון ש-io.write("> ") אינו מוסיף מעבר שורה, שורת הפלט הבאה (תיאור החדר) מופיעה מיד אחרי ההנחיה באותה שורה בזרם הפלט הגולמי. בכל איטרציה של הלולאה מתקבלים: תיאור החדר בשורה משלו, ולאחריו > ללא מעבר שורה, ולכן התיאור הבא ממשיך באותה שורה.
פורמט הפלט הצפוי (קלטים: east, ואז quit):
You find yourself in a dusty library filled with ancient books and scrolls.
> A hidden garden with overgrown plants and a small fountain.
> נסו בעצמכם
-- 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
endכל השיעורים ביחידה לוגיקה וזרימת התוכנית
1איטרציה מתקדמת בטבלאות
איטרציה באמצעות pairs()איטרציה באמצעות ipairs()pairs() לעומת ipairs()סיכום – גיליון דמות2פונקציות נוספות של ספריית הטבלאות
table.concat()בניית טבלה ו־unpack()table.sort()מיון מותאם אישית באמצעות פונקציותסיכום – לוח שיאים5פרויקט: מנוע להרפתקת טקסט
הגדרת הפרויקט: החדרקישור בין חדריםתרגלו בעצמכם: קומפיילר Lua אונליין