Menu
CoddyTech

Sistem Karakter Gim

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 109 dari 110.

challenge icon

Tantangan

Mudah

Mari 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 class Character abstrak sebagai fondasi bagi semua tipe karakter. Setiap karakter memiliki name (String), _health (int) privat, attackPower (int), dan defense (int). Sertakan getter untuk health dan method berikut:
    • takeDamage(int damage) - mengurangi health sebesar damage - defense (damage yang diterima minimal 1, health tidak boleh kurang dari 0). Mencetak name takes X damage! Health: Y
    • bool isAlive() - mengembalikan true jika health lebih besar dari 0
    • Method abstrak String attack() yang diimplementasikan oleh subclass untuk gaya serangan unik mereka
    Override toString() agar mengembalikan name [Class] - HP: health, ATK: attackPower, DEF: defense, dengan Class berasal dari runtimeType.
  • abilities.dart: Buat dua mixin yang menyediakan kemampuan khusus:
    • CanHeal - menyediakan method heal(int amount). Karena mixin tidak dapat mengakses field privat secara langsung, mixin ini harus mendefinisikan void restoreHealth(int amount) abstrak yang diimplementasikan oleh class karakter. Method heal() memanggil restoreHealth(amount) dan mencetak name heals for amount HP!
    • CanCastSpells - menyediakan int mana (nilai default 100) dan method castSpell(String spellName, int manaCost) yang mengurangi mana jika mencukupi, mencetak name casts spellName!, lalu mengembalikan true. Jika mana tidak mencukupi, cetak Not enough mana! dan kembalikan false.
  • warrior.dart: Buat class Warrior yang mewarisi Character. Warrior adalah petarung tangguh dengan defense tinggi. Inisialisasi dengan 150 health, 20 attack power, dan 15 defense. Implementasikan attack() agar mengembalikan name swings a mighty sword!
  • mage.dart: Buat class Mage yang mewarisi Character dan menggunakan mixin CanCastSpells serta CanHeal. Mage rapuh tetapi kuat. Inisialisasi dengan 80 health, 35 attack power, dan 5 defense. Implementasikan attack() agar mengembalikan name hurls a fireball!. Implementasikan restoreHealth(int amount) untuk menambah health (maksimal 80).
  • archer.dart: Buat class Archer yang mewarisi Character. Archer adalah petarung yang seimbang. Inisialisasi dengan 100 health, 25 attack power, dan 10 defense. Implementasikan attack() agar mengembalikan name fires a precise arrow!
  • main.dart: Tunjukkan sistem karaktermu dengan membuat masing-masing satu karakter dari setiap tipe: Warrior bernama Thorin, Mage bernama Gandalf, dan Archer bernama Legolas. Cetak setiap karakter menggunakan toString(). Lalu simulasikan urutan pertarungan:
    1. Cetak pesan serangan Thorin
    2. Gandalf menerima 30 damage
    3. Gandalf merapal Healing Light (menghabiskan 25 mana)
    4. Gandalf memulihkan 20 HP
    5. Cetak pesan serangan Gandalf
    6. Thorin menerima 40 damage
    7. Cetak pesan serangan Legolas
    8. 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: true

Coba 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

Latihan sendiri: Compiler Dart online