Основні ознаки RPG
- Персонажі з характеристиками (HP, сила, швидкість).
- Система бою — покрокова або в реальному часі.
- Розвиток персонажа — прокачування навичок, екіпірування.
- Сюжет і квести — завдання, NPC, рішення гравця.
Класи в проєкті (що за що відповідає)
| Клас | Роль / пояснення |
|---|---|
| IAttackStrategy | Інтерфейс стратегії атаки. Описує метод(и) для виконання атаки (наприклад, Attack()), який реалізують конкретні стратегії. |
| SwordAttack | Конкретна стратегія: фізична атака мечем (генерує шкоду, шанс критичного удару, може викликати ефекти). |
| MagicAttack | Конкретна стратегія: магічна атака (інша шкода, може мати вибух та інші візуальні/звукові ефекти). |
| BowAttack | Конкретна стратегія: далекобійна атака луком (точний удар, середня шкода). |
| GameCharacter (або Character) | Context — герой. Має ім'я, HP та посилання на поточну стратегію. Викликає стратегію при атаці. |
| Program | Головна програма/логіка гри: створює персонажів, дозволяє вибирати стратегії, запускає цикл бою. |
Короткий приклад коду (C#) з коментарями
// Інтерфейс — описує «контракт» для усіх стратегій
public interface IAttackStrategy
{
// Повертає кількість завданої шкоди
int Attack(string attackerName);
}
// Меч — конкретна стратегія
public class SwordAttack : IAttackStrategy
{
public int Attack(string attackerName)
{
// випадкова шкода від 15 до 25
int damage = new Random().Next(15, 26);
Console.WriteLine($"{attackerName} атакує мечем і завдає {damage} шкоди.");
return damage;
}
}
// Контекст — персонаж
public class GameCharacter
{
private IAttackStrategy strategy; // поточна стратегія (міксується)
public string Name { get; }
public int HP { get; set; } = 100;
public GameCharacter(string name, IAttackStrategy strategy)
{
Name = name;
this.strategy = strategy;
}
// Змінити стратегію в процесі гри
public void SetStrategy(IAttackStrategy newStrategy)
{
strategy = newStrategy;
}
// Виконує атаку за поточною стратегією
public void Attack(GameCharacter target)
{
int dmg = strategy.Attack(Name);
target.HP -= dmg;
}
}
Пояснення коду (коротко)
GameCharacter не знає деталей реалізації атаки — лише викликає метод інтерфейсу. Це і є суть патерна Strategy: замінюючи об’єкт-стратегію, ми міняємо поведінку Context без змін у ньому.
Ідеї:
- Додати нову стратегію «Fireball» з шансом підпалити ворога (доп. пошкодження в наступному раунді).
- Зробити меню, де гравець може міняти стратегію під час бою.
- Додати броню (DamageReduction) та критичні удари.
- Реалізувати кілька ворогів та чергу дій (turn-based).
- Підрахунок досвіду та підвищення рівня (level up) з покращенням стратегій.
- Графічний інтерфейс на Windows Forms або простий веб-інтерфейс для демонстрації.
Швидка демо-інтеракція
Натисніть кнопки, щоб симулювати один хід — герої атакують один одного.
Герой 1
Герой 2