Menu
CoddyTech

Ringkasan: Sistem Inventaris

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 67 dari 70.

challenge icon

Tantangan

Mudah

Mari bangun sistem manajemen inventaris lengkap untuk game bermain peran! Kamu akan membuat hierarki tipe item dan class pengelola untuk mengaturnya, dengan memadukan pewarisan, polimorfisme, dan komposisi dalam satu proyek yang terpadu.

Kamu akan mengatur kodemu dalam lima file:

  • Item.lua: Class dasar untuk semua item. Setiap item memiliki name dan value (dalam koin emas). Sertakan method :getInfo() yang mengembalikan string dengan format "{name}: {value} gold".
  • Weapon.lua: Item khusus yang mewarisi dari Item. Senjata memiliki atribut tambahan, yaitu damage. Ganti implementasi :getInfo() agar mengembalikan "{name}: {value} gold, {damage} damage".
  • Potion.lua: Item khusus lainnya yang mewarisi dari Item. Ramuan memiliki atribut healAmount. Ganti implementasi :getInfo() agar mengembalikan "{name}: {value} gold, heals {healAmount} HP".
  • Inventory.lua: Class pengelola yang menyimpan kumpulan item. Sertakan method :addItem(item) untuk menambahkan item jenis apa pun, method :listItems() yang mencetak :getInfo() untuk setiap item (satu per baris), dan method :getTotalValue() yang mengembalikan jumlah nilai semua item.
  • main.lua: Satukan semuanya! Buat inventaris dan isi dengan item berdasarkan input yang kamu terima. Lalu tampilkan daftar semua item dan cetak total nilai inventaris pada baris terakhir.

Keunggulan desain ini terlihat dari polimorfisme yang diterapkan. Inventory tidak perlu mengetahui apakah yang disimpannya adalah Weapon atau Potion. Inventory cukup memanggil :getInfo(), lalu setiap item memberikan respons yang sesuai dengan tipenya.

Kamu akan menerima enam input yang menjelaskan dua item untuk ditambahkan:

  1. Tipe item pertama ("weapon" atau "potion")
  2. Nama item pertama
  3. Nilai item pertama (angka)
  4. Tipe item kedua ("weapon" atau "potion")
  5. Nama item kedua
  6. Nilai item kedua (angka)

Untuk senjata, gunakan damage tetap sebesar 25. Untuk ramuan, gunakan jumlah pemulihan tetap sebesar 50.

Setelah menambahkan kedua item, panggil :listItems() untuk mencetak info setiap item, lalu cetak Total: {value} gold pada baris terakhir.

Contohnya, jika inputnya adalah weapon, Iron Sword, 150, potion, Health Elixir, dan 75, outputnya adalah:

Iron Sword: 150 gold, 25 damage
Health Elixir: 75 gold, heals 50 HP
Total: 225 gold

Jika inputnya adalah potion, Mana Potion, 50, weapon, Steel Axe, dan 200, outputnya adalah:

Mana Potion: 50 gold, heals 50 HP
Steel Axe: 200 gold, 25 damage
Total: 250 gold

Coba sendiri

-- main.lua: Satukan semuanya

local Weapon = require('Weapon')
local Potion = require('Potion')
local Inventory = require('Inventory')

-- Baca input untuk item pertama
local type1 = io.read()
local name1 = io.read()
local value1 = tonumber(io.read())

-- Baca input untuk item kedua
local type2 = io.read()
local name2 = io.read()
local value2 = tonumber(io.read())

-- Nilai tetap: senjata menghasilkan 25 kerusakan, ramuan memulihkan 50 HP

-- TODO: Buat inventaris

-- TODO: Buat item pertama berdasarkan type1 ("weapon" atau "potion")
-- dan tambahkan ke inventaris

-- TODO: Buat item kedua berdasarkan type2 ("weapon" atau "potion")
-- dan tambahkan ke inventaris

-- TODO: Panggil listItems() untuk mencetak info setiap item

-- TODO: Cetak "Total: {value} gold" menggunakan getTotalValue()

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler Lua online