Untitled
unknown
c_cpp
2 years ago
5.8 kB
4
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...