#include <iostream>
#include <vector>
#include <string>
class player_character {
std::string name;
int dex, max_hp, exp, lvl;
public:
player_character() =default;
player_character(const player_character&) =default;
player_character& operator=(const player_character&)=default;
player_character(std::string name_,
int dex_, int max_hp_,
int exp_, int lvl_)
: name { std::move(name_) }
, dex { dex_ }
, max_hp { max_hp_ }
, exp { exp_ }
, lvl { lvl_ }
{ }
const std::string get_name() const { return name; }
friend std::ostream& operator<<(std::ostream& os, const player_character& pc) {
return os << "Character: " << pc.name << '\n'
<< "Dexterity: " << pc.dex << '\n'
<< "Max Health: " << pc.max_hp << '\n'
<< "Experience: " << pc.exp << '\n'
<< "level: " << pc.lvl << '\n';
}
};
player_character menu_select_player() {
//populate with other default characters
const std::vector<player_character> default_ctypes {
{ "warrior", 8, 5, 3, 5 }
};
for(std::size_t i=0u; i!=default_ctypes.size(); ++i) {
std::cout << i << ". " << default_ctypes[i].get_name() << '\n';
}
std::size_t input;
do {
std::cout << "Please select an character by number: "; //implict flush on stdio tie
std::cin >> input;
} while(std::cin.fail() || input >= default_ctypes.size());
return default_ctypes[input];
}
int main() {
auto player=menu_select_player();
std::cout << player << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgoKY2xhc3MgcGxheWVyX2NoYXJhY3RlciB7CiAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgaW50IGRleCwgbWF4X2hwLCBleHAsIGx2bDsKcHVibGljOgogICAgcGxheWVyX2NoYXJhY3RlcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID1kZWZhdWx0OwogICAgcGxheWVyX2NoYXJhY3Rlcihjb25zdCBwbGF5ZXJfY2hhcmFjdGVyJikgICAgICAgICAgID1kZWZhdWx0OwogICAgcGxheWVyX2NoYXJhY3RlciYgb3BlcmF0b3I9KGNvbnN0IHBsYXllcl9jaGFyYWN0ZXImKT1kZWZhdWx0OwogICAgCiAgICBwbGF5ZXJfY2hhcmFjdGVyKHN0ZDo6c3RyaW5nIG5hbWVfLAogICAgICAgICAgICAgICAgICAgICBpbnQgZGV4XywgaW50IG1heF9ocF8sCiAgICAgICAgICAgICAgICAgICAgIGludCBleHBfLCBpbnQgbHZsXykKICAgIDogICBuYW1lICAgeyBzdGQ6Om1vdmUobmFtZV8pIH0KICAgICwgICBkZXggICAgeyBkZXhfICAgICAgICAgICAgIH0KICAgICwgICBtYXhfaHAgeyBtYXhfaHBfICAgICAgICAgIH0KICAgICwgICBleHAgICAgeyBleHBfICAgICAgICAgICAgIH0KICAgICwgICBsdmwgICAgeyBsdmxfICAgICAgICAgICAgIH0KICAgIHsgICB9CgoKCiAgICBjb25zdCBzdGQ6OnN0cmluZyBnZXRfbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KCiAgICBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IHBsYXllcl9jaGFyYWN0ZXImIHBjKSB7CiAgICAgICAgcmV0dXJuIG9zIDw8ICJDaGFyYWN0ZXI6ICAiIDw8IHBjLm5hbWUgICA8PCAnXG4nCiAgICAgICAgICAgICAgICAgIDw8ICJEZXh0ZXJpdHk6ICAiIDw8IHBjLmRleCAgICA8PCAnXG4nCiAgICAgICAgICAgICAgICAgIDw8ICJNYXggSGVhbHRoOiAiIDw8IHBjLm1heF9ocCA8PCAnXG4nCiAgICAgICAgICAgICAgICAgIDw8ICJFeHBlcmllbmNlOiAiIDw8IHBjLmV4cCAgICA8PCAnXG4nCiAgICAgICAgICAgICAgICAgIDw8ICJsZXZlbDogICAgICAiIDw8IHBjLmx2bCAgICA8PCAnXG4nOwogICAgfQp9OwoKcGxheWVyX2NoYXJhY3RlciBtZW51X3NlbGVjdF9wbGF5ZXIoKSB7CiAgICAvL3BvcHVsYXRlIHdpdGggb3RoZXIgZGVmYXVsdCBjaGFyYWN0ZXJzCiAgICBjb25zdCBzdGQ6OnZlY3RvcjxwbGF5ZXJfY2hhcmFjdGVyPiBkZWZhdWx0X2N0eXBlcyB7CiAgICAgICAgeyAid2FycmlvciIsIDgsIDUsIDMsIDUgfQogICAgfTsKCiAgICBmb3Ioc3RkOjpzaXplX3QgaT0wdTsgaSE9ZGVmYXVsdF9jdHlwZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgaSA8PCAiLiAiIDw8IGRlZmF1bHRfY3R5cGVzW2ldLmdldF9uYW1lKCkgPDwgJ1xuJzsKICAgIH0KCiAgICBzdGQ6OnNpemVfdCBpbnB1dDsKICAgIGRvIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlBsZWFzZSBzZWxlY3QgYW4gY2hhcmFjdGVyIGJ5IG51bWJlcjogIjsgLy9pbXBsaWN0IGZsdXNoIG9uIHN0ZGlvIHRpZQogICAgICAgIHN0ZDo6Y2luID4+IGlucHV0OwogICAgfSB3aGlsZShzdGQ6OmNpbi5mYWlsKCkgfHwgaW5wdXQgPj0gZGVmYXVsdF9jdHlwZXMuc2l6ZSgpKTsKCiAgICByZXR1cm4gZGVmYXVsdF9jdHlwZXNbaW5wdXRdOwp9CgppbnQgbWFpbigpIHsKICAgIGF1dG8gcGxheWVyPW1lbnVfc2VsZWN0X3BsYXllcigpOwogICAgc3RkOjpjb3V0IDw8IHBsYXllciA8PCAnXG4nOwp9