Untitled
unknown
c_cpp
3 years ago
5.8 kB
9
Indexable
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// Структура для хранения информации о каждой фигуре на доске
struct Piece {
char type; // Тип фигуры: 'P' - пешка, 'R' - ладья, 'N' - конь, 'B' - слон, 'Q' - ферзь, 'K' - король
char color; // Цвет фигуры: 'W' - белый, 'B' - черный
int row; // Номер строки, на которой стоит фигура (1-8)
int col; // Номер столбца, на котором стоит фигура (A-H)
};
// Функция для вывода доски на экран
void print_board(vector<vector<char>> board) {
for (int i = 0; i < 8; i++) {
cout << 8 - i << " ";
for (int j = 0; j < 8; j++) {
cout << board[i][j] << " ";
}
cout << endl;
}
cout << " A B C D E F G H" << endl;
}
// Функция для создания начальной расстановки фигур на доске
vector<Piece> create_starting_position() {
vector<Piece> pieces;
// Белые фигуры
pieces.push_back({'R', 'W', 1, 1});
pieces.push_back({'N', 'W', 1, 2});
pieces.push_back({'B', 'W', 1, 3});
pieces.push_back({'Q', 'W', 1, 4});
pieces.push_back({'K', 'W', 1, 5});
pieces.push_back({'B', 'W', 1, 6});
pieces.push_back({'N', 'W', 1, 7});
pieces.push_back({'R', 'W', 1, 8});
for (int i = 1; i <= 8; i++) {
pieces.push_back({'P', 'W', 2, i});
}
// Черные фигуры
pieces.push_back({'R', 'B', 8, 1});
pieces.push_back({'N', 'B', 8, 2});
pieces.push_back({'B', 'B', 8, 3});
pieces.push_back({'Q', 'B', 8, 4});
pieces.push_back({'K', 'B', 8, 5});
pieces.push_back({'B', 'B', 8, 6});
pieces.push_back({'N', 'B', 8, 7});
pieces.push_back({'R', 'B', 8, 8});
for (int i = 1; i <= 8; i++) {
pieces.push_back({'P', 'B', 7, i});
}
return pieces;
}
// Функция для получения координат фигуры на доске по ее номеру строки и столбца
// Например, для фигуры, стоящей на 2-й строке и 3-м столбце, функция вернет "C2"
string get_square(int row, int col) {
char col_char = 'A' + col - 1;
char row_char = '0' + row;
string square = "";
square += col_char;
square += row_char;
return square;
}
// Функция для получения номера строки и столбца на доске по координатам фигуры
// Например, для координат "C2" функция вернет номер строки 2 и номер столбца 3
pair<int, int> get_coordinates(string square) {
int col = square[0] - 'A' + 1;
int row = square[1] - '0';
return make_pair(row, col);
}
// Функция для проверки, находится ли фигура на доске по заданным координатам
bool is_piece_on_square(vector<Piece> pieces, int row, int col) {
for (Piece piece : pieces) {
if (piece.row == row && piece.col == col) {
return true;
}
}
return false;
}
// Функция для получения информации о фигуре на заданных координатах
Piece get_piece_on_square(vector<Piece> pieces, int row, int col) {
for (Piece piece : pieces) {
if (piece.row == row && piece.col == col) {
return piece;
}
}
}
// Основная функция, в которой происходит игра
int main() {
vector<vector<char>> board(8, vector<char>(8, '.'));
vector<Piece> pieces = create_starting_position();
for (Piece piece : pieces) {
int row = piece.row - 1;
int col = piece.col - 1;
board[row][col] = piece.type;
}
print_board(board);
bool game_over = false;
bool white_turn = true;
while (!game_over) {
string input;
if (white_turn) {
cout << "Ход белых: ";
} else {
cout << "Ход черных: ";
}
cin >> input;
if (input == "quit") {
break;
}
string from_square = input.substr(0, 2);
string to_square = input.substr(2, 2);
pair<int, int> from_coord = get_coordinates(from_square);
pair<int, int> to_coord = get_coordinates(to_square);
int from_row = from_coord.first;
int from_col = from_coord.second;
int to_row = to_coord.first;
int to_col = to_coord.second;
Piece from_piece = get_piece_on_square(pieces, from_row, from_col);
Piece to_piece = get_piece_on_square(pieces, to_row, to_col);
if (from_piece.type == '.') {
cout << "На этом поле нет фигуры!" << endl;
} else if (from_piece.color == 'W' && !white_turn) {
cout << "Сейчас не ход белых!" << endl;
} else if (from_piece.color == 'B' && white_turn) {
cout << "Сейчас не ход черных!" << endl;
} else if (is_piece_on_square(pieces, to_row, to_col) && from_piece.color == to_piece.color) {
cout << "На этом поле стоит фигура того же цвета!" << endl;
} else {
// TODO: Проверка корректности хода и обновление доски и списка фигур
white_turn = !white_turn;
print_board(board);
}
}
return 0;
}Editor is loading...