Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Game(11 laba)
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <Windows.h>
- using namespace std;
- char board[9] = {};
- void clearscreen() /* выводит на экран новые пустые строки, чтобы экран не захламлялся*/
- {
- for (int i = 0; i < 20; i++)
- {
- cout << endl;
- }
- }
- void clearboard() /* очищение и заполнение в начале игры массива с доской */
- {
- for (int i = 0; i < 9; i++)
- {
- board[i] = '-';
- }
- }
- void print_board() /* Переменная используется для смещения доски на середину экрана */
- {
- cout << "Игровая доска:" << endl;
- cout << "-" << board[0] << "-|-" << board[1] << "-|-" << board[2] << "- \n";
- cout << "-" << board[3] << "-|-" << board[4] << "-|-" << board[5] << "- \n";
- cout << "-" << board[6] << "-|-" << board[7] << "-|-" << board[8] << "- \n";
- }
- int get_move() /* получение хода от игрока*/
- {
- cout << "Правила движения: \n";
- cout << "-1-|-2-|-3-" << endl;
- cout << "-4-|-5-|-6-" << endl;
- cout << "-7-|-8-|-9-" << endl;
- cout << "\n";
- print_board();
- cout << "\nТвой ход: ";
- int move;
- cin >> move;
- while (move > 9 || move < 1 || board[move - 1] != '-')
- {
- cout << "Пожалуйста введите коррекны ход (от 1 до 9): \n";
- cin >> move;
- }
- return move;
- }
- bool winner(char player) /* передаем знак игрока Х или 0 */
- {
- 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} };
- for (int i = 0; i < 8; i++)
- {
- int count = 0;
- for (int j = 0; j < 3; j++)
- {
- if (board[wins[i][j]] == player)
- {
- count++;
- }
- }
- if (count == 3)
- {
- return true;
- }
- }
- return false;
- }
- char play_and_get_winner()
- {
- int turn = 1; /* первый ход */
- while (!winner('X') && !winner('0')) /*пока кто-нибудь не выйграет игра продолжается*/
- {
- clearscreen();
- int move = get_move();
- clearscreen();
- /* cout << "Ход который вы выбрали: " << move << endl; */
- if (turn % 2 == 1)
- {
- board[move - 1] = 'X';
- if (winner('X'))
- {
- cout << "\nПоздравляю игрок Х! Ты выйграл! \n";
- return 'X';
- }
- }
- else
- {
- board[move - 1] = '0';
- if (winner('0'))
- {
- cout << "\nПоздравляю игрок 0! Ты выйграл! \n";
- return '0';
- }
- }
- turn++;
- if (turn == 10) /* проверка на ничью */
- {
- cout << "\t Это ничья! \n"; /* горизонтальная табуляция*/
- return 'D'; /* возвращает рузельтат ничей*/
- }
- }
- }
- void print_winner(name_x, name_o, x_wins, o_wins, ties)
- {
- ofstream fout("output.txt", ios_base::trunc); /* удаляем итоги предыдущих игр*/
- fout.open("output.txt", ios_base::app); /* заполнение строк в фаил*/
- cout << "\n\t*Статистика побед*\nPlayer" << name_x << ": " << x_wins << ", Player" << name_o << ": " << o_wins << ", and Ties: " << ties << "\n\n";
- fout.close();
- return 0;
- }
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- string name_x, name_o;
- cout << "Добро пожаловать в игру Крестики-Нолики! \n";
- cout << "Введите имя игрока который будет играть за X:";
- cin >> name_x;
- cout >> "\nВведите имя игрока который будет играть за О:";
- cin >> name_o;
- string reply = "Да"; /* декларирует reply=ответ*/
- int x_wins = 0, o_wins = 0, ties = 0;
- while (reply == "Да")
- {
- clearboard();
- char winner = play_and_get_winner();
- print_board();
- switch (winner)
- {
- case 'X':
- x_wins++;
- break;
- case '0':
- o_wins++;
- break;
- case 'D':
- ties++;
- break;
- }
- print_winner(name_x, name_o, x_wins, o_wins, ties);
- cout << "\nДля того, чтобы посмотреть статистику выйгрышей зайдите в фаил win";
- cout << "\nХотите сыграть еще раз?(Да/Нет): ";
- cin >> reply;
- while (reply != "Да" && reply != "Нет")
- {
- cout << "Пожалуйста введите корректный ответ (Да/Нет):";
- cin >> reply;
- }
- }
- system("pause");
- return 0;
Advertisement
Add Comment
Please, Sign In to add comment