# Unit 6 – Basic Practice: GameCharacter, Warrior, Mage

In this role-playing game, every character has a name and hit points — 
but warriors also carry an armour rating and mages carry a mana pool. 
Build the class hierarchy that models this and gives each character type 
its own way of reporting its current state.

## Instructions

### GameCharacter

1. Two methods need to be replaceable by subclasses — which keyword 
   enables this, and which methods need it?

### Warrior

2. `Warrior` is a `GameCharacter` — what does it add, and should that 
   value be changeable?
3. Give the warrior its own role name.
4. Give the warrior its own status line, appending the armour rating to 
   the shared part. Expected format: 
   `"Warrior: Thor — HP 100/100, Armour: 15"`.

### Mage

5. `Mage` is also a `GameCharacter` — what extra value does a mage carry, 
   and should it ever change?
6. Give the mage its own role name.
7. Give the mage its own status line, appending the mana to the shared 
   part. Expected format: `"Mage: Merlin — HP 80/80, Mana: 50"`.

### Testing

1. Create `Warrior("Thor", 100, 15)` and call `status()` — expect role, 
   HP, and armour.
2. Create `Mage("Merlin", 80, 50)` and call `status()` — expect role, 
   HP, and mana.
3. Create a plain `GameCharacter("Alex", 70)` and call `status()` — no 
   extra detail.
4. Call `role()` on each — the same method, three different answers.
