Блог для маленьких школьников и их родителей
ШколаЛа

С++ Створіть гру «Морський Бій». Головні особливості реалізації гри: ● Режими гри: o Людина — комп’ютер….

Автор:
Предмет: Информатика
Уровень: студенческий

С++

Створіть гру «Морський Бій».

Головні особливості реалізації гри:

● Режими гри:

o Людина — комп’ютер.

o Комп’ютер — комп’ютер.

● Розміщення кораблів:

o Гравець розставляє вручну.

o Комп’ютер розставляє замість гравця.

● Комп’ютер може грати у двох режимах:

o Випадковий постріл.

o Інтелектуальна гра. Комп’ютер будує стратегію гри, а не

стріляє випадково.

● Відображати поточний стан ігрового поля гравця та комп’ютера.

● Можливість зупинки, припинення, нового запуску гри

Ответов к вопросу: 1
  • magicowl68
    08.06.2024 | 14:13

    Ответ:
    Попробуй
    Объяснение:
    #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;
    }

Ответить на вопрос:
:p :-p 8) 8-) :lol: =( :( :-( :8 ;) ;-) :(( :o:
Нажимая на кнопку я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.