Menu
Coddy logo textTech

Oyun Karakter Sistemi

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 109 / 110.

challenge icon

Görev

Kolay

Ustalaştığınız tüm OOP kavramlarını bir araya getiren bir Oyun Karakter Sistemi inşa edelim! Benzersiz yeteneklere, istatistiklere ve dövüş mekaniklerine sahip farklı karakter sınıfları oluşturacaksınız - karakterlerin gerçek bir oyunda nasıl çalışabileceğini modelleyeceksiniz.

Sisteminiz altı dosya halinde organize edilecektir:

  • character.dart: Tüm karakter türleri için temel teşkil eden soyut bir Character sınıfı oluşturun. Her karakterin bir name (String), özel _health (int), attackPower (int) ve defense (int) değeri vardır. Sağlık için bir getter ve şu metotları ekleyin:
    • takeDamage(int damage) - sağlığı damage - defense kadar azaltır (en az 1 hasar alınır, sağlık 0'ın altına düşemez). name takes X damage! Health: Y yazdırır.
    • bool isAlive() - sağlık 0'dan büyükse true döndürür.
    • Alt sınıfların benzersiz saldırı stilleri için uygulayacağı soyut bir String attack() metodu.
    toString() metodunu, name [Class] - HP: health, ATK: attackPower, DEF: defense döndürecek şekilde geçersiz kılın (override); burada Class değeri runtimeType'dan gelir.
  • abilities.dart: Özel yetenekler sağlayan iki mixin oluşturun:
    • CanHeal - bir heal(int amount) metodu sağlar. Mixin'ler doğrudan özel (private) alanlara erişemediği için, bu mixin karakter sınıfının uygulayacağı soyut bir void restoreHealth(int amount) tanımlamalıdır. heal() metodu restoreHealth(amount) metodunu çağırır ve name heals for amount HP! yazdırır.
    • CanCastSpells - int mana (varsayılan 100) ve yeterli mana varsa manayı azaltan, name casts spellName! yazdıran ve true döndüren bir castSpell(String spellName, int manaCost) metodu sağlar. Mana yetersizse Not enough mana! yazdırır ve false döndürür.
  • warrior.dart: Character sınıfını genişleten bir Warrior sınıfı oluşturun. Savaşçılar (Warriors) yüksek savunmaya sahip tanklardır. 150 sağlık, 20 saldırı gücü ve 15 savunma ile başlatın. attack() metodunu name swings a mighty sword! döndürecek şekilde uygulayın.
  • mage.dart: Character sınıfını genişleten ve CanCastSpells ile CanHeal mixin'lerini kullanan bir Mage sınıfı oluşturun. Büyücüler (Mages) kırılgandır ancak güçlüdür. 80 sağlık, 35 saldırı gücü ve 5 savunma ile başlatın. attack() metodunu name hurls a fireball! döndürecek şekilde uygulayın. Sağlığı artırmak için (en fazla 80 olacak şekilde) restoreHealth(int amount) metodunu uygulayın.
  • archer.dart: Character sınıfını genişleten bir Archer sınıfı oluşturun. Okçular (Archers) dengeli dövüşçülerdir. 100 sağlık, 25 saldırı gücü ve 10 savunma ile başlatın. attack() metodunu name fires a precise arrow! döndürecek şekilde uygulayın.
  • main.dart: Her karakter türünden birer tane oluşturarak karakter sisteminizi gösterin: Thorin adında bir Warrior, Gandalf adında bir Mage ve Legolas adında bir Archer. Her karakteri toString() kullanarak yazdırın. Ardından bir savaş sekansı simüle edin:
    1. Thorin'in saldırı mesajını yazdırın
    2. Gandalf 30 hasar alır
    3. Gandalf Healing Light büyüsü yapar (25 mana harcar)
    4. Gandalf 20 HP iyileşir
    5. Gandalf'ın saldırı mesajını yazdırın
    6. Thorin 40 hasar alır
    7. Legolas'ın saldırı mesajını yazdırın
    8. Her karakterin hayatta olup olmadığını şu formatta yazdırın: name alive: true/false

Beklenen çıktı:

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

Kendin dene

import 'warrior.dart';
import 'mage.dart';
import 'archer.dart';

void main() {
  // TODO: "Thorin" adında bir Warrior oluşturun

  // TODO: "Gandalf" adında bir Mage oluşturun

  // TODO: "Legolas" adında bir Archer oluşturun

  // TODO: toString() kullanarak her karakteri yazdırın

  // TODO: Savaş dizisini simüle edin:
  // 1. Thorin'in saldırı mesajını yazdırın
  // 2. Gandalf 30 hasar alır
  // 3. Gandalf "Healing Light" büyüsü yapar (25 mana harcar)
  // 4. Gandalf 20 HP iyileşir
  // 5. Gandalf'ın saldırı mesajını yazdırın
  // 6. Thorin 40 hasar alır
  // 7. Legolas'ın saldırı mesajını yazdırın
  // 8. Her karakterin hayatta olup olmadığını yazdırın: "name alive: true/false"
}

Nesne Yönelimli Programlama bölümündeki tüm dersler