Turning Learners Into Developers
Codekilla
CODEKILLA
// 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