Advertisement
Cassimus

SpaceRescue pt2

Mar 22nd, 2024 (edited)
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstdlib>
  4. #include <time.h>
  5.  
  6. using namespace std;
  7. /**Klasa dowolnej postaci*/
  8. class Character // Entity
  9. {
  10. private:
  11. string name;
  12. int health;
  13. int maxHealth;
  14. int damage;
  15.  
  16. public:
  17. Character(string characterName)
  18. {
  19. name = characterName;
  20. maxHealth = 10;
  21. health = maxHealth;
  22. damage = 2;
  23. }
  24.  
  25. string get_name() const
  26. {
  27. return name;
  28. }
  29.  
  30. int get_health() const
  31. {
  32. return health;
  33. }
  34.  
  35. int get_max_health() const
  36. {
  37. return maxHealth;
  38. }
  39.  
  40. int get_damage() const
  41. {
  42. return damage;
  43. }
  44. /**
  45. * Dodaje zdrowia postaci
  46. * @param value ilość zdrowia do dodania
  47. * @return nic nie zwraca
  48. */
  49. void add_health(int value)
  50. {
  51. health += value;
  52.  
  53. if (health > maxHealth)
  54. health = maxHealth;
  55. }
  56.  
  57. void lower_health(int value)
  58. {
  59. health -= value;
  60. if (health < 0)
  61. health = 0;
  62. }
  63. };
  64.  
  65. class Player : public Character
  66. {
  67. private:
  68. int metal;
  69. int oxygen;
  70.  
  71. public:
  72. Player(string playerName) : Character(playerName)
  73. {
  74. metal = 0;
  75. oxygen = 100;
  76. }
  77.  
  78. Player() : Player("John Doe")
  79. {
  80. }
  81.  
  82. int get_metal() const
  83. {
  84. return metal;
  85. }
  86.  
  87. int get_oxygen() const
  88. {
  89. return oxygen;
  90. }
  91.  
  92. bool has_oxygen()
  93. {
  94. return get_oxygen() > 0;
  95. }
  96.  
  97. void lower_oxygen(int value)
  98. {
  99. oxygen -= value;
  100. if (oxygen < 0)
  101. oxygen = 0;
  102. }
  103.  
  104. void add_oxygen(int value)
  105. {
  106. oxygen += value;
  107. if (oxygen > 100)
  108. oxygen = 100;
  109. }
  110.  
  111. void add_metal(int value)
  112. {
  113. metal += value;
  114. }
  115.  
  116. void rest()
  117. {
  118. cout << this->get_name() << " odpoczywa. Zużywa 2% tlenu." << endl
  119. << endl;
  120. this->lower_oxygen(2);
  121. this->add_health(5);
  122.  
  123. display_player_info();
  124. }
  125.  
  126. void display_player_info()
  127. {
  128. cout << "Stan gracza" << endl;
  129. cout << "-----------------------------------------------------------------" << endl;
  130. cout << "Życie: " << this->get_health() << "/" << this->get_max_health() << endl;
  131. cout << "Atak: " << this->get_damage() << endl;
  132. cout << "Tlen: " << this->get_oxygen() << endl;
  133. cout << "Metal: " << this->get_metal() << endl;
  134. }
  135. };
  136.  
  137. class Game
  138. {
  139. private:
  140. Player player;
  141. void attack(Character *enemy, bool isCombatRunning)
  142. {
  143. int playerDamage = rand() % player.get_damage() + 1;
  144. enemy->lower_health(playerDamage);
  145. cout << player.get_name() << " atakuje! Zadaje " << enemy->get_name() << " " <<
  146. playerDamage << " punkty obrażeń!" << endl;
  147.  
  148. if (enemy->get_health() > 0)
  149. {
  150. int enemyDamage = rand() % enemy->get_damage() + 1;
  151. player.lower_health(enemyDamage);
  152. cout << enemy->get_name() << " atakuje! Zadaje " << player.get_name() << " " <<
  153. enemyDamage << " punkty obrażeń!" << endl;
  154.  
  155. if (player.get_health() <= 0)
  156. {
  157. cout << player.get_name() << " przegrywa! Koniec walki" << endl;
  158. isCombatRunning = false;
  159. }
  160. }
  161. else
  162. {
  163. cout << enemy->get_name() << " przegrywa! Koniec walki" << endl;
  164.  
  165. player.add_metal(10);
  166. cout << player.get_name() << " znajduje 10 metalu!" << endl;
  167. isCombatRunning = false;
  168. }
  169. }
  170.  
  171. public:
  172. Game(string playerName)
  173. {
  174. player = Player(playerName);
  175. cout << player.get_name() << endl;
  176. }
  177.  
  178. void search_resources()
  179. {
  180. cout << endl
  181. << player.get_name() << " wybiera się na zewnątrz by szukać zasobów. "
  182. << "Zużyto 5% tlenu\n";
  183. player.lower_oxygen(5);
  184. cout << "----------------------------------------------------------\n";
  185. int chance = rand() % 3; // 0 , 1 albo 2
  186.  
  187. switch (chance)
  188. {
  189. case 0:
  190. {
  191. int oxygen = rand() % 10 + 1;
  192. cout << player.get_name() << " ma szczęście. Natrafił na mały zbiornik tlenu!" << endl;
  193. cout << "Zasób tlenu zwiększony o" << oxygen << " % !" << endl
  194. << endl;
  195. player.add_oxygen(oxygen);
  196. player.display_player_info();
  197. break;
  198. }
  199. case 1:
  200. cout << player.get_name() << " natrafił na małe złoże metalu. " << endl;
  201. cout << "Zasoby metalu zwiększone o 5 ! \n\n";
  202. player.add_metal(5);
  203. player.display_player_info();
  204. break;
  205. case 2:
  206. cout << player.get_name() << " napotkał przeciwnika!" << endl;
  207. start_combat();
  208. break;
  209. }
  210. }
  211.  
  212. void start_combat()
  213. {
  214. Character enemy = Character("Kosmita");
  215. bool isCombatRunning = true;
  216.  
  217. int playerDamage, enemyDamage, choice;
  218.  
  219. while (isCombatRunning)
  220. {
  221. cout << endl
  222. << "Co chcesz zrobić?" << endl;
  223. cout << "------------------------------------------------\n";
  224. cout << "Twoje życie: " << player.get_health() << "\t|\t"
  225. << "Życie przeciwnika: " << enemy.get_health() << endl;
  226. cout << "------------------------------------------------\n";
  227. cout << "[1] Atakuj!\n";
  228. cout << "[2] Uciekaj!\n";
  229. cout << "Wpisz numer: ";
  230. cin >> choice;
  231.  
  232. switch (choice)
  233. {
  234. case 1:
  235. // Atak
  236. // TO DO
  237. attack(&enemy, &isCombatRunning);
  238.  
  239. break;
  240.  
  241. case 2:
  242. // Uciekaj
  243. isCombatRunning = false;
  244. player.lower_oxygen(5);
  245. cout << player.get_name() << " ucieka tracąc 5% tlenu! Koniec walki." << endl;
  246. break;
  247. }
  248. }
  249. }
  250.  
  251. void print_my_menu()
  252. {
  253. cout << endl
  254. << "Co chcesz zrobić?" << endl;
  255. cout << "--------------------------------------------- \n";
  256. cout << "[1] Sprawdź swój stan." << endl;
  257. cout << "[2] Odpocznij." << endl;
  258. cout << "[3] Szukaj zasobów." << endl;
  259. if (player.get_metal() >= 50)
  260. {
  261. cout << "[4] Zbuduj statek. " << endl;
  262. }
  263. cout << "[0] Skończ grę." << endl;
  264. }
  265.  
  266. void start_game()
  267. {
  268. cout << "------------------------------------------------" << endl;
  269. cout << "Rozbiłeś się na księżycu." << endl;
  270. cout << "Twoim zadaniem jest przetrwanie i zdobycie wystarczającej ilości surowców by"
  271. << " zbudować statek do domu." << endl;
  272. cout << "Uważaj na zapasy swojego tlenu, bez niego nie możesz kontynuować gry." << endl;
  273. cout << "Powodzenia " << player.get_name() << "!\n\n";
  274.  
  275. player.display_player_info();
  276.  
  277. // runtime
  278. game_runtime();
  279. }
  280.  
  281. void game_runtime()
  282. {
  283. int playerChoice{};
  284. bool isGameRunning = true;
  285.  
  286. while (isGameRunning)
  287. {
  288. print_my_menu();
  289. cout << "Wpisz numer: ";
  290. cin >> playerChoice;
  291.  
  292. switch (playerChoice)
  293. {
  294. case 1:
  295. player.display_player_info();
  296. break;
  297. case 2:
  298. player.rest();
  299. // TO DO
  300. if (!player.has_oxygen())
  301. {
  302. cout << "Gracz przegrywa!" << endl;
  303. cout << "Koniec Gry! Spróbuj ponownie!" << endl;
  304. isGameRunning = false;
  305. }
  306. break;
  307. case 3:
  308. search_resources();
  309. // TO DO
  310. if (!player.has_oxygen())
  311. {
  312. cout << "Gracz przegrywa!" << endl;
  313. cout << "Koniec Gry! Spróbuj ponownie!" << endl;
  314. isGameRunning = false;
  315. }
  316. break;
  317. case 4:
  318. if (player.get_metal() >= 50)
  319. {
  320. cout << "Gracz wygrywa!" << endl;
  321. cout << "Pomyślnie zbudowałeś statek i wydostałeś się z księzyca" << endl;
  322. cout << "Dzięki za grę !" << endl;
  323. }
  324. else
  325. {
  326. cout << "Opcja niedostępna" << endl;
  327. }
  328. break;
  329. case 0:
  330. cout << "Koniec gry!" << endl;
  331. isGameRunning = false;
  332. break;
  333. }
  334. }
  335. }
  336. };
  337.  
  338. using Entity = Character;
  339.  
  340. int main(int argc, char const *argv[])
  341. {
  342. cout << "Podaj swoje imię:";
  343. string name;
  344. getline(cin, name);
  345. srand(time(0));
  346.  
  347. Game game(name);
  348. game.start_game();
  349.  
  350. return 0;
  351. }
  352.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement