Système de personnages de jeu
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 109 sur 110.
Défi
FacileConstruisons un système de personnages de jeu qui rassemble tous les concepts de la POO que vous avez maîtrisés ! Vous allez créer différentes classes de personnages avec des capacités, des statistiques et des mécaniques de combat uniques - en modélisant le fonctionnement des personnages dans un vrai jeu.
Votre système sera organisé sur six fichiers :
character.dart: Créez une classe abstraiteCharacterqui sert de fondation pour tous les types de personnages. Chaque personnage possède unname(String), un_healthprivé (int), unattackPower(int) et undefense(int). Incluez un getter pour la santé et ces méthodes :takeDamage(int damage)- réduit la santé dedamage - defense(minimum 1 de dégât subi, la santé ne peut pas descendre en dessous de 0). Affichename takes X damage! Health: Ybool isAlive()- retourne true si la santé est supérieure à 0- Une méthode abstraite
String attack()que les sous-classes implémentent pour leur style d'attaque unique
toString()pour retournername [Class] - HP: health, ATK: attackPower, DEF: defenseoù Class provient deruntimeType.abilities.dart: Créez deux mixins qui fournissent des capacités spéciales :CanHeal- fournit une méthodeheal(int amount). Comme les mixins ne peuvent pas accéder directement aux champs privés, ce mixin doit définir une méthode abstraitevoid restoreHealth(int amount)que la classe du personnage implémente. La méthodeheal()appellerestoreHealth(amount)et affichename heals for amount HP!CanCastSpells- fournitint mana(par défaut à 100) et une méthodecastSpell(String spellName, int manaCost)qui réduit le mana si suffisant, affichename casts spellName!, et retourne true. Si le mana est insuffisant, afficheNot enough mana!et retourne false.
warrior.dart: Créez une classeWarriorétendantCharacter. Les guerriers sont des tanks avec une défense élevée. Initialisez avec 150 de santé, 20 de puissance d'attaque et 15 de défense. Implémentezattack()pour retournername swings a mighty sword!mage.dart: Créez une classeMageétendantCharacteret utilisant les mixinsCanCastSpellsetCanHeal. Les mages sont fragiles mais puissants. Initialisez avec 80 de santé, 35 de puissance d'attaque et 5 de défense. Implémentezattack()pour retournername hurls a fireball!. ImplémentezrestoreHealth(int amount)pour augmenter la santé (plafonnée à 80).archer.dart: Créez une classeArcherétendantCharacter. Les archers sont des combattants équilibrés. Initialisez avec 100 de santé, 25 de puissance d'attaque et 10 de défense. Implémentezattack()pour retournername fires a precise arrow!main.dart: Démontrez votre système de personnages en créant un personnage de chaque type : un Warrior nomméThorin, un Mage nomméGandalf, et un Archer nomméLegolas. Affichez chaque personnage en utilisanttoString(). Ensuite, simulez une séquence de combat :- Affichez le message d'attaque de Thorin
- Gandalf subit 30 de dégâts
- Gandalf lance
Healing Light(coûte 25 mana) - Gandalf se soigne de 20 HP
- Affichez le message d'attaque de Gandalf
- Thorin subit 40 de dégâts
- Affichez le message d'attaque de Legolas
- Affichez si chaque personnage est vivant au format :
name alive: true/false
Sortie attendue :
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: trueEssayez vous-même
import 'warrior.dart';
import 'mage.dart';
import 'archer.dart';
void main() {
// TODO: Créer un Warrior nommé "Thorin"
// TODO: Créer un Mage nommé "Gandalf"
// TODO: Créer un Archer nommé "Legolas"
// TODO: Afficher chaque personnage en utilisant toString()
// TODO: Simuler la séquence de combat :
// 1. Afficher le message d'attaque de Thorin
// 2. Gandalf subit 30 points de dégâts
// 3. Gandalf lance "Healing Light" (coûte 25 mana)
// 4. Gandalf se soigne de 20 HP
// 5. Afficher le message d'attaque de Gandalf
// 6. Thorin subit 40 points de dégâts
// 7. Afficher le message d'attaque de Legolas
// 8. Afficher si chaque personnage est en vie : "name alive: true/false"
}
Toutes les leçons de Programmation Orientée Objet
1Les bases de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesVariables d'instanceBases des constructeursRécapitulatif - Calculatrice simple4Null Safety
Introduction à la Null SafetyNullable vs Non-NullableLes opérateurs ? et !Le mot-clé late et la Null SafetyLes opérateurs Null-AwareLa Null Safety dans les classesRécapitulatif - Système de profil utilisateur7Classes abstraites et Interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémentation vs ExtensionInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et Génériques
Aperçu des List, Set et MapCollections Type-SafeClasses génériquesMéthodes génériquesContraintes de généricitéIterable & IteratorRécapitulatif - Stockage générique2Les constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs de redirectionRécapitulatif - Shape Builder5Encapsulation
Membres publics vs privésLa convention du préfixe _Visibilité au niveau de la bibliothèqueApprofondissement des Getters & SettersMasquage d'informationsRécapitulatif - Dossiers d'étudiants8Mixins
Introduction aux MixinsCréation de MixinsUtilisation de plusieurs MixinsLe mot-clé on dans les MixinsMixin vs HéritageMixin vs InterfaceRécapitulatif - Système Animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode & ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie17Défis finaux
Plateforme d'E-LearningSystème bancaireSystème de personnages de jeuService de location de véhicules3Propriétés de classe
Membres d'instance vs statiquesChamps Final & ConstVariables LateMéthodes et champs statiquesGetters et SettersRécapitulatif - Gestionnaire de compte bancaire6Héritage
Bases de l'héritageLe mot-clé superRedéfinition de méthodeL'annotation @overrideLe mot-clé final pour les classesConstructeurs et héritageRécapitulatif - Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification de type à l'exécutionLes opérateurs is & asMot-clé covariantRécapitulatif - Processeur de paiement12POO Asynchrone
Futures & async/awaitBases des StreamsStream ControllersConstructeurs asynchronesL'asynchrone dans les méthodes de classeRécapitulatif - Data Fetcher15Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository