• Предмет: Информатика
  • Автор: MSashaZ
  • Вопрос задан 3 месяца назад

С++
1. Зробити гру X vs 0;
2. Додати функціонал повторення гри (Після того, як показали результат гри, запитати у користувача, чи бажає він повторити гру. Якщо користувач обирає варіант "так" - гра починається з початку,"ні" - оформити завершення гри ).
3. Обираємо один із варіантів
варіант 1 - розширити поле гри 5 х 5 - налаштувати відповідний функціонал.
варіант 2 - додати інтелект для комп'ютера.
Мається на увазі, щоб комп'ютер перевіряв де вже стоять хрестики. Якщо користувачу залишається поставити один хрести для перемоги, комп'ютер повинен поставити туди 0, тим самим не дати виграти користувачу.

Ответы

Ответ дал: evgenukevgen5
0

Ответ:Ось приклад коду на мові C++, який реалізує гру "Хрестики-нулики" з урахуванням вашого побажання щодо розширення поля гри та додавання інтелекту комп'ютера. Варіант 1 - розширення поля гри до розміру 5x5.

#include <iostream>

#include <vector>

using namespace std;

const int SIZE = 5;

const char PLAYER_X = 'X';

const char PLAYER_O = 'O';

vector<vector<char>> board(SIZE, vector<char>(SIZE, ' '));

void printBoard() {

   for (int i = 0; i < SIZE; ++i) {

       for (int j = 0; j < SIZE; ++j) {

           cout << board[i][j];

           if (j != SIZE - 1)

               cout << " | ";

       }

       cout << endl;

       if (i != SIZE - 1) {

           for (int j = 0; j < SIZE; ++j) {

               cout << "----";

           }

           cout << endl;

       }

   }

   cout << endl;

}

bool isBoardFull() {

   for (int i = 0; i < SIZE; ++i) {

       for (int j = 0; j < SIZE; ++j) {

           if (board[i][j] == ' ')

               return false;

       }

   }

   return true;

}

bool isMoveValid(int row, int col) {

   return (row >= 0 && row < SIZE && col >= 0 && col < SIZE && board[row][col] == ' ');

}

bool isWinningMove(int row, int col, char player) {

   int count = 0;

   // Check row

   for (int j = 0; j < SIZE; ++j) {

       if (board[row][j] == player)

           count++;

   }

   if (count == SIZE)

       return true;

   // Check column

   count = 0;

   for (int i = 0; i < SIZE; ++i) {

       if (board[i][col] == player)

           count++;

   }

   if (count == SIZE)

       return true;

   // Check diagonal

   if (row == col) {

       count = 0;

       for (int i = 0; i < SIZE; ++i) {

           if (board[i][i] == player)

               count++;

       }

       if (count == SIZE)

           return true;

   }

   // Check anti-diagonal

   if (row + col == SIZE - 1) {

       count = 0;

       for (int i = 0; i < SIZE; ++i) {

           if (board[i][SIZE - 1 - i] == player)

               count++;

       }

       if (count == SIZE)

           return true;

   }

   return false;

}

bool makeMove(int row, int col, char player) {

   if (isMoveValid(row, col)) {

       board[row][col] = player;

       return true;

   }

   return false;

}

void resetBoard() {

   for (int i = 0; i < SIZE; ++i) {

       for (int j = 0; j < SIZE; ++j) {

           board[i][j] = ' ';

       }

   }

}

pair<int, int> getRandomMove() {

   int row, col;

   do {

       row = rand() % SIZE;

       col = rand() % SIZE;

   } while (!isMoveValid(row, col));

   return make_pair(row, col);

}

void playGame() {

   bool gameFinished = false;

   char currentPlayer = PLAYER_X;

   while (!gameFinished) {

       printBoard();

       if (currentPlayer == PLAYER_X) {

           cout << "Player X's turn. Enter row (0-" << SIZE - 1 << "): ";

           int row;

           cin >> row;

           cout << "Enter column (0-" << SIZE - 1 << "): ";

           int col;

           cin >> col;

           if (makeMove(row, col, currentPlayer)) {

               if (isWinningMove(row, col, currentPlayer)) {

                   printBoard();

                   cout << "Player X wins!" << endl;

                   gameFinished = true;

               } else if (isBoardFull()) {

                   printBoard();

                   cout << "It's a tie!" << endl;

                   gameFinished = true;

               } else {

                   currentPlayer = PLAYER_O;

               }

           } else {

               cout << "Invalid move. Try again." << endl;

           }

       } else {

           cout << "Computer's turn:" << endl;

           pair<int, int> computerMove = getRandomMove();

           int row = computerMove.first;

           int col = computerMove.second;

           cout << "Computer placed an O at row " << row << ", column " << col << endl;

           if (makeMove(row, col, currentPlayer)) {

               if (isWinningMove(row, col, currentPlayer)) {

                   printBoard();

                   cout << "Computer wins!" << endl;

                   gameFinished = true;

               } else if (isBoardFull()) {

                   printBoard();

                   cout << "It's a tie!" << endl;

                   gameFinished = true;

               } else {

                   currentPlayer = PLAYER_X;

               }

           } else {

               cout << "Invalid move. Try again." << endl;

           }

       }

   }

}

int main() {

   srand(time(NULL));

   char playAgain;

   do {

       resetBoard();

       playGame();

       cout << "Do you want to play again? (y/n): ";

       cin >> playAgain;

   } while (playAgain == 'y' || playAgain == 'Y');

   return 0;

}

Цей код має функціонал повторення гри та додає інтелект комп'ютера, який запобігає користувачеві перемогти, коли в нього залишається поставити один хрестик для перемоги. Комп'ютер вибирає випадковий хід з доступних можливостей.

Объяснение:

Вас заинтересует