|
|
- #include "UserInterface.hpp"
-
- const int UserInterface::INTERVAL = 0;
- const int UserInterface::MINI_INTERVAL = 0;
- const int UserInterface::MAX_DAY = 28;
- const int UserInterface::MAX_MONTH = 12;
- const int UserInterface::MAX_YEAR = 100;
-
- int UserInterface::day = 1;
- int UserInterface::month = 1;
- int UserInterface::year = 90;
-
- bool UserInterface::gameOver = false;
-
- std::vector<std::string> UserInterface::dayName = {
- "Morndas",
- "Tirdas",
- "Middas",
- "Turdas",
- "Fredas",
- "Loredas",
- "Sundas",
- };
-
- std::vector<std::string> UserInterface::monthName = {
- "Morning Star",
- "Sun's Dawn",
- "First Seed",
- "Rain's Hand",
- "Second Seed",
- "Mid Year",
- "Sun's Height",
- "Last Seed",
- "Hearthfire",
- "Frostfall",
- "Sun's Dusk",
- "Evening Star",
- };
-
- void UserInterface::print(std::string msg)
- {
- std::cout << msg << std::flush;
- std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::INTERVAL));
- }
-
- void UserInterface::print(const char *msg)
- {
- std::cout << msg << std::flush;
- std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::INTERVAL));
- }
-
- void UserInterface::println(std::string msg)
- {
- std::cout << msg << std::endl;
- std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::INTERVAL));
- }
-
- void UserInterface::println(const char *msg)
- {
- std::cout << msg << std::endl;
- std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::INTERVAL));
- }
-
- void UserInterface::printByChar(const char *msg)
- {
- int len = strlen(msg);
- for (size_t i = 0; i < len; i++)
- {
- std::cout << msg[i] << std::flush;
- std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::MINI_INTERVAL));
- }
- }
-
- void UserInterface::welcomeMessage()
- {
- std::cout << "+++++++++++++++++++++++++++++++++++++++++\n"
- << "+ Welcome to Spell-Warz-Again-Final !!! +\n"
- << "+++++++++++++++++++++++++++++++++++++++++\n"
- << std::flush;
- }
-
- const char *UserInterface::chooseName(char *buffer)
- {
- char choice = 0;
- while (choice != 'y' && choice != 'Y')
- {
- printf("Who should we call you?\n>");
- fflush(stdout);
- scanf("%63s", buffer);
-
- printf("So you are a young mage named \"%s\" correct? (y/N)\n>", buffer);
- fflush(stdout);
- scanf("%1s", &choice);
- }
-
- return buffer;
- }
-
- void UserInterface::epilogue()
- {
- UserInterface::printByChar(
- "I'm tired of making epilogue...\n"
- "You are a young mage, defeat the damn arch-mage...\n"
- "F*ck, I'm tired of this...\n"
- "Do you know I just finished this sh*t at October 10th?\n"
- "Good luck and defeat the arch-mage.\n"
- "Trust me, you gonna need the \'Good Luck\' ...\n");
- }
-
- std::string UserInterface::dateString()
- {
- char date[5] = {0};
-
- if (UserInterface::day < 21)
- {
- switch (UserInterface::day)
- {
- case 1:
- sprintf(date, "1st");
- break;
- case 2:
- sprintf(date, "2nd");
- break;
- case 3:
- sprintf(date, "3rd");
- break;
- default:
- sprintf(date, "%dth", UserInterface::day);
- break;
- }
- }
- else
- {
- switch (UserInterface::day % 10)
- {
- case 1:
- sprintf(date, "%dst", UserInterface::day);
- break;
- case 2:
- sprintf(date, "%dnd", UserInterface::day);
- break;
- case 3:
- sprintf(date, "%drd", UserInterface::day);
- break;
- default:
- sprintf(date, "%dth", UserInterface::day);
- break;
- }
- }
-
- return std::string(
- UserInterface::dayName.at(((UserInterface::day - 1) % 7)) + ", " +
- date + " of " + UserInterface::monthName.at(UserInterface::month - 1) +
- ", Year " + std::to_string(UserInterface::year));
- }
-
- void UserInterface::menu()
- {
- std::cout << "=======================================\n"
- << UserInterface::dateString() << "\n"
- << "=======================================\n"
- << "Available action:\n"
- << "[1] Take a rest\n"
- << "[2] Practice magic\n"
- << "[3] Spar against classmate\n"
- << "[4] Challenge the new Arch-Mage\n"
- << "[5] Gather info about the new Arch-Mage\n"
- << "[6] Meditate to your inner-self\n"
- << "[0] Commit sudoku\n"
- << std::flush;
- }
-
- void UserInterface::enemiesInfo(std::vector<Character> &enemies)
- {
- for (int i = 1; i < enemies.size(); i++)
- {
- std::cout << "[" << i << "] " << enemies.at(i).getName() << " (Lv." << enemies.at(i).getLevel() << ")\n";
- }
- std::cout << std::flush;
- }
-
- int UserInterface::getNumber(std::string msg, int min, int max)
- {
- int buffer = max + 1;
- do
- {
- std::cout << msg << std::flush;
- if (std::cin.failbit || std::cin.eofbit)
- {
- std::cin.clear();
- std::cin.ignore(1);
- }
- } while (std::cin >> buffer && !(buffer <= max && buffer >= min));
- return buffer;
- }
-
- void UserInterface::nextDay()
- {
- if (UserInterface::day++ >= UserInterface::MAX_DAY)
- {
- day = 1;
- if (UserInterface::month++ >= UserInterface::MAX_MONTH)
- {
- month = 1;
- if (UserInterface::year++ >= UserInterface::MAX_YEAR)
- {
- UserInterface::gameOver = true;
- }
- }
- }
- }
-
- bool UserInterface::isGameOver()
- {
- return gameOver;
- }
-
- void UserInterface::characterInfo(Character &c)
- {
- std::cout << "++++++++++++++++++++++++"
- << "\nName: " << c.getName()
- << "\n HP: " << c.getCurHP() << "/" << c.getMaxHP()
- << "\n MP: " << c.getCurMP() << "/" << c.getMaxMP()
- << "\n Lv: " << c.getLevel()
- << "\n Xp: " << c.getExperience()
- << "\n next: " << c.toNextLevel()
- << "\n++++++++++++++++++++++++" << std::endl;
- }
|