#include #include #include #include #include #include #include #include #include using namespace std; struct stats { string name; int lvl; int hp; int xp; }; bool mycompare(stats& a, 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(stats *p, size_t n); void tourney(stats *p, size_t n); void train(stats *p, size_t n); void battle(stats *p, size_t n, size_t y, size_t z); void xpCheck(stats *p, size_t n, 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" }; const size_t n {size(nameBank)}; stats a[n]; for ( int i {0}; i < n; ++i){ a[i].name = nameBank[i]; a[i].lvl = 1; a[i].hp = r() % 50 + 100 + (a[i].lvl * 25); a[i].xp = 0; }; list(a, n); 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(a, n); } else if (task == 2) { cout << "Which player would you like to train?\n"; string trainer; cin >> trainer; train(a, n); } else if (task == 3) { const size_t y {r() % n}; size_t z {r() % n}; while (y == z) { z = r() % n; } battle(a, n, y, z); } else if (task == 4) { list(a, n); } else { cerr << "Sorry, something went wrong.\n"; return EXIT_FAILURE; } } return EXIT_SUCCESS; } void list(stats *p, size_t n) { sort(p, p+n, mycompare); for (int i {0}; i < n; ++i) { cout << left << "Player: " << setw(12) << left << p[i].name << ". Level: "; cout << setw (6) << right << p[i].lvl << ". HP: "; cout << setw (6) << right << p[i].hp << ". XP: "; cout << setw (6) << right << p[i].xp << ".\n"; } } void tourney(stats *p, size_t n) { cout << "Under Construction\n"; cout << "\n==== BEGIN TOURNAMENT ====\n"; cout << "There are " << n << " participants who will compete through rounds.\n"; } void train(stats *p, size_t n) { cout << "Pending\n"; } void battle(stats *p, size_t n, size_t y, size_t z) { int tempHPy {0}; int tempHPz {0}; int rounds {0}; const size_t e {500 + (r() % 250)}; tempHPy = p[y].hp; tempHPz = p[z].hp; while (tempHPy > 0 && tempHPz > 0) { tempHPz -= (p[y].lvl * 15 + (r() % (p[y].lvl * 15))); tempHPy -= (p[z].lvl * 15 + (r() % (p[z].lvl * 15))); ++rounds; } if (tempHPy <= 0 && tempHPz <= 0){ cout << "It's a tie. " << e << " XP points will be divided evenly between " << p[y].name << " and " << p[z].name << "\n"; p[y].xp += (e/2); p[z].xp += (e/2); } else if (tempHPy <= 0){ cout << p[z].name << " has won!\n"; cout << "After " << rounds << " rounds of combat, " << p[z].name << " has defeated " << p[y].name << " and gained " << e << " xp.\n"; p[z].xp += e; } else{ cout << p[y].name << " has won!\n"; cout << "After " << rounds << " rounds of combat, " << p[y].name << " has defeated " << p[z].name << " and gained " << e << " xp.\n"; p[y].xp += e; } xpCheck(p, n, y, z); } void xpCheck(stats *p, size_t n, size_t y, size_t z) { if (p[y].xp > (p[y].lvl * 1.25 * 1000)) { p[y].lvl += 1; p[y].hp += (r() % 50 + 25); cout << p[y].name << " has leveled up!\n"; } if (p[z].xp > (p[z].lvl * 1.25 * 1000)) { p[z].lvl += 1; p[z].hp += (r() % 50 + 25); cout << p[z].name << " has leveled up!\n"; } }