• Предмет: Информатика
  • Автор: Kukuwka0Ha0DepeBe
  • Вопрос задан 1 год назад

С++
Створіть гру «Морський Бій»..
Головні особливості реалізації гри:
● Режими гри:
o Людина - комп'ютер.
o Комп'ютер - комп'ютер.
● Розміщення кораблів:
o Гравець розставляє вручну.
o Комп'ютер розставляє замість гравця.
● Комп'ютер може грати у двох режимах:
o Випадковий постріл.
o Інтелектуальна гра. Комп'ютер будує стратегію гри, а не
стріляє випадково.
● Відображати поточний стан ігрового поля гравця та комп'ютера.
● Можливість зупинки, припинення, нового запуску гри

Ответы

Ответ дал: advukrain
2

Ответ:

Попробуй

Объяснение:

#include <iostream>

#include <vector>

#include <cstdlib>

#include <ctime>

using namespace std;

const int BOARD_SIZE = 10;

const char SHIP_SYMBOL = 'S';

const char HIT_SYMBOL = 'X';

const char MISS_SYMBOL = 'O';

const char EMPTY_SYMBOL = '.';

// Функція для очищення екрану консолі

void clearScreen()

{

   system("clear");

}

// Клас для представлення ігрового поля

class Board

{

public:

   vector<vector<char>> grid;

   Board()

   {

       grid.resize(BOARD_SIZE, vector<char>(BOARD_SIZE, EMPTY_SYMBOL));

   }

   // Функція для відображення ігрового поля

   void display()

   {

       cout << "  ";

       for (int i = 0; i < BOARD_SIZE; ++i)

           cout << i << " ";

       cout << endl;

       for (int i = 0; i < BOARD_SIZE; ++i)

       {

           cout << i << " ";

           for (int j = 0; j < BOARD_SIZE; ++j)

               cout << grid[i][j] << " ";

           cout << endl;

       }

   }

   // Функція для розміщення кораблів

   void placeShips()

   {

       for (int i = 1; i <= 5; ++i)

       {

           int shipSize = 6 - i;

           cout << "Розмістіть корабль розміром " << shipSize << endl;

           for (int j = 0; j < i; ++j)

           {

               int x, y;

               cout << "Введіть координати (x, y) для частини " << j + 1 << ": ";

               cin >> x >> y;

               while (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE || grid[x][y] != EMPTY_SYMBOL)

               {

                   cout << "Некоректні координати. Спробуйте ще раз: ";

                   cin >> x >> y;

               }

               grid[x][y] = SHIP_SYMBOL;

           }

           clearScreen();

           display();

       }

   }

   // Функція для перевірки чи виграв гравець

   bool checkWin()

   {

       for (int i = 0; i < BOARD_SIZE; ++i)

       {

           for (int j = 0; j < BOARD_SIZE; ++j)

           {

               if (grid[i][j] == SHIP_SYMBOL)

                   return false;

           }

       }

       return true;

   }

};

// Функція для випадкового пострілу комп'ютера

void computerRandomShoot(Board &opponentBoard)

{

   int x, y;

   do

   {

       x = rand() % BOARD_SIZE;

       y = rand() % BOARD_SIZE;

   } while (opponentBoard.grid[x][y] == HIT_SYMBOL || opponentBoard.grid[x][y] == MISS_SYMBOL);

   if (opponentBoard.grid[x][y] == SHIP_SYMBOL)

   {

       cout << "Комп'ютер влучив у ваш корабель!" << endl;

       opponentBoard.grid[x][y] = HIT_SYMBOL;

   }

   else

   {

       cout << "Комп'ютер промахнувся." << endl;

       opponentBoard.grid[x][y] = MISS_SYMBOL;

   }

}

// Функція для інтелектуальної гри комп'ютера

void computerIntelligentShoot(Board &opponentBoard, vector<pair<int, int>> &possibleMoves)

{

   int index = rand() % possibleMoves.size();

   int x = possibleMoves[index].first;

   int y = possibleMoves[index].second;

   possibleMoves.erase(possibleMoves.begin() + index);

   if (opponentBoard.grid[x][y] == SHIP_SYMBOL)

   {

       cout << "Комп'ютер влучив у ваш корабель!" << endl;

       opponentBoard.grid[x][y] = HIT_SYMBOL;

   }

   else

   {

       cout << "Комп'ютер промахнувся." << endl;

       opponentBoard.grid[x][y] = MISS_SYMBOL;

   }

}

// Функція для гри між гравцем і комп'ютером

void playHumanVsComputer()

{

   Board playerBoard, computerBoard;

   vector<pair<int, int>> possibleMoves;

   clearScreen();

   cout << "Гравець, розташуйте свої кораблі." << endl;

   playerBoard.display();

   playerBoard.placeShips();

   cout << "Комп'ютер розташовує свої кораблі..." << endl;

   computerBoard.placeShips();

   clearScreen();

   cout << "Гра розпочалась!" << endl;

   while (true)

   {

       cout << "Ваш хід:" << endl;

       cout << "Ваше поле:" << endl;

       playerBoard.display();

       cout << "Поле комп'ютера:" << endl;

       computerBoard.display();

       int x, y;

       cout << "Введіть координати (x, y) для пострілу: ";

       cin >> x >> y;

       while (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE || computerBoard.grid[x][y] == HIT_SYMBOL || computerBoard.grid[x][y] == MISS_SYMBOL)

       {

           cout << "Некоректні координати. Спробуйте ще раз: ";

           cin >> x >> y;

       }

       if (computerBoard.grid[x][y] == SHIP_SYMBOL)

       {

           cout << "Ви влучили у корабель комп'ютера!" << endl;

           computerBoard.grid[x][y] = HIT_SYMBOL;

           if (computerBoard.checkWin())

           {

               cout << "Ви перемогли!" << endl;

               break;

           }

       }

       else

       {

           cout << "Ви промахнулися." << endl;

           computerBoard.grid[x][y] = MISS_SYMBOL;

       }

       cout << "Хід комп'ютера:" << endl;

       computerRandomShoot(playerBoard);

       if (playerBoard.checkWin())

       {

           cout << "Комп'ютер переміг!" << endl;

           break;

       }

   }

}

// Функція для гри між двома комп'ютерами

void playComputerVsComputer()

{

   Board board1, board2;

   vector<pair<int, int>> possibleMoves;

   cout << "Перший комп'ютер розташовує свої кораблі..." << endl;

   board1.placeShips();

   cout << "Другий комп'ютер розташовує свої кораблі..." << endl;

   board2.placeShips();

   clearScreen();

   cout << "Гра розпочалась!" << endl;

   while (true)

   {

       cout << "Хід першого комп'ютера:" << endl;

       computerRandomShoot(board2);

       if (board2.checkWin())

       {

           cout << "Перший комп'ютер переміг!" << endl;

           break;

       }

       cout << "Хід другого комп'ютера:" << endl;

       computerIntelligentShoot(board1, possibleMoves);

       if (board1.checkWin())

       {

           cout << "Другий комп'ютер переміг!" << endl;

           break;

       }

   }

}

int main()

{

   srand(static_cast<unsigned>(time(0)));

   int choice;

   cout << "Виберіть режим гри:" << endl;

   cout << "1. Людина проти комп'ютера" << endl;

   cout << "2. Комп'ютер проти комп'ютера" << endl;

   cout << "Ваш вибір: ";

   cin >> choice;

   if (choice == 1)

       playHumanVsComputer();

   else if (choice == 2)

       playComputerVsComputer();

   else

       cout << "Некоректний вибір." << endl;

   return 0;

}

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