Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 21.05.2018, 23:41   #1 (permalink)
CJKhalid
Новичок
 
Регистрация: 21.05.2018
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию C++ Chess

Доброго времени!
Может у кого есть код консольных шахмат в VS C++,сам путаюсь с классами.Вероятно,вы знаете способы проще?
Поделитесь,пожалуйста,буду очень благодарен!
CJKhalid вне форума   Ответить с цитированием

Старый 21.05.2018, 23:41
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На форуме так же найдены темы которые имеют сходства с вашей

Chess Clock - шахматное время

Старый 22.05.2018, 20:24   #2 (permalink)
Гризлик
Мимо проходил
 
Аватар для Гризлик
 
Регистрация: 06.04.2008
Сообщений: 13,130
Сказал(а) спасибо: 21
Поблагодарили 18 раз(а) в 5 сообщениях
Репутация: 15127
По умолчанию

Код:
#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++, помощь отчаянным

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 11:04.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.