Mini-proyek Bagian 5: Text Adventure
Ini adalah proyek terbesar sejauh ini. Proyek ini menggunakan semua
konsep dari Bagian 5 — fungsi, list, dictionary, modul — untuk membangun
sebuah text adventure sederhana: pemain menjelajahi ruangan dengan
mengetik perintah seperti go north dan
take torch.
Yang akan kamu buat
Sebuah program yang, ketika dijalankan:
- Menempatkan pemain di ruangan awal.
- Melakukan perulangan:
- Mencetak deskripsi ruangan saat ini beserta benda-benda yang ada di dalamnya.
- Meminta perintah dari pemain.
- Menjalankan perintah tersebut:
look— deskripsikan ruangan saat ini lagi.go <direction>— bergerak melalui pintu keluar (north, south, east, west, up, down).take <item>— ambil benda yang ada di lantai.inv— tampilkan apa yang sedang dibawa pemain.quit— hentikan permainan.
- Menang ketika pemain mengambil
gold coin: cetak pesan kemenangan dan keluar.
Contoh sesi permainan:
-- Forest Path --
You are on a moss covered forest path. Birdsong drifts on the air.
Exits: north
> go north
-- Clearing --
A small clearing of wildflowers.
Items here: torch
Exits: east, south
> take torch
You pick up the torch.
> go east
-- Cave Entrance --
A cool, damp cave mouth opens to the east. A rope lies coiled on the floor.
Items here: rope
Exits: down, west
> quit
Goodbye.
Susunan file
Dua file Lua berada dalam satu folder. Karena
main.lua memuat world.lua dengan
require, jalankan cd ke foldernya terlebih
dahulu sebelum bermain. Untuk memainkan versi yang sudah jadi:
cd projects/04-text-adventure/finished
lua main.lua
File-file:
world.lua— mengekspor tabel rooms. Setiap ruangan adalah sebuah dictionary denganname,description,exits, danitems.main.lua— game loop dan fungsi-fungsi perintah.
Kedua versi berada di bawah
projects/04-text-adventure/:
starter/
world.lua
main.lua
finished/
world.lua
main.lua
Untuk mengerjakan versi starter:
cd projects/04-text-adventure/starter
lua main.lua
Petunjuk
Tabel rooms memetakan id ruangan (sebuah angka) ke satu ruangan. Exits memetakan arah ke id ruangan yang dituju. Item-item dalam ruangan adalah list string.
Pemain memiliki dua data state:
current_room_id(sebuah angka) daninventory(sebuah list string).Untuk mengurai perintah
go north, pecah menjadi kata kerja dan argumen:local words = {} for w in string.gmatch(input, "%S+") do table.insert(words, w) end local verb = words[1] local arg = words[2]Pengecekan kemenangan setelah
takeberhasil hanya butuh satuif: apakah itemnya adalahgold coin? Jika ya, cetak pesan menang danbreakkeluar dari perulangan utama.
Yang belum boleh kamu gunakan
- Method dan
self(bab 26). Fungsi menerima tabel yang dikerjakannya sebagai argumen biasa —take(item, room, inventory), bukanroom:take(item). - Metatabel (bab 27). Tabel dan fungsi biasa sudah cukup.
- Roblox API. Masih menggunakan Lua terminal biasa.
Tantangan tambahan (opsional)
- Tambahkan perintah
readuntuk membaca tanda atau surat. - Kunci satu pintu keluar sampai pemain membawa benda tertentu
(misalnya,
gold coinhanya bisa dijangkau jika pemain membawatorch). - Tambahkan musuh yang menghalangi pintu keluar sampai pemain
menggunakan
sword.
Semua ini tidak wajib untuk menyelesaikan proyek.
Sudah selesai?
Ketika kamu bisa menjelajahi semua ruangan, mengambil item satu per satu, dan memicu kemenangan dengan gold coin, proyek ini dianggap selesai. Lanjutkan ke Bab 26 — Methods and self, bab pertama yang menggunakan sintaks gaya Roblox secara langsung.