#include #include #include #include #include #include class Item { public: std::string name; std::string type; int value; Item(std::string name, std::string type, int value) : name(name), type(type), value(value) {} }; class Character { public: std::string name; int level; int hitPoints; int manaPoints; std::vector inventory; Character(std::string name, int level, int hitPoints, int manaPoints) : name(name), level(level), hitPoints(hitPoints), manaPoints(manaPoints) {} void addItem(const Item& item) { inventory.push_back(item); } Item* getWeapon() { for (auto& item : inventory) { if (item.type == "Weapon") { return &item; } } return nullptr; // No weapon found } }; class Monster : public Character { public: int strength; int speed; Monster(std::string name, int level, int hitPoints, int manaPoints, int strength, int speed) : Character(name, level, hitPoints, manaPoints), strength(strength), speed(speed) {} }; class Game { public: std::vector characters; std::vector monsters; void createCharacter(std::string name, int level, int hitPoints, int manaPoints) { characters.emplace_back(name, level, hitPoints, manaPoints); } void createMonster(std::string name, int level, int hitPoints, int manaPoints, int strength, int speed) { monsters.emplace_back(name, level, hitPoints, manaPoints, strength, speed); } void fight(Character& character, Monster& monster) { std::cout << "Walka rozpoczyna się między " << character.name << " a " << monster.name << std::endl; std::cout << character.name << " HP: " << character.hitPoints << ", " << monster.name << " HP: " << monster.hitPoints << std::endl; srand(time(0)); // Initialize random seed while (character.hitPoints > 0 && monster.hitPoints > 0) { Item* weapon = character.getWeapon(); std::string weaponName = weapon ? weapon->name : "gołe pięści"; int characterDamage = std::max(0, (character.level * 3 + rand() % 10) - monster.speed); monster.hitPoints = std::max(0, monster.hitPoints - characterDamage); std::cout << character.name << " atakuje " << monster.name << " używając " << weaponName << ", zadaje " << characterDamage << " obrażeń. HP potwora: " << monster.hitPoints << std::endl; if (monster.hitPoints > 0) { int monsterDamage = std::max(0, (monster.strength * 2 + rand() % 10) - character.level * 2); character.hitPoints = std::max(0, character.hitPoints - monsterDamage); std::cout << monster.name << " atakuje " << character.name << ", zadaje " << monsterDamage << " obrażeń. HP bohatera: " << character.hitPoints << std::endl; } } if (character.hitPoints > 0) { std::cout << character.name << " wygrywa walkę." << std::endl; } else { std::cout << monster.name << " wygrywa walkę." << std::endl; } } }; int main() { Game rpgGame; rpgGame.createCharacter("Hero", 5, 100, 30); rpgGame.createMonster("Goblin", 3, 50, 10, 20, 15); rpgGame.characters[0].addItem(Item("Miecz", "Weapon", 10)); rpgGame.fight(rpgGame.characters[0], rpgGame.monsters[0]); return 0; }