Sistem Karakter Gim
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 109 dari 110.
Tantangan
MudahMari bangun Sistem Karakter Game yang menggabungkan semua konsep OOP yang sudah kamu kuasai! Kamu akan membuat berbagai class karakter dengan kemampuan, statistik, dan mekanisme pertarungan yang unik, untuk memodelkan cara kerja karakter dalam game sungguhan.
Sistemmu akan disusun dalam enam file:
character.dart: Buat classCharacterabstrak sebagai fondasi bagi semua tipe karakter. Setiap karakter memilikiname(String),_health(int) privat,attackPower(int), dandefense(int). Sertakan getter untuk health dan method berikut:takeDamage(int damage)- mengurangi health sebesardamage - defense(damage yang diterima minimal 1, health tidak boleh kurang dari 0). Mencetakname takes X damage! Health: Ybool isAlive()- mengembalikan true jika health lebih besar dari 0- Method abstrak
String attack()yang diimplementasikan oleh subclass untuk gaya serangan unik mereka
toString()agar mengembalikanname [Class] - HP: health, ATK: attackPower, DEF: defense, dengan Class berasal dariruntimeType.abilities.dart: Buat dua mixin yang menyediakan kemampuan khusus:CanHeal- menyediakan methodheal(int amount). Karena mixin tidak dapat mengakses field privat secara langsung, mixin ini harus mendefinisikanvoid restoreHealth(int amount)abstrak yang diimplementasikan oleh class karakter. Methodheal()memanggilrestoreHealth(amount)dan mencetakname heals for amount HP!CanCastSpells- menyediakanint mana(nilai default 100) dan methodcastSpell(String spellName, int manaCost)yang mengurangi mana jika mencukupi, mencetakname casts spellName!, lalu mengembalikan true. Jika mana tidak mencukupi, cetakNot enough mana!dan kembalikan false.
warrior.dart: Buat classWarrioryang mewarisiCharacter. Warrior adalah petarung tangguh dengan defense tinggi. Inisialisasi dengan 150 health, 20 attack power, dan 15 defense. Implementasikanattack()agar mengembalikanname swings a mighty sword!mage.dart: Buat classMageyang mewarisiCharacterdan menggunakan mixinCanCastSpellssertaCanHeal. Mage rapuh tetapi kuat. Inisialisasi dengan 80 health, 35 attack power, dan 5 defense. Implementasikanattack()agar mengembalikanname hurls a fireball!. ImplementasikanrestoreHealth(int amount)untuk menambah health (maksimal 80).archer.dart: Buat classArcheryang mewarisiCharacter. Archer adalah petarung yang seimbang. Inisialisasi dengan 100 health, 25 attack power, dan 10 defense. Implementasikanattack()agar mengembalikanname fires a precise arrow!main.dart: Tunjukkan sistem karaktermu dengan membuat masing-masing satu karakter dari setiap tipe: Warrior bernamaThorin, Mage bernamaGandalf, dan Archer bernamaLegolas. Cetak setiap karakter menggunakantoString(). Lalu simulasikan urutan pertarungan:- Cetak pesan serangan Thorin
- Gandalf menerima 30 damage
- Gandalf merapal
Healing Light(menghabiskan 25 mana) - Gandalf memulihkan 20 HP
- Cetak pesan serangan Gandalf
- Thorin menerima 40 damage
- Cetak pesan serangan Legolas
- Cetak apakah setiap karakter masih hidup dalam format:
name alive: true/false
Output yang diharapkan:
Thorin [Warrior] - HP: 150, ATK: 20, DEF: 15
Gandalf [Mage] - HP: 80, ATK: 35, DEF: 5
Legolas [Archer] - HP: 100, ATK: 25, DEF: 10
Thorin swings a mighty sword!
Gandalf takes 25 damage! Health: 55
Gandalf casts Healing Light!
Gandalf heals for 20 HP!
Gandalf hurls a fireball!
Thorin takes 25 damage! Health: 125
Legolas fires a precise arrow!
Thorin alive: true
Gandalf alive: true
Legolas alive: trueCoba sendiri
import 'warrior.dart';
import 'mage.dart';
import 'archer.dart';
void main() {
// TODO: Buat Warrior bernama "Thorin"
// TODO: Buat Mage bernama "Gandalf"
// TODO: Buat Archer bernama "Legolas"
// TODO: Cetak setiap karakter menggunakan toString()
// TODO: Simulasikan urutan pertarungan:
// 1. Cetak pesan serangan Thorin
// 2. Gandalf menerima 30 kerusakan
// 3. Gandalf menggunakan "Healing Light" (menghabiskan 25 mana)
// 4. Gandalf memulihkan 20 HP
// 5. Cetak pesan serangan Gandalf
// 6. Thorin menerima 40 kerusakan
// 7. Cetak pesan serangan Legolas
// 8. Cetak apakah setiap karakter masih hidup: "name alive: true/false"
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online