<-Back

RPG — що це таке?

Коротка довідка для учнів 11-го класу. Пояснення, приклади, зв'язок із патерном Strategy.

RPG (Role-Playing Game) — жанр гри, у якому гравець керує персонажем, розвиває його характеристики, виконує завдання і приймає рішення, що впливають на сюжет та результати бою.

У нашому прикладі RPG — це спрощена модель бою: персонажі мають HP, можуть обирати стратегії атаки (меч, магія, лук) і завдавати шкоди. Це зручна навчальна симуляція для демонстрації патерна Strategy.

Основні ознаки 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 без змін у ньому.

Ідеї:

  1. Додати нову стратегію «Fireball» з шансом підпалити ворога (доп. пошкодження в наступному раунді).
  2. Зробити меню, де гравець може міняти стратегію під час бою.
  3. Додати броню (DamageReduction) та критичні удари.
  4. Реалізувати кілька ворогів та чергу дій (turn-based).
  5. Підрахунок досвіду та підвищення рівня (level up) з покращенням стратегій.
  6. Графічний інтерфейс на Windows Forms або простий веб-інтерфейс для демонстрації.

Швидка демо-інтеракція

Натисніть кнопки, щоб симулювати один хід — герої атакують один одного.
Герой 1
Герой 2