Предмет: Информатика, автор: Kukuwka0Ha0DepeBe

С++
Створіть гру «Морський Бій»..
Головні особливості реалізації гри:
● Режими гри:
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;

}

Похожие вопросы
Предмет: Математика, автор: ludmilavasilisina206
Предмет: Математика, автор: rybiiliza
Предмет: Обществознание, автор: aboblak
40 баллов даю срочно) 1. Социальные нормы, которые закрепляются в законах, издаваемых государством и четко описывают границы поведения и наказания за нарушение закона - это … а) нормы обычая в) моральные нормы б) политические нормы г) правовые нормы 2. Процесс постепенных изменений в обществе, не приводящих к качественно новому социальному строю – это … а) стагнация в) депрессия б) эволюция г) революция 3. Какие два фактора влияют на формирование стихийного общественного мнения... а) социальные предрассудки в) жизненный опыт людей б) средства массовой информации г) профсоюзы 4. Общество как система характеризуется а) оседлостью в) национальными границами б) иерархичностью г) статичностью 5. Социальная организация чаше всего приобретает структурную форму … а) параллелограмма в) пирамиды б) шара г) куба 6. Двумя базовыми принципами гражданского общества являются… а) свобода человека как члена общества б) равенство человека с другими людьми в) централизованное планирование г) разделение властей 7. Функция социального института образования, связанная с передачей социального опыта, социальных норм и ценностей называется... а) функция социализации в) функция мобильности б) функция селекции г) функция интеграции 8. В современных условиях усиливается влияние России на мировой арене в … а) энергетической сфере в) сфере высоких технологий б) в сфере сельского хозяйства г) сфере производства металла 9. В типологию современных обществ входит общество а) неиндустриальное б) древнее в) культурное г) постиндустриальное 10. Семья в социологии понимается как а) союз двух лиц, основанный на традициях б) объединение индивидов для биологического воспроизводства населения в) общественный институт, основанный на браке и выполнении в обществе определенной функции г) государственная структура, основанная на браке и законах, регулирующих семейные отношения 11. Что не является внутренней функцией государства? а) сотрудничество с другими государствами б) охрана собственности в) охрана правопорядка г) социальная защита населения д) оказание разносторонних услуг членам общества 12. Форма государственного правления - это: а) порядок организации верховной власти в государстве б) способ реализации государственной власти в) порядок распределения власти между государством и его составными частями г) способ осуществления государственной власти определенными методами и приемами д) принцип разделения государственной власти на законодательную, исполнительную и судебную 13. Государство - это: а) общность людей б) публичная организация политической власти в обществе в) территория с проживающим на ней населением 14. Карл Марке определял государство как: а) механизм достижения общественного благоденствия б) машину дня подавления одного класса другим в) источник социальной справедливости 15. Экономический доход в пользу малоимущих слоев населения в большей степени склонно перераспределять: а) социальное государство б) правовое государство в) полицейское государство 16. Понятие «Государство» но отношению к понятию «Политическая система» является: а) более широкий и универсальным б) тождественным в) более узким г) принципиально не сопоставимым 17. Является ли государство с республиканской формой правления обязательно демократическим государством? а) нет, авторитарное и тоталитарное государство может характеризоваться республиканской формой правления б) да, демократическим может считаться только государство с республиканской формой правления в) да, монархическая форма правления является отличительной чертой авторитарных государств 18. Проникновение государства во все сферы общественной жизни характеризует: а) тоталитарный режим б) авторитарный режим в) демократический режим 19. Верно ли высказывание о том, что в любом государстве источником власти является народ? а) да, поскольку государство выделилось из общества б) нет, поскольку в государствах, характеризующихся недемократическим политическим режимом, народ не является источником власти в) да, поскольку в современных демократических государствах народ - источник власти 20. Порядок избрания главы государства и его компетенцию определяет: а) государственное право в) административное право б) гражданское право г) трудовое право