#include #include #include #include #include #include #include #include #include using namespace std; struct stats { string name; int lvl; int hp; int xp; }; bool mycompare(const stats& a, const stats& b) { return a.lvl > b.lvl; } unsigned seed = chrono::system_clock::now().time_since_epoch().count(); default_random_engine engine {seed}; uniform_int_distribution distribution {0, 999}; auto r {bind(distribution, engine)}; void list(vector& players); void tourney(vector& players); void train(vector& players); void battle(vector& players, size_t y, size_t z); void xpCheck(vector& players, size_t y, size_t z); int main() { const string nameBank[] { "pa63", "kab33", "fdb4", "mb341", "jc208", "scortes9", "mrd22", "lee2", "rfrancolini1", "eh141", "mh182", "ljl8", "jmanu4", "jmm56", "aco8", "is49", "els13", "jt88", "mjt6", "ju13", "lov", "kwesner1", "rz54", "mmeretzky" }; vector players; size_t n {size(nameBank)}; for (int i {0}; i < n; ++i) { stats s; s.name = nm; s.lvl =1; s.hp = r() % 50 + 100 + (s.lvl * 25); s.xp = 0; players.push_back(s); }; list(players); for (;;) { cout << "Would you like to\n"; cout << "1. Start a tournament\n"; cout << "2. Train a player\n"; cout << "3. Random battle\n"; cout << "4. Leaderboard\n"; int task {0}; cin >> task; if (!cin) { cerr << "Sorry, Please select 1, 2, 3, or 4 and press enter.\n"; cin.clear(); const streamsize n {numeric_limits::max()}; cin.ignore(n, '\n'); cout << "Try again: "; continue; } if (task == 1) { tourney(players); } else if (task == 2) { cout << "Which player would you like to train?\n"; string trainer; cin >> trainer; train(players); } else if (task == 3) { const size_t y {r() % players.size()}; size_t z {r() % players.size()}; while (y == z) { z = r() % players.size(); } battle(players, y, z); } else if (task == 4) { list(players); } else { cerr << "Sorry, something went wrong.\n"; return EXIT_FAILURE; } } return EXIT_SUCCESS; } void list(vector& players) { sort(players.begin(), players.end(), mycompare); for (const auto &p : players) { cout << left << "Player: " << setw(12) << left << p.name << ". Level: "; cout << setw (6) << right << p.lvl << ". HP: "; cout << setw (6) << right << p.hp << ". XP: "; cout << setw (6) << right << p.xp << ".\n"; } } void tourney(vector& players) { cout << "Under Construction\n"; cout << "\n==== BEGIN TOURNAMENT ====\n"; cout << "There are " << n << " participants who will compete through rounds.\n"; } void train(vector& players) { cout << "Pending\n"; } void battle(vector& players, size_t y, size_t z) { int tempHPy {0}; int tempHPz {0}; int rounds {0}; const size_t e {500 + (r() % 250)}; tempHPy = players[y].hp; tempHPz = players[z].hp; while (tempHPy > 0 && tempHPz > 0) { tempHPz -= (players[y].lvl * 15 + (r() % (players[y].lvl * 15))); tempHPy -= (players[z].lvl * 15 + (r() % (players[z].lvl * 15))); ++rounds; } if (tempHPy <= 0 && tempHPz <= 0){ cout << "It's a tie. " << e << " XP points will be divided evenly between " << players[y].name << " and " << players[z].name << "\n"; players[y].xp += (e/2); players[z].xp += (e/2); } else if (tempHPy <= 0){ cout << players[z].name << " has won!\n"; cout << "After " << rounds << " rounds of combat, " << players[z].name << " has defeated " << players[y].name << " and gained " << e << " xp.\n"; players[z].xp += e; } else{ cout << players[y].name << " has won!\n"; cout << "After " << rounds << " rounds of combat, " << players[y].name << " has defeated " << players[z].name << " and gained " << e << " xp.\n"; players[y].xp += e; } xpCheck(players, y, z); } void xpCheck(vector& players, size_t y, size_t z) { if (players[y].xp > (players[y].lvl * 1.25 * 1000)) { players[y].lvl += 1; players[y].hp += (r() % 50 + 25); cout << players[y].name << " has leveled up!\n"; } if (players[z].xp > (players[z].lvl * 1.25 * 1000)) { players[z].lvl += 1; players[z].hp += (r() % 50 + 25); cout << players[z].name << " has leveled up!\n"; } }