Neon_Falcon

Untitled

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