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:

  1. Menempatkan pemain di ruangan awal.
  2. 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.
  3. 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 dengan name, description, exits, dan items.
  • 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) dan inventory (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 take berhasil hanya butuh satu if: apakah itemnya adalah gold coin? Jika ya, cetak pesan menang dan break keluar 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), bukan room:take(item).
  • Metatabel (bab 27). Tabel dan fungsi biasa sudah cukup.
  • Roblox API. Masih menggunakan Lua terminal biasa.

Tantangan tambahan (opsional)

  • Tambahkan perintah read untuk membaca tanda atau surat.
  • Kunci satu pintu keluar sampai pemain membawa benda tertentu (misalnya, gold coin hanya bisa dijangkau jika pemain membawa torch).
  • 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.