Neon_Falcon

Untitled

Jun 11th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.95 KB | None | 0 0
  1. // Game(11 laba) готова!
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <string>
  5. #include <fstream>
  6. #include <Windows.h>
  7. #include <ctime>
  8. using std::cin;
  9. using std::cout;
  10. using std::endl;
  11. using std::string;
  12. using std::ios;
  13.  
  14. char board[9] = {};
  15.  
  16. void clearscreen() /* выводит на экран новые пустые строки, чтобы экран не захламлялся*/
  17. {
  18. for (int i = 0; i < 40; i++)
  19. {
  20. cout << endl;
  21. }
  22. }
  23.  
  24. void clearboard() /* очищение и заполнение в начале игры массива с доской */
  25. {
  26. for (int i = 0; i < 9; i++)
  27. {
  28. board[i] = '-';
  29. }
  30. }
  31. void print_board() /* Переменная используется для смещения доски на середину экрана */
  32. {
  33. cout << "Игровая доска:" << endl;
  34. cout << "-" << board[0] << "-|-" << board[1] << "-|-" << board[2] << "- \n";
  35. cout << "-" << board[3] << "-|-" << board[4] << "-|-" << board[5] << "- \n";
  36. cout << "-" << board[6] << "-|-" << board[7] << "-|-" << board[8] << "- \n";
  37. }
  38.  
  39. int get_move() /* получение хода от игрока*/
  40. {
  41.  
  42. cout << "Правила движения: \n";
  43. cout << "-1-|-2-|-3-" << endl;
  44. cout << "-4-|-5-|-6-" << endl;
  45. cout << "-7-|-8-|-9-" << endl;
  46. cout << "\n";
  47.  
  48. print_board();
  49. cout << "\nТвой ход: ";
  50.  
  51. int move;
  52. cin >> move;
  53. while (move > 9 || move < 1 || board[move - 1] != '-')
  54. {
  55. cout << "Пожалуйста введите коррекны ход (от 1 до 9): \n";
  56. cin >> move;
  57. }
  58. return move;
  59. }
  60.  
  61. bool winner(char player) /* передаем знак игрока Х или 0 */
  62. {
  63. int wins[][3] = { {0,1,2}, {3,4,5}, {6,7,8}, {0,3,6}, {1,4,7}, {2,5,8}, {0,4,8}, {2,4,6} };
  64. for (int i = 0; i < 8; i++)
  65. {
  66. int count = 0;
  67. for (int j = 0; j < 3; j++)
  68. {
  69. if (board[wins[i][j]] == player)
  70. {
  71. count++;
  72. }
  73.  
  74. }
  75. if (count == 3)
  76. {
  77. return true;
  78. }
  79. }
  80. return false;
  81. }
  82.  
  83. char play_and_get_winner(string name_x, string name_o)
  84. {
  85. int turn = 1; /* первый ход */
  86. while (!winner('X') && !winner('0')) /*пока кто-нибудь не выйграет игра продолжается*/
  87. {
  88. clearscreen();
  89. int move = get_move();
  90. clearscreen();
  91. /* cout << "Ход который вы выбрали: " << move << endl; */
  92. if (turn % 2 == 1)
  93. {
  94. board[move - 1] = 'X';
  95. if (winner('X'))
  96. {
  97. cout << "\nПоздравляю игрок " << name_x << " ! Ты выйграл! \n";
  98. return 'X';
  99. }
  100. }
  101. else
  102. {
  103. board[move - 1] = '0';
  104. if (winner('0'))
  105. {
  106. cout << "\nПоздравляю игрок " << name_o << " ! Ты выйграл! \n";
  107. return '0';
  108. }
  109.  
  110. }
  111. turn++;
  112. if (turn == 10) /* проверка на ничью */
  113. {
  114. cout << "\t Это ничья! \n"; /* горизонтальная табуляция*/
  115. return 'D'; /* возвращает рузельтат ничей*/
  116. }
  117. }
  118. }
  119.  
  120. void print_winner(string name_x, string name_o, int x_wins, int o_wins, int ties)
  121. {
  122.  
  123. }
  124.  
  125. int main()
  126. {
  127. SetConsoleCP(1251);
  128. SetConsoleOutputCP(1251);
  129. string name_x, name_o;
  130. cout << "Добро пожаловать в игру Крестики-Нолики! \n";
  131. cout << "Введите имя игрока который будет играть за X:";
  132. cin >> name_x;
  133. cout << "\nВведите имя игрока который будет играть за О:";
  134. cin >> name_o;
  135. string reply = "Да"; /* декларирует reply=ответ*/
  136. int x_wins = 0, o_wins = 0, ties = 0;
  137. while (reply == "Да")
  138. {
  139. clearboard();
  140. char winner = play_and_get_winner(name_x, name_o);
  141. print_board();
  142. switch (winner)
  143. {
  144. case 'X':
  145. x_wins++;
  146. break;
  147. case '0':
  148. o_wins++;
  149. break;
  150. case 'D':
  151. ties++;
  152. break;
  153. }
  154.  
  155.  
  156. setlocale(LC_ALL, "ru"); // корректное отображение Кириллицы
  157. std::ofstream fout;
  158. fout.open("win.txt", std::ios_base::app);
  159. if (!fout.is_open())
  160. {
  161. cout << "Ошибка открытия \n";
  162. }
  163. else
  164. {
  165.  
  166. time_t seconds = time(NULL);
  167. struct tm timeinfo;
  168. localtime_s(&timeinfo, &seconds);
  169. char str[26];
  170. asctime_s(str, sizeof str, &timeinfo);
  171. //timeinfo = localtime_s( &seconds);
  172. fout << "*Статистика побед*" << endl;
  173. fout << "Player" << name_x << ": " << x_wins << ", Player" << name_o << " : " << o_wins << ", and Ties : " << ties << "\nВремя и дата игры: " << str << endl;
  174. fout.close();
  175. }
  176. cout << "Для того, чтобы посмотреть статистику выйгрышей зайдите в фаил win";
  177. cout << "\nХотите сыграть еще раз?(Да/Нет): ";
  178. cin >> reply;
  179. while (reply != "Да" && reply != "Нет")
  180. {
  181. cout << "Пожалуйста введите корректный ответ (Да/Нет):";
  182. cin >> reply;
  183. }
  184. }
  185.  
  186. system("pause");
  187. return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment