Ringkasan: Sistem Inventaris
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 67 dari 70.
Tantangan
MudahMari 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 memilikinamedanvalue(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, yaitudamage. Ganti implementasi:getInfo()agar mengembalikan"{name}: {value} gold, {damage} damage".Potion.lua: Item khusus lainnya yang mewarisi dari Item. Ramuan memiliki atributhealAmount. 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:
- Tipe item pertama (
"weapon"atau"potion") - Nama item pertama
- Nilai item pertama (angka)
- Tipe item kedua (
"weapon"atau"potion") - Nama item kedua
- 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 goldJika 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 goldCoba 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
1Konsep "Self"
Tabel dengan Fungsi'self' EksplisitSintaks Titik DuaTitik vs Titik DuaRangkuman, Titik Bergerak4Proyek: Bank Digital
Penyiapan Proyekmethod Setoran7Polimorfisme & Overriding
Menimpa methodMemanggil method indukDuck TypingAntarmuka UmumMemeriksa TipeRingkasan: Peran Karyawan10Proyek: Pengelola Bentuk
Penyiapan Proyekclass Rectangleclass Circlemethod KelilingKumpulan BentukLuas TotalSaring Bentuk2Pola Prototype untuk class
Konsep PrototypeMenghubungkan dengan __indexKonstruktor :new()Menginisialisasi AtributInstans yang MandiriRangkuman: Pabrik Mobil5Pembebanan Operator dalam OOP
Menjumlahkan ObjekMengurangkan ObjekMenggabungkan ObjekMembandingkan Objek (<, >)Ulasan: Aritmetika Dompet8Enkapsulasi
Konvensi PenamaanClosure untuk PrivasiAkses melalui ClosureTabel Hanya-BacaLogika ValidasiRangkuman: Brankas Aman11Pola Desain (Ringan)
Fungsi FactoryTabel SingletonPola IteratorObserver (Listener)Rangkuman, Factory Logger3State dan Behavior pada object
Variabel InstansGetter methodSetter methodProperty TerhitungMemformat stringPemeriksaan KesetaraanRangkuman: Nilai Siswa6Dasar-Dasar Pewarisan
Menyiapkan PewarisanMewarisi methodMemperluas KonstruktorMenambahkan method untuk ChildSama vs UnikRangkuman: Hierarki Bentuk9Komposisi & Mixins
Hubungan Has-ADelegasiMixins SederhanaMenerapkan Beberapa MixinsMixins vs PewarisanRangkuman: Perakitan Robot12Tantangan Akhir
Ringkasan: Sistem InventarisRingkasan: Pengelola PenggunaRingkasan: Pelacak SkorPemeriksaan Akhir OOPLatihan sendiri: Compiler Lua online