25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

227 satır
5.9 KiB

5 yıl önce
  1. #include "UserInterface.hpp"
  2. const int UserInterface::INTERVAL = 0;
  3. const int UserInterface::MINI_INTERVAL = 0;
  4. const int UserInterface::MAX_DAY = 28;
  5. const int UserInterface::MAX_MONTH = 12;
  6. const int UserInterface::MAX_YEAR = 100;
  7. int UserInterface::day = 1;
  8. int UserInterface::month = 1;
  9. int UserInterface::year = 90;
  10. bool UserInterface::gameOver = false;
  11. std::vector<std::string> UserInterface::dayName = {
  12. "Morndas",
  13. "Tirdas",
  14. "Middas",
  15. "Turdas",
  16. "Fredas",
  17. "Loredas",
  18. "Sundas",
  19. };
  20. std::vector<std::string> UserInterface::monthName = {
  21. "Morning Star",
  22. "Sun's Dawn",
  23. "First Seed",
  24. "Rain's Hand",
  25. "Second Seed",
  26. "Mid Year",
  27. "Sun's Height",
  28. "Last Seed",
  29. "Hearthfire",
  30. "Frostfall",
  31. "Sun's Dusk",
  32. "Evening Star",
  33. };
  34. void UserInterface::print(std::string msg)
  35. {
  36. std::cout << msg << std::flush;
  37. std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::INTERVAL));
  38. }
  39. void UserInterface::print(const char *msg)
  40. {
  41. std::cout << msg << std::flush;
  42. std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::INTERVAL));
  43. }
  44. void UserInterface::println(std::string msg)
  45. {
  46. std::cout << msg << std::endl;
  47. std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::INTERVAL));
  48. }
  49. void UserInterface::println(const char *msg)
  50. {
  51. std::cout << msg << std::endl;
  52. std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::INTERVAL));
  53. }
  54. void UserInterface::printByChar(const char *msg)
  55. {
  56. int len = strlen(msg);
  57. for (size_t i = 0; i < len; i++)
  58. {
  59. std::cout << msg[i] << std::flush;
  60. std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::MINI_INTERVAL));
  61. }
  62. }
  63. void UserInterface::welcomeMessage()
  64. {
  65. std::cout << "+++++++++++++++++++++++++++++++++++++++++\n"
  66. << "+ Welcome to Spell-Warz-Again-Final !!! +\n"
  67. << "+++++++++++++++++++++++++++++++++++++++++\n"
  68. << std::flush;
  69. }
  70. const char *UserInterface::chooseName(char *buffer)
  71. {
  72. char choice = 0;
  73. while (choice != 'y' && choice != 'Y')
  74. {
  75. printf("Who should we call you?\n>");
  76. fflush(stdout);
  77. scanf("%63s", buffer);
  78. printf("So you are a young mage named \"%s\" correct? (y/N)\n>", buffer);
  79. fflush(stdout);
  80. scanf("%1s", &choice);
  81. }
  82. return buffer;
  83. }
  84. void UserInterface::epilogue()
  85. {
  86. UserInterface::printByChar(
  87. "I'm tired of making epilogue...\n"
  88. "You are a young mage, defeat the damn arch-mage...\n"
  89. "F*ck, I'm tired of this...\n"
  90. "Do you know I just finished this sh*t at October 10th?\n"
  91. "Good luck and defeat the arch-mage.\n"
  92. "Trust me, you gonna need the \'Good Luck\' ...\n");
  93. }
  94. std::string UserInterface::dateString()
  95. {
  96. char date[5] = {0};
  97. if (UserInterface::day < 21)
  98. {
  99. switch (UserInterface::day)
  100. {
  101. case 1:
  102. sprintf(date, "1st");
  103. break;
  104. case 2:
  105. sprintf(date, "2nd");
  106. break;
  107. case 3:
  108. sprintf(date, "3rd");
  109. break;
  110. default:
  111. sprintf(date, "%dth", UserInterface::day);
  112. break;
  113. }
  114. }
  115. else
  116. {
  117. switch (UserInterface::day % 10)
  118. {
  119. case 1:
  120. sprintf(date, "%dst", UserInterface::day);
  121. break;
  122. case 2:
  123. sprintf(date, "%dnd", UserInterface::day);
  124. break;
  125. case 3:
  126. sprintf(date, "%drd", UserInterface::day);
  127. break;
  128. default:
  129. sprintf(date, "%dth", UserInterface::day);
  130. break;
  131. }
  132. }
  133. return std::string(
  134. UserInterface::dayName.at(((UserInterface::day - 1) % 7)) + ", " +
  135. date + " of " + UserInterface::monthName.at(UserInterface::month - 1) +
  136. ", Year " + std::to_string(UserInterface::year));
  137. }
  138. void UserInterface::menu()
  139. {
  140. std::cout << "=======================================\n"
  141. << UserInterface::dateString() << "\n"
  142. << "=======================================\n"
  143. << "Available action:\n"
  144. << "[1] Take a rest\n"
  145. << "[2] Practice magic\n"
  146. << "[3] Spar against classmate\n"
  147. << "[4] Challenge the new Arch-Mage\n"
  148. << "[5] Gather info about the new Arch-Mage\n"
  149. << "[6] Meditate to your inner-self\n"
  150. << "[0] Commit sudoku\n"
  151. << std::flush;
  152. }
  153. void UserInterface::enemiesInfo(std::vector<Character> &enemies)
  154. {
  155. for (int i = 0; i < enemies.size(); i++)
  156. {
  157. std::cout << "[" << i << "] " << enemies.at(i).getName() << " (Lv." << enemies.at(i).getLevel() << ")\n";
  158. }
  159. std::cout << std::flush;
  160. }
  161. int UserInterface::getNumber(std::string msg, int min, int max)
  162. {
  163. int buffer = max + 1;
  164. do
  165. {
  166. std::cout << msg << std::flush;
  167. if (std::cin.failbit || std::cin.eofbit)
  168. {
  169. std::cin.clear();
  170. std::cin.ignore(1);
  171. }
  172. } while (std::cin >> buffer && !(buffer <= max && buffer >= min));
  173. return buffer;
  174. }
  175. void UserInterface::nextDay()
  176. {
  177. if (UserInterface::day++ >= UserInterface::MAX_DAY)
  178. {
  179. day = 1;
  180. if (UserInterface::month++ >= UserInterface::MAX_MONTH)
  181. {
  182. month = 1;
  183. if (UserInterface::year++ >= UserInterface::MAX_YEAR)
  184. {
  185. UserInterface::gameOver = true;
  186. }
  187. }
  188. }
  189. }
  190. bool UserInterface::isGameOver()
  191. {
  192. return gameOver;
  193. }
  194. void UserInterface::characterInfo(Character &c)
  195. {
  196. std::cout << "++++++++++++++++++++++++"
  197. << "\nName: " << c.getName()
  198. << "\n HP: " << c.getCurHP() << "/" << c.getMaxHP()
  199. << "\n MP: " << c.getCurMP() << "/" << c.getMaxMP()
  200. << "\n Lv: " << c.getLevel()
  201. << "\n Xp: " << c.getExperience()
  202. << "\n next: " << c.toNextLevel()
  203. << "\n++++++++++++++++++++++++" << std::endl;
  204. }