Untitled

mail@pastecode.io avatar
unknown
c_cpp
a year ago
5.8 kB
1
Indexable
Never
#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;
}