Skip to content

666mxvbee/BattleShip

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Battleship (C++)

Описание:
Этот проект — классическая игра «Морской бой» на C++, где два игрока (Master и Slave) взаимодействуют друг с другом с помощью служебных файлов.

  • Master определяет размеры поля, количество кораблей и начинает игру.

  • Slave автоматически считывает все настройки от Master.

Содержание

  1. Особенности проекта
  2. Структура проекта
  3. Сборка
  4. Команды Master
  5. Команды Slave
  6. Очередность ходов
  7. Пример процесса игры
  8. Служебные файлы

Особенности проекта

  • Игра расчитана на два независимых терминала, каждый исполняемый файл (master_main.exe и slave_main.exe) запускается отдельно.
  • Master задаёт настройки и видит только собственные корабли.
  • Slave получает настройки автоматически и также видит только собственные корабли.
  • Чужие корабли (противника) и их координаты не выводятся, чтобы исключить «читы».
  • Логика ходов организована через файл queue.txt:
    • 1 означает ход Master
    • 2 означает ход Slave

Структура проекта

Battleship/
├── bin/
│   ├── master_main.cpp
│   └── slave_main.cpp
├── lib/
│   ├── Master/
│   ├── Slave/
│   ├── Settings/
│   ├── ReadWriteQueue/
│   ├── Ship/
│   └── RandomShips/
│   ├── Utils/
│   ├── Commands/

├── CMakeLists.txt
└── README.md
  • bin содержит исполняемые точки входа:

    • master_main.cpp
    • slave_main.cpp
  • lib хранит логику игры (классы Master, Slave, Settings, RandomShips и т. д.).

  • CMakeLists.txt — скрипт для сборки через CMake.

Сборка

  1. Убедитесь, что у вас установлен CMake (3.10+) и компилятор C++ (например, g++ или clang++).

  2. В корне репозитория (папка Battleship/) выполните:

    mkdir build
    cd build
    cmake ..
    cmake --build . --config Release
  3. После сборки в папке build/Release появятся файлы:

  • master_main.exe_
  • slave_main.exe

Команды Master

  • set mode master
  • set width
  • set height
  • set count (например, set count 4 1 — добавить 1 корабль длины 4)
  • start — начинает игру, расставляет корабли Master и ждёт, пока Slave расставит свои.
  • shot X Y — совершить выстрел. Если промах, ход перейдёт к Slave; если попадание — ход останется у Master.
  • stop — остановить текущую игру.
  • exit — полностью выйти из приложения.

Пример использования:

Master: Enter commands (e.g. set mode master, set width 10, set height 10, set count 4 1, start):
> set mode master
> set width 10
> set height 10
> set count 1 4   # Четыре корабля длины 1
> set count 2 2   # Два корабля длины 2
> start

Команды Slave

  • shot X Y — сделать выстрел, если это ход Slave.
  • exit — выйти из игры.
  • Все прочие настройки (ширина, высота и т. д.) Slave не задаёт — они приходят автоматически от Master.

Очередность ходов

  • Хранится в файле queue.txt: 1 = Master, 2 = Slave.

  • Если игрок промахивается, ход переходит к противнику; если попал или потопил корабль, ход остаётся у него.

  • При смене очереди в терминале нового игрока появляется строка вида:

    [Slave] Now it's your turn.
    

    или

    [Master] Now it's your turn.
    

Пример процесса игры

  1. Slave запускается первым и сообщает:

    Slave: Waiting for game to start...
  2. Master запускается вторым и задаёт команды:

    > set mode master
    > set width 10
    > set height 10
    > set count 1 4
    > set count 2 2
    > start
  3. Master расставляет собственные корабли (master_ships.txt), затем ждёт, пока Slave расставит свои (slave_ships.txt).

  4. Когда расстановка завершена, начинается фаза выстрелов: Master вводит shot X Y и сразу видит Master: You hit a Slave ship at (X, Y). или Master: You missed.... При промахе ход переходит к Slave, и в терминале Slave появляется:

    [Slave] Now it's your turn.
    
  5. Slave делает выстрел командой shot X Y, получает ответ (You hit, You missed, и т. д.).

  6. Как только все корабли одного из игроков будут уничтожены, игра выводит победителя (например, Master: All Slave ships have been sunk. Master wins!).

  7. При желании можно ввести stop (прекращает игру, но остаётесь в приложении) или exit (полный выход).

Служебные файлы

В папке ../game_data/ (относительно исполняемых .exe) будут создаваться:

  • settings.txt — настройки (ширина, высота, количество кораблей и т. д.).
  • master_ships.txt / slave_ships.txt — позиции кораблей Master/Slave.
  • queue.txt — хранит текущего игрока (1 или 2).
  • shots.txt — логи выстрелов.

About

Battleship with 2 terminals

Resources

License

Stars

Watchers

Forks

Packages

No packages published