Menu
Coddy logo textTech

Oyun Karakteri 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 tüm OOP kavramlarını bir araya getiren bir Oyun Karakteri Sistemi oluşturalım! Benzersiz yeteneklere, istatistiklere ve savaş mekaniklerine sahip farklı karakter sınıfları oluşturacak, karakterlerin gerçek bir oyunda nasıl çalışabileceğini modelleyeceksin.

Sistemin altı dosyaya ayrılacak:

  • character.dart: Tüm karakter türlerinin temelini oluşturan soyut bir Character sınıfı oluştur. Her karakterin bir name (String), private _health (int), attackPower (int) ve defense (int) değeri vardır. health için bir getter ve şu metotları ekle:
    • takeDamage(int damage) - health değerini damage - defense kadar azaltır (alınan minimum hasar 1'dir, health 0'ın altına inemez). name takes X damage! Health: Y yazdırır.
    • bool isAlive() - health 0'dan büyükse true döndürür.
    • Alt sınıfların kendilerine özgü saldırı tarzları için uygulayacağı soyut bir String attack() metodu.
    toString() metodunu, name [Class] - HP: health, ATK: attackPower, DEF: defense üzerinden gelen Class ile runtimeType döndürecek şekilde override et.
  • abilities.dart: Özel yetenekler sağlayan iki mixin oluştur:
    • CanHeal - bir heal(int amount) metodu sağlar. Mixin'ler private alanlara doğrudan erişemediğinden, bu mixin karakter sınıfının uygulayacağı soyut bir void restoreHealth(int amount) tanımlamalıdır. heal() metodu restoreHealth(amount) çağrısını yapar ve name heals for amount HP! yazdırır.
    • CanCastSpells - (varsayılanı 100 olan) int mana değerini ve yeterli mana varsa manayı azaltan, castSpell(String spellName, int manaCost) yazdıran ve true döndüren bir name casts spellName! metodu sağlar. Mana yetersizse Not enough mana! yazdırır ve false döndürür.
  • warrior.dart: Warrior sınıfını genişleten bir Character sınıfı oluştur. Warrior'lar yüksek savunmaya sahip tanklardır. 150 health, 20 attack power ve 15 defense ile başlat. attack() metodunu name swings a mighty sword! döndürecek şekilde uygula.
  • mage.dart: Mage sınıfını genişleten ve Character ile CanCastSpells mixin'lerini kullanan bir CanHeal sınıfı oluştur. Mage'ler kırılgandır ancak güçlüdür. 80 health, 35 attack power ve 5 defense ile başlat. attack() metodunu name hurls a fireball! döndürecek şekilde uygula. health değerini (80 ile sınırlandırarak) artıracak restoreHealth(int amount) metodunu uygula.
  • archer.dart: Archer sınıfını genişleten bir Character sınıfı oluştur. Archer'lar dengeli savaşçılardır. 100 health, 25 attack power ve 10 defense ile başlat. attack() metodunu name fires a precise arrow! döndürecek şekilde uygula.
  • main.dart: Her karakter türünden bir tane oluşturarak karakter sistemini göster: Thorin adlı bir Warrior, Gandalf adlı bir Mage ve Legolas adlı bir Archer. Her karakteri toString() kullanarak yazdır. Ardından bir savaş dizisini simüle et:
    1. Thorin'in saldırı mesajını yazdır.
    2. Gandalf 30 hasar alır.
    3. Gandalf Healing Light büyüsünü yapar (mana maliyeti 25).
    4. Gandalf 20 HP iyileşir.
    5. Gandalf'ın saldırı mesajını yazdır.
    6. Thorin 40 hasar alır.
    7. Legolas'ın saldırı mesajını yazdır.
    8. Her karakterin hayatta olup olmadığını şu formatta yazdır: 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

Kendi başına pratik yap: Online Dart derleyicisi