Untitled
unknown
plain_text
2 years ago
4.8 kB
4
Indexable
#include<iostream> #include <string> using namespace std; string buff; // Буфер хранения фигуры bool flag_buff = false; // Флаг буфера string doska[9][9]; // Массив представления bool doska_b[9][9]; // Массив состояния int sum_hod = 0; // Считаем полуходы struct Figura // Фигуры { string Kw, Kb, Qw, Qb, Rw, Rb, Nw, Nb, Bw, Bb, Pw, Pb; Figura() : Kw{ "♔" }, Kb{ "♚" }, Qw{ "♕" }, Qb{ "♛" }, Rw{ "♗" }, Rb{ "♝" }, Nw{ "♘" }, Nb{ "♞" }, Bw{ "♖" }, Bb{ "♜" }, Pw{ "♙" }, Pb{ "♟" } { } }; void doska_print() // Вывод доски и фигур на экран { system("cls"); // Очищаем консоль (для Windows. В *Nix вроде не "канает") char num = 'A'; // Для вывода указателей столбцов (a,b,c,d ...) cout << "\n\n"; if (sum_hod % 2 == 0 & sum_hod > 0 | sum_hod == 1) { for (int i = 0; i < 8; i++) { cout << "\t\t\t" << 8 - i; for (int j = 0; j < 9; j++) { cout << doska[7-i][7-j]; } cout << endl; } } else { for (int i = 0; i < 8; i++) { cout << "\t\t\t" << 8 - i; for (int j = 0; j < 9; j++) { cout << doska[i][j]; } cout << endl; } } cout << "\t\t\t"; for (int i = 1; i < 9; i++) { cout << " " << num; ++num; } if (sum_hod % 2 == 0 & sum_hod > 0 | sum_hod == 1) { cout << endl << "Ход черных: "; // Приглашение к ходу } else { cout << endl << "Ход белых: "; } } void doska_default() { // Начальное положение доски и фигур Figura f; for (int i = 0; i < 8; i++) { for (int j = 1; j < 9; j++) { doska[i][j] = "| | "; doska_b[i][j] = 0; } } for (int i = 1; i < 9; i++) { doska[1][i] = "|" + f.Pb + "|"; doska_b[1][i] = 1; doska[6][i] = "|" + f.Pw + "|"; doska_b[6][i] = 1; } doska[0][1] = doska[0][8] = "|" + f.Bb + "|"; doska_b[0][1] = doska_b[0][8] = 1; doska[7][1] = doska[7][8] = "|" + f.Bw + "|"; doska_b[7][1] = doska_b[7][8] = 1; doska[0][2] = doska[0][7] = "|" + f.Nb + "|"; doska_b[0][2] = doska_b[0][7] = 1; doska[7][2] = doska[7][7] = "|" + f.Nw + "|"; doska_b[7][2] = doska_b[7][7] = 1; doska[0][3] = doska[0][6] = "|" + f.Rb + "|"; doska_b[0][3] = doska_b[0][6] = 1; doska[7][3] = doska[7][6] = "|" + f.Rw + "|"; doska_b[7][3] = doska_b[7][6] = 1; doska[0][4] = "|" + f.Qb + "|"; doska_b[0][4] = 1; doska[0][5] = "|" + f.Kb + "|"; doska_b[0][5] = 1; doska[7][4] = "|" + f.Qw + "|"; doska_b[7][4] = 1; doska[7][5] = "|" + f.Kw + "|"; doska_b[7][5] = 1; doska_print(); // Выводим доску и фигуры } void doska_figura_remove(int x, int y) // Удаляет фигуру из указанной позиции { doska[8 - y][8 - (104 - x)] = "| |"; } void doska_hod(int x, int y) // Выполнить ход (только ход, не обработчик игрового сюжета) { if (doska_b[8 - y][8 - (104 - x)] == 1) { // В клетке стоит фигура buff = doska[8 - y][8 - (104 - x)]; // Фигуру в буфер doska_figura_remove(x, y); // Удалить фигуру с доски doska_b[8 - y][8 - (104 - x)] = 0; // Состояние клетки в false flag_buff = true; // Поднять флаг (буфер не пустой)... Возможно понадобится } else { // В клетке пусто doska[8 - y][8 - (104 - x)] = buff; // Поставить фигуру из буфера в клетку doska_b[8 - y][8 - (104 - x)] = 1; // Состояние клетки в true (не пуста) buff = ""; // Обнулить буфер flag_buff = false; // Опустить флаг, буфер свободен doska_print(); // Выводим доску и фигуры } ++sum_hod; // Увеличим счетчик полуходов } int main() { setlocale(0, "Russian"); doska_default(); int str = 0; char stb = 0; while (cin >> stb >> str) { doska_hod(stb, str); } return 0; }
Editor is loading...