Oyun Karakteri Sistemi
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 109 / 110.
Görev
KolayUstalaş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 birCharactersınıfı oluştur. Her karakterin birname(String), private_health(int),attackPower(int) vedefense(int) değeri vardır. health için bir getter ve şu metotları ekle:takeDamage(int damage)- health değerinidamage - defensekadar azaltır (alınan minimum hasar 1'dir, health 0'ın altına inemez).name takes X damage! Health: Yyazdı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 ileruntimeTypedöndürecek şekilde override et.abilities.dart: Özel yetenekler sağlayan iki mixin oluştur:CanHeal- birheal(int amount)metodu sağlar. Mixin'ler private alanlara doğrudan erişemediğinden, bu mixin karakter sınıfının uygulayacağı soyut birvoid restoreHealth(int amount)tanımlamalıdır.heal()metodurestoreHealth(amount)çağrısını yapar vename heals for amount HP!yazdırır.CanCastSpells- (varsayılanı 100 olan)int manadeğerini ve yeterli mana varsa manayı azaltan,castSpell(String spellName, int manaCost)yazdıran ve true döndüren birname casts spellName!metodu sağlar. Mana yetersizseNot enough mana!yazdırır ve false döndürür.
warrior.dart:Warriorsınıfını genişleten birCharactersınıfı oluştur. Warrior'lar yüksek savunmaya sahip tanklardır. 150 health, 20 attack power ve 15 defense ile başlat.attack()metodununame swings a mighty sword!döndürecek şekilde uygula.mage.dart:Magesınıfını genişleten veCharacterileCanCastSpellsmixin'lerini kullanan birCanHealsı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()metodununame hurls a fireball!döndürecek şekilde uygula. health değerini (80 ile sınırlandırarak) artıracakrestoreHealth(int amount)metodunu uygula.archer.dart:Archersınıfını genişleten birCharactersınıfı oluştur. Archer'lar dengeli savaşçılardır. 100 health, 25 attack power ve 10 defense ile başlat.attack()metodununame fires a precise arrow!döndürecek şekilde uygula.main.dart: Her karakter türünden bir tane oluşturarak karakter sistemini göster:Thorinadlı bir Warrior,Gandalfadlı bir Mage veLegolasadlı bir Archer. Her karakteritoString()kullanarak yazdır. Ardından bir savaş dizisini simüle et:- Thorin'in saldırı mesajını yazdır.
- Gandalf 30 hasar alır.
- Gandalf
Healing Lightbüyüsünü yapar (mana maliyeti 25). - Gandalf 20 HP iyileşir.
- Gandalf'ın saldırı mesajını yazdır.
- Thorin 40 hasar alır.
- Legolas'ın saldırı mesajını yazdır.
- 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: trueKendin 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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi