Uploaded by dmitry555volkov

морской бой на с

advertisement
cpp
#include <iostream>
#include <vector>
// Размер игрового поля
const int fieldSize = 10;
// Структура для хранения координат клетки поля
struct Point {
int x;
int y;
};
// Класс для хранения информации о корабле
class Ship {
public:
std::vector<Point> body; // Тело корабля - массив координат клеток
// Конструктор, который создает корабль на поле
Ship(Point position, int size, bool horizontal) {
for (int i = 0; i < size; ++i) {
Point p = position;
if (horizontal) {
p.x += i;
} else {
p.y += i;
}
body.push_back(p);
}
}
};
// Класс для хранения информации о состоянии игры
class Game {
public:
std::vector<Ship> ships; // Список кораблей на поле
bool field[fieldSize][fieldSize]; // Игровое поле
// Конструктор, который инициализирует игру
Game() {
for (int i = 0; i < fieldSize; ++i) {
for (int j = 0; j < fieldSize; ++j) {
field[i][j] = false;
}
}
}
// Функция для проверки корректности координат клетки
bool isValidPoint(Point p) {
return p.x >= 0 && p.x < fieldSize && p.y >= 0 && p.y < fieldSize;
}
// Функция для проверки, является ли данная клетка частью корабля
bool isShipCell(Point p) {
for (const Ship& ship : ships) {
for (const Point& point : ship.body) {
if (point.x == p.x && point.y == p.y) {
return true;
}
}
}
return false;
}
// Функция для вывода игрового поля на экран
void printField() {
for (int i = 0; i < fieldSize; ++i) {
for (int j = 0; j < fieldSize; ++j) {
Point currentCell = {j, i};
if (isShipCell(currentCell)) {
std::cout << "X ";
} else {
std::cout << ". ";
}
}
std::cout << std::endl;
Download