fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. class player_character {
  6. std::string name;
  7. int dex, max_hp, exp, lvl;
  8. public:
  9. player_character() =default;
  10. player_character(const player_character&) =default;
  11. player_character& operator=(const player_character&)=default;
  12.  
  13. player_character(std::string name_,
  14. int dex_, int max_hp_,
  15. int exp_, int lvl_)
  16. : name { std::move(name_) }
  17. , dex { dex_ }
  18. , max_hp { max_hp_ }
  19. , exp { exp_ }
  20. , lvl { lvl_ }
  21. { }
  22.  
  23.  
  24.  
  25. const std::string get_name() const { return name; }
  26.  
  27. friend std::ostream& operator<<(std::ostream& os, const player_character& pc) {
  28. return os << "Character: " << pc.name << '\n'
  29. << "Dexterity: " << pc.dex << '\n'
  30. << "Max Health: " << pc.max_hp << '\n'
  31. << "Experience: " << pc.exp << '\n'
  32. << "level: " << pc.lvl << '\n';
  33. }
  34. };
  35.  
  36. player_character menu_select_player() {
  37. //populate with other default characters
  38. const std::vector<player_character> default_ctypes {
  39. { "warrior", 8, 5, 3, 5 }
  40. };
  41.  
  42. for(std::size_t i=0u; i!=default_ctypes.size(); ++i) {
  43. std::cout << i << ". " << default_ctypes[i].get_name() << '\n';
  44. }
  45.  
  46. std::size_t input;
  47. do {
  48. std::cout << "Please select an character by number: "; //implict flush on stdio tie
  49. std::cin >> input;
  50. } while(std::cin.fail() || input >= default_ctypes.size());
  51.  
  52. return default_ctypes[input];
  53. }
  54.  
  55. int main() {
  56. auto player=menu_select_player();
  57. std::cout << player << '\n';
  58. }
Success #stdin #stdout 0s 3036KB
stdin
Standard input is empty
stdout
0. warrior
Please select an character by number: Character:  warrior
Dexterity:  8
Max Health: 5
Experience: 3
level:      5