21.05.2018, 23:41 | #1 (permalink) |
Новичок
Регистрация: 21.05.2018
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
C++ Chess
Может у кого есть код консольных шахмат в VS C++,сам путаюсь с классами.Вероятно,вы знаете способы проще? Поделитесь,пожалуйста,буду очень благодарен! |
21.05.2018, 23:41 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
На форуме так же найдены темы которые имеют сходства с вашей Chess Clock - шахматное время |
22.05.2018, 20:24 | #2 (permalink) |
Мимо проходил
Регистрация: 06.04.2008
Сообщений: 13,130
Сказал(а) спасибо: 21
Поблагодарили 18 раз(а) в 5 сообщениях
Репутация: 15356
|
Код:
#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{ "Kw" }, Kb{ "Kb" }, Qw{ "Qw" }, Qb{ "Qb" }, Rw{ "Rw" }, Rb{ "Rb" }, Nw{ "Nw" }, Nb{ "Nb" }, Bw{ "Bw" }, Bb{ "Bb" }, Pw{ "Pw" }, Pb{ "Pb" } { } }; void doska_print() // Вывод доски и фигур на экран { system("cls"); // Очищаем консоль (для Windows. В *Nix вроде не "канает") char num = 'a'; // Для вывода указателей столбцов (a,b,c,d ...) cout << "|Выход 'Ctrl+Z'|" << endl; cout << "\t\t\t Консольные шахматы v 1.0" << endl << "\t\t\tПример хода: 'e2 e4' через пробел" << endl << "\t\t (пешка белых пошла с позиции e2 на e4)"; cout << "\n\n"; 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; } |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Метки |
c++, помощь отчаянным |
|
|