Вопрос задан 25.10.2023 в 21:43. Предмет Информатика. Спрашивает Рымкул Бекасыл.

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

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

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Керейбаев Толеген.

Ответ:

Попробуй

Объяснение:

#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;

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Створення повноцінної гри "Морський бій" вимагає багато коду, але я можу надати вам загальну структуру та ідеї, як реалізувати цю гру на мові програмування C++.

Для початку, вам знадобляться класи та функції, що представляють елементи гри. Ось загальна структура гри:

  1. Клас Game: Цей клас буде відповідати за основну логіку гри. Він буде містити методи для початку гри, ходу гравця, ходу комп'ютера та перевірки на завершення гри.

  2. Клас Player: Цей клас буде відповідати за гравця, його поле з кораблями та методи для взаємодії з полем (розстановка кораблів, стрільба тощо).

  3. Клас ComputerPlayer: Цей клас буде представляти комп'ютерного гравця і мати різні режими гри (випадковий постріл, інтелектуальна гра). У режимі інтелектуальної гри, комп'ютер може будувати стратегію гри, вибираючи потенційні цілі на основі результатів попередніх ходів.

  4. Клас Board: Цей клас буде відповідати за зберігання і відображення стану ігрового поля для кожного гравця (гравець та комп'ютер).

  5. Інші допоміжні класи: Наприклад, клас для представлення кораблів і їх стану, а також можливо класи для відображення графічного інтерфейсу.

Ось заготовка коду на C++ для створення такої гри:

cpp
#include <iostream> class Board { // Клас для представлення ігрового поля гравця // Включає методи для розстановки кораблів і відображення поля. }; class Ship { // Клас для представлення кораблів // Може включати інформацію про розташування та стан кораблів. }; class Player { // Клас для представлення гравця // Включає метод
0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос