// projects.cpp-language
10 Best C++ Projects
Hand-picked and ordered easiest → hardest — each with complete code and expected output. Build these to turn lessons into a portfolio.
Back to C++ course
// solution.code
c++
// Text-Based RPG Character Management System
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
// Base Character class
class Character {
protected:
string name;
int health, strength, defense;
public:
Character(string n, int h, int s, int d) : name(n), health(h), strength(s), defense(d) {}
virtual void display() {
cout << "Name: " << name << " | HP: " << health << " | STR: " << strength << " | DEF: " << defense << endl;
}
virtual string getType() { return "Character"; }
void saveToFile(ofstream &out) {
out << getType() << "," << name << "," << health << "," << strength << "," << defense << endl;
}
string getName() { return name; }
};
// Warrior class with equipment
class Warrior : public Character {
string weapon;
public:
Warrior(string n, int h, int s, int d, string w) : Character(n, h, s, d), weapon(w) {}
void display() override {
cout << "[WARRIOR] ";
Character::display();
cout << " Weapon: " << weapon << endl;
}
string getType() override { return "Warrior"; }
};
// Mage class with spell
class Mage : public Character {
int mana;
public:
Mage(string n, int h, int s, int d, int m) : Character(n, h, s, d), mana(m) {}
void display() override {
cout << "[MAGE] ";
Character::display();
cout << " Mana: " << mana << endl;
}
string getType() override { return "Mage"; }
};
int main() {
vector<Character*> party;
// Create characters
party.push_back(new Warrior("Thorin", 150, 25, 20, "Battle Axe"));
party.push_back(new Mage("Gandor", 80, 10, 8, 200));
party.push_back(new Warrior("Aragorn", 130, 22, 18, "Longsword"));
// Display party
cout << "=== RPG Party Roster ===" << endl;
for (auto character : party) {
character->display();
cout << endl;
}
// Save to file
ofstream outFile("party.txt");
for (auto character : party) {
character->saveToFile(outFile);
}
outFile.close();
cout << "Party saved to party.txt" << endl;
// Cleanup
for (auto character : party) delete character;
return 0;
} output
=== RPG Party Roster === [WARRIOR] Name: Thorin | HP: 150 | STR: 25 | DEF: 20 Weapon: Battle Axe [MAGE] Name: Gandor | HP: 80 | STR: 10 | DEF: 8 Mana: 200 [WARRIOR] Name: Aragorn | HP: 130 | STR: 22 | DEF: 18 Weapon: Longsword Party saved to party.txt
