Mini-project Part 5: Petualangan Teks

Proyek terbesar sejauh ini. Ia menggunakan semua ide Part 5 — function, list, dictionary, module — untuk membangun petualangan teks kecil: seorang player berjalan melalui ruangan dengan mengetik perintah seperti go north dan take torch.

Apa yang harus dibangun

Sebuah program yang, ketika dijalankan:

  1. Menempatkan player di ruangan awal.
  2. Melakukan loop:
    • Mencetak deskripsi ruangan saat ini beserta item yang ada di dalamnya.
    • Meminta perintah.
    • Menjalankan perintah tersebut:
      • look — deskripsikan ruangan saat ini lagi.
      • go <direction> — bergerak melalui sebuah exit (north, south, east, west, up, down).
      • take <item> — ambil item dari lantai.
      • inv — tampilkan apa yang dibawa player.
      • quit — hentikan game.
  3. Menang ketika player mengambil gold coin: cetak pesan kemenangan dan keluar.

Contoh sesi:

-- 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 Python berada berdampingan. Karena main.py memuat world.py dengan import world, cd ke folder mereka sebelum menjalankan. Untuk memainkan versi yang sudah jadi:

cd projects/04-text-adventure/finished
python main.py

File-file:

  • world.py — mendefinisikan dictionary rooms. Setiap ruangan adalah dictionary dengan "name", "description", "exits", dan "items".
  • main.py — loop game dan function perintah.

Kedua versi ada di bawah projects/04-text-adventure/:

starter/
    world.py
    main.py
finished/
    world.py
    main.py

Untuk mengerjakan versi starter:

cd projects/04-text-adventure/starter
python main.py

Petunjuk

  • Dictionary rooms memetakan id ruangan (angka) ke sebuah ruangan. Exits memetakan string arah ke id ruangan yang dituju. Item ruangan adalah list of string.

  • Player memiliki dua bagian state: current_room_id (angka) dan inventory (list of string).

  • Untuk mem-parse go north, pisahkan menjadi kata kerja dan argumen:

    words = command.split()
    verb = words[0]
    arg = words[1] if len(words) > 1 else ""
  • Pengecekan menang setelah take yang berhasil adalah satu if: apakah itu gold coin? Jika ya, cetak pesan menang dan break keluar dari loop utama.

  • Di world.py, definisikan dictionary rooms di level atas. Di main.py, gunakan import world lalu akses world.rooms.

Yang belum bisa kamu gunakan

  • Class dan self (bab 26). Function menerima data yang mereka kerjakan sebagai argumen biasa — take(item, room, inventory), bukan room.take(item).
  • Inheritance (bab 27). Dict biasa dan function sudah cukup.

Tantangan tambahan (opsional)

  • Tambahkan perintah read untuk tanda atau surat.
  • Kunci satu exit sampai item tertentu dibawa (misalnya gold coin hanya bisa dicapai jika player membawa torch).
  • Tambahkan musuh yang menghalangi exit sampai player menggunakan sword.

Tidak ada yang wajib untuk menyelesaikan proyek.

Selesai?

Ketika kamu bisa menelusuri setiap ruangan, mengambil item secara berurutan, dan memicu kemenangan pada gold coin, proyek selesai. Lanjutkan ke Bab 26 — Methods dan self, bab pertama yang memperkenalkan class Python secara langsung.