Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба7 / Laba 7 (8)
.cpp#include <iostream>
#include <string>
#include <map>
#include <stdexcept>
#include <clocale>
#include <locale>
using namespace std;
enum class Color { White, Black };
class ChessBoard {
private:
map<string, pair<string, Color>> board;
bool isValidSquare(const string& pos) {
return pos.length() == 2 &&
pos[0] >= 'a' && pos[0] <= 'h' &&
pos[1] >= '1' && pos[1] <= '8';
}
bool isWhiteSquare(const string& pos) {
return (pos[0] - 'a' + pos[1] - '1') % 2 == 0;
}
public:
ChessBoard() {
// Пример начальной расстановки
board["a1"] = {"Ладья", Color::White};
board["b1"] = {"Конь", Color::White};
board["c1"] = {"Слон", Color::White};
board["a8"] = {"Ладья", Color::Black};
board["c8"] = {"Слон", Color::Black};
// Проверка в конструкторе: чёрный слон не на белой клетке
for (const auto& sq : board) {
string pos = sq.first;
auto piece = sq.second;
if (piece.first == "Слон" && piece.second == Color::Black && isWhiteSquare(pos))
throw "Чёрный слон не может находиться на белой клетке.";
}
}
void step(const string& piece, Color color, const string& to) {
if (!isValidSquare(to))
throw "Некорректная клетка.";
// Проверка для слона
if (piece == "Слон") {
if (color == Color::Black && isWhiteSquare(to))
throw "Чёрный слон не может переместиться на белую клетку.";
if (color == Color::White && !isWhiteSquare(to))
throw "Белый слон не может переместиться на чёрную клетку.";
}
// Проверка для пешки (пример)
if (piece == "Пешка") {
if (color == Color::White && to[1] <= '1')
throw "Белая пешка не может переместиться на 1-ю горизонталь.";
if (color == Color::Black && to[1] >= '8')
throw "Чёрная пешка не может переместиться на 8-ю горизонталь.";
}
// Проверка для короля (дополнительная проверка)
if (piece == "Король") {
// Проверка хода больше чем на 1 клетку
cout << "Король делает ход на " << to << endl;
}
cout << piece << " перемещена на " << to << endl;
}
};
int main() {
setlocale(LC_ALL, "ru_RU.UTF-8");
locale::global(locale("ru_RU.UTF-8"));
wcout.imbue(locale("ru_RU.UTF-8"));
cout.imbue(locale("ru_RU.UTF-8"));
try {
ChessBoard cb;
// Тестовые примеры
cout << "=== Тест 1: Чёрный слон на чёрную клетку ===" << endl;
cb.step("Слон", Color::Black, "b3"); // b3 - чёрная клетка
cout << "\n=== Тест 2: Чёрный слон на белую клетку ===" << endl;
cb.step("Слон", Color::Black, "a3"); // a3 - белая клетка (ошибка)
}
catch (const char* msg) {
cerr << "Ошибка: " << msg << endl;
}
try {
ChessBoard cb2;
cout << "\n=== Тест 3: Пешка на некорректную горизонталь ===" << endl;
cb2.step("Пешка", Color::White, "a1"); // ошибка для пешки
}
catch (const char* msg) {
cerr << "Ошибка: " << msg << endl;
}
return 0;
}
Соседние файлы в папке Лаба7
