Menu
Coddy logo textTech

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.

challenge icon

Défi

Facile

Construisons 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 abstraite Character qui sert de fondation pour tous les types de personnages. Chaque personnage possède un name (String), un _health privé (int), un attackPower (int) et un defense (int). Incluez un getter pour la santé et ces méthodes :
    • takeDamage(int damage) - réduit la santé de damage - defense (minimum 1 de dégât subi, la santé ne peut pas descendre en dessous de 0). Affiche name takes X damage! Health: Y
    • bool 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
    Surchargez toString() pour retourner name [Class] - HP: health, ATK: attackPower, DEF: defense où Class provient de runtimeType.
  • abilities.dart : Créez deux mixins qui fournissent des capacités spéciales :
    • CanHeal - fournit une méthode heal(int amount). Comme les mixins ne peuvent pas accéder directement aux champs privés, ce mixin doit définir une méthode abstraite void restoreHealth(int amount) que la classe du personnage implémente. La méthode heal() appelle restoreHealth(amount) et affiche name heals for amount HP!
    • CanCastSpells - fournit int mana (par défaut à 100) et une méthode castSpell(String spellName, int manaCost) qui réduit le mana si suffisant, affiche name casts spellName!, et retourne true. Si le mana est insuffisant, affiche Not enough mana! et retourne false.
  • warrior.dart : Créez une classe Warrior étendant Character. 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émentez attack() pour retourner name swings a mighty sword!
  • mage.dart : Créez une classe Mage étendant Character et utilisant les mixins CanCastSpells et CanHeal. Les mages sont fragiles mais puissants. Initialisez avec 80 de santé, 35 de puissance d'attaque et 5 de défense. Implémentez attack() pour retourner name hurls a fireball!. Implémentez restoreHealth(int amount) pour augmenter la santé (plafonnée à 80).
  • archer.dart : Créez une classe Archer étendant Character. Les archers sont des combattants équilibrés. Initialisez avec 100 de santé, 25 de puissance d'attaque et 10 de défense. Implémentez attack() pour retourner name 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 utilisant toString(). Ensuite, simulez une séquence de combat :
    1. Affichez le message d'attaque de Thorin
    2. Gandalf subit 30 de dégâts
    3. Gandalf lance Healing Light (coûte 25 mana)
    4. Gandalf se soigne de 20 HP
    5. Affichez le message d'attaque de Gandalf
    6. Thorin subit 40 de dégâts
    7. Affichez le message d'attaque de Legolas
    8. 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: true

Essayez 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