Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.88
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
#1

программный код по ШАхматам С++ - C++

14.04.2013, 12:36. Просмотров 4013. Ответов 22
Метки нет (Все метки)

Прошу помочь с программным кодом по шахматам подсказать что изменить или что добавить.
Мне была дана задача сделать класс матрицы игры в шахматы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include<iostream.h>
#include<string.h>
struct coord
{
    int x,y;
 
};
char mas[8][8]={0};
int cntl(coord f)
{
    if((f.x>=0)&&(f.x<8)&&(f.y>=0)&&(f.y<8)) return 1;
    else return 0;
}
void doska()
{
    char a[8]={'A','B','C','D','E','F','G','H'};
    cout<<"   ";
    for(int i=0;i<8;i++) cout<<a[i]<<" ";
    cout<<endl;
    cout<<"   ";
    for( i=0;i<8;i++) cout<<"- ";
    cout<<endl;
    for( i=0;i<8;i++)
    {
        cout<<"| "<<i+1;
        for(int j=0;j<8;j++) cout<<mas[i][j]<<" ";
        cout<<endl;
    }
 
}
void scan(coord &f)
{
    char t=0;
    cin>>t;
    f.y=t-0;
    cin>>f.x;
    f.x--;
    cout<<f.x<<f.y<<endl;
}
int checkpos(int x,int y)
{
    if(x>=0 && x<8 && y>=0 && y<8) return 1;
    else return 0;
}
int checkmove(int x,int y)
{
    int h_x[8]={-2,-2,-1,-1,1,1,2,2};
    int h_y[8]={-1,1,-2,2,-2,2,-1,1};
    for (int i=x-1;i<x+2;i++)
    {
        for(int j=y-1;j<y+2;j++)
        {
            if(i== x && j==y) continue;
            if(checkpos(i,j)==0) continue;
            if(mas[i][j]=='k') return 1;
    
        };
    };
    for (i=1; i<8;i++)
    {
        if(checkpos(x+i,y+i)==1)
            if (mas[x+i][y+i]=='s') return 1;
        if(checkpos(x-i,y-i)==1)
            if (mas[x-i][y-i]=='s') return 1;
        if(checkpos(x-i,y+i)==1)
            if (mas[x-i][y+i]=='s') return 1;
        if(checkpos(x+i,y-i)==1)
            if (mas[x+i][y-i]=='s') return 1;
    };
    for (i=1; i<8;i++)
    {       if(checkpos(x+h_x[i],y+h_y[i])==0) continue;
            if (mas[x+h_x[i]][y+h_y[i]]=='h') return 1;
    };
    return 0;
 
}
 
void main()
{
    int check,mat;
    coord b_king;
    coord b_knigth;
    coord b_bishop;
    coord w_king;
    check=0;
    mat=1;
    doska();
m1: cout<<"vvedite mestopolozhenie korol9:  \n";
//  cin>>Êîðîëü Г·ГҐГ°Г*ûõ;
    cin>>b_king.x;
    cin>>b_king.y;
    if(!cntl(b_king)) goto m1;
    mas[b_king.x][b_king.y]='k';
    doska();
m2: cout<<"vvedite mestopolozhenie korolevu:  \n";
//  cin>>ÊîðîëåâГ* Г·ГҐГ°Г*ûõ;
    cin>>b_knigth.x;
    cin>>b_knigth.y;
    if(!cntl(b_knigth)) goto m2;
    mas[b_knigth.x][b_knigth.y]='h';
    doska();
m3: cout<<"vvedite coord b_bishop:  ";
//  cin>>Îôèöåð Г·ГҐГ°Г*ûõ;
    cin>>b_bishop.x;
    cin>>b_bishop.y;
    if(!cntl(b_bishop)) goto m3;
    mas[b_bishop.x][b_bishop.y]='s';
    doska();
m4: cout<<"vvedite coord w_king:  ";
//  cin>>Êîðîëü áåëûõ;
    cin>>w_king.x;
    cin>>w_king.y;
    if(!cntl(w_king)) goto m4;
    mas[w_king.x][w_king.y]='K';
    doska();
if (checkmove(w_king.x,w_king.y)==1) check=1;
for(int i=w_king.x-1;i<w_king.x+2;i++)
{
    for(int j=w_king.y-1; j<w_king.y+2;j++)
    {
        if(i==w_king.x && i==w_king.y) continue;
        if(checkpos(i,j)==0) continue;
        if (checkmove(i,j)) mat=0;
    };
};
{if (check==0 && mat==0)
cout<<"obichanaya pozicia"<<endl;
if (check==0 && mat==1)
cout<<"patovaya pozicia"<<endl;
if (check==1 && mat==0)
cout<<"shahovaya pozicia"<<endl;
if (check==1 && mat==1)
cout<<"matovaya pozicia"<<endl;
}
 
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2013, 12:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос программный код по ШАхматам С++ (C++):

Исправить программный код - C++
Вот программный код. При компиляции не показывает ошибок хотя она там есть я не могу её найти. P.S. C++ начал изучать недавно. ...

Программный код С++ не компилируется в Dev-C++ - C++
ругается на 9 строку #include &lt;cstdlib&gt; #include &lt;iostream&gt; void Kramer(double C,double D);//Prototip funkcii void...

напишите пожалуйста программный код - C++
1. * результаты выполнения программы: o значение точности e, o номера и значения n...

Программный код С++ не компилируется в Dev-C++ - C++
Здравствуйте помогите пожалуйста скоро защита курсовой. Скачал с инета похожую курсовую там указано что программа написана на С++ ну вот...

Нужно по блоксхеме написать программный код на с++ - C++

Найти сумму, используя программный код - C++
Ребят, помогите мне преобразовать в код под си++ и найти сумму

22
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
14.04.2013, 20:46 #2
Как можно скорее поменять магические числа на константы
0
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
14.04.2013, 22:50  [ТС] #3
Croessmah, Всмысле? Можно поподробнее?
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 760
14.04.2013, 22:57 #4
сделать класс матрицы игры в шахматы
эмм... и где у вас вообще класс?
кроме координат других классов не вижу
1
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
14.04.2013, 23:20  [ТС] #5
Цитата Сообщение от abit Посмотреть сообщение
эмм... и где у вас вообще класс?
кроме координат других классов не вижу
Сможете помочь в переделывании этой программы под условие? Я просто видимо не так понял условие.

Добавлено через 6 минут
Цитата Сообщение от Leven9tko Посмотреть сообщение
void doska()
Тут я изменил на
C
1
class doska()
Добавлено через 6 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include<iostream.h>
#include<string.h>
struct coord
{
    int x,y;
 
};
char mas[8][8]={0};
int cntl(coord f)
{
    if((f.x>=0)&&(f.x<8)&&(f.y>=0)&&(f.y<8)) return 1;
    else return 0;
}
class doska()
{
    char a[8]={'A','B','C','D','E','F','G','H'};
    cout<<"   ";
    for(int i=0;i<8;i++) cout<<a[i]<<" ";
    cout<<endl;
    cout<<"   ";
    for( i=0;i<8;i++) cout<<"- ";
    cout<<endl;
    for( i=0;i<8;i++)
    {
        cout<<"| "<<i+1;
        for(int j=0;j<8;j++) cout<<mas[i][j]<<" ";
        cout<<endl;
    }
 
}
class scan(coord &f)
{
    char t=0;
    cin>>t;
    f.y=t-0;
    cin>>f.x;
    f.x--;
    cout<<f.x<<f.y<<endl;
}
int checkpos(int x,int y)
{
    if(x>=0 && x<8 && y>=0 && y<8) return 1;
    else return 0;
}
int checkmove(int x,int y)
{
    int h_x[8]={-2,-2,-1,-1,1,1,2,2};
    int h_y[8]={-1,1,-2,2,-2,2,-1,1};
    for (int i=x-1;i<x+2;i++)
    {
        for(int j=y-1;j<y+2;j++)
        {
            if(i== x && j==y) continue;
            if(checkpos(i,j)==0) continue;
            if(mas[i][j]=='k') return 1;
    
        };
    };
    for (i=1; i<8;i++)
    {
        if(checkpos(x+i,y+i)==1)
            if (mas[x+i][y+i]=='s') return 1;
        if(checkpos(x-i,y-i)==1)
            if (mas[x-i][y-i]=='s') return 1;
        if(checkpos(x-i,y+i)==1)
            if (mas[x-i][y+i]=='s') return 1;
        if(checkpos(x+i,y-i)==1)
            if (mas[x+i][y-i]=='s') return 1;
    };
    for (i=1; i<8;i++)
    {       if(checkpos(x+h_x[i],y+h_y[i])==0) continue;
            if (mas[x+h_x[i]][y+h_y[i]]=='h') return 1;
    };
    return 0;
 
}
 
void main()
{
    int check,mat;
    coord b_king;
    coord b_knigth;
    coord b_bishop;
    coord w_king;
    check=0;
    mat=1;
    doska();
m1: cout<<"vvedite mestopolozhenie 4ernogo korol9:  \n";
//  cin>>Êîðîëü Г·ГҐГ°Г*ûõ;
    cin>>b_king.x;
    cin>>b_king.y;
    if(!cntl(b_king)) goto m1;
    mas[b_king.x][b_king.y]='k';
    doska();
m2: cout<<"vvedite mestopolozhenie 4ernoy ferzi:  \n";
//  cin>>Ôåðçü Г·ГҐГ°Г*ûõ;
    cin>>b_knigth.x;
    cin>>b_knigth.y;
    if(!cntl(b_knigth)) goto m2;
    mas[b_knigth.x][b_knigth.y]='h';
    doska();
m3: cout<<"vvedite mestopolozhenie 4ernogo SloNA:  ";
//  cin>>Slon Г·ГҐГ°Г*ûõ;
    cin>>b_bishop.x;
    cin>>b_bishop.y;
    if(!cntl(b_bishop)) goto m3;
    mas[b_bishop.x][b_bishop.y]='s';
    doska();
m4: cout<<"vvedite mestopolozhenie belogo KOROL9t:  ";
//  cin>>Êîðîëü áåëûõ;
    cin>>w_king.x;
    cin>>w_king.y;
    if(!cntl(w_king)) goto m4;
    mas[w_king.x][w_king.y]='K';
    doska();
if (checkmove(w_king.x,w_king.y)==1) check=1;
for(int i=w_king.x-1;i<w_king.x+2;i++)
{
    for(int j=w_king.y-1; j<w_king.y+2;j++)
    {
        if(i==w_king.x && i==w_king.y) continue;
        if(checkpos(i,j)==0) continue;
        if (checkmove(i,j)) mat=0;
    };
};
{if (check==0 && mat==0)
cout<<"obichanaya pozicia"<<endl;
if (check==0 && mat==1)
cout<<"patovaya pozicia"<<endl;
if (check==1 && mat==0)
cout<<"shahovaya pozicia"<<endl;
if (check==1 && mat==1)
cout<<"matovaya pozicia"<<endl;
}
 
 
}
Тут немножко переделал.

Добавлено через 2 минуты
И кто может сделать так что бы кординаты можно было вводить в виде A2, H3 и т. д.?

Добавлено через 3 минуты
И как сделать так что бы при вводе координат программа проверяла есть ли там фигура? Если есть она возвращал с сообщение что сдесь находится фигура и заново нужно было вводить координаты.
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 760
14.04.2013, 23:27 #6
Тут я изменил на
C
1
class doska()
это точно ерунда

Я просто видимо не так понял условие.
я тем более не знаю вашего условия... то что вы написали- понятно только одно - надо сделать класс, в котором будут соответствующие поля и методы как public так и private...
но это очень размазано, там в шахматах очень много всего... типа проверок на сделана/не сделана рокировка, можно ли её делать в данной позиции, возможность пешки сделать первых ход на две клетки (тем самым поставив даже мат) и т.д. потом
C++
1
2
3
4
5
int checkpos(int x,int y)
{
    if(x>=0 && x<8 && y>=0 && y<8) return 1;
    else return 0;
}
- аналогично, в шахматах кроме того что вы описали тупо ходить на любую клетку - нельзя занимать две клетки одной фигурой, ходить через другие не конём, ставить короля под удар и вообще проверять доступность этого хода фигуре
неужели вам все это нужно учесть? это так вот сходу не напишешь... поля класса - легко ещё придумать, а вот с методами типа checkpos и checkmove я бы так не торопился...


Цитата Сообщение от Leven9tko Посмотреть сообщение
Сможете помочь в переделывании этой программы под условие?
так сходу и не скажу, это займёт приличное время - если реализовывать всё что, должно быть по хорошему...
1
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
14.04.2013, 23:44  [ТС] #7
Тут все это учитывать не нужно.
Задача звучит: Составить класс обработки матрицы игры в "Шахматы" и все больше ни каких условий. То есть как я понял не нужно именно создавать полноценную игру. А привести пример, рассположения фигур (в данной ситуации я взял
Цитата Сообщение от Leven9tko Посмотреть сообщение
coord b_king;
* * coord b_knigth;
* * coord b_bishop;
* * coord w_king;
И вывести какая это позиция.
ЧТо бы не так заморачиваться.

Добавлено через 3 минуты
Цитата Сообщение от abit Посмотреть сообщение
Код C++1
2
3
4
5
int checkpos(int x,int y)
{
* * if(x>=0 && x<8 && y>=0 && y<8) return 1;
* * else return 0;
} - аналогично, в шахматах кроме того что вы описали тупо ходить на любую клетку - нельзя занимать две клетки одной фигурой, ходить через другие не конём, ставить короля под удар и вообще проверять доступность этого хода фигуре
неужели вам все это нужно учесть? это так вот сходу не напишешь... поля класса - легко ещё придумать, а вот с методами типа checkpos и checkmove я бы так не торопился...
ТУт коня я не брал в список фигур использующих в программе.
А вот проверять доступность можно ли ставить фигуру на ту позицию где уже есть фигура я не знаю как сделать, и аналогично при проверки в каком положении Белый Король тут тоже нужно делат проверку может ли другая фигура бить через фигуру.
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 760
14.04.2013, 23:49 #8
ладно, я сейчас попробую накидать это в терминах классов, но вы пока поясните что понимаете под термином "обработка матрицы игры в шахматы"
я например ничего не понимаю)
1
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
14.04.2013, 23:57  [ТС] #9
Цитата Сообщение от abit Посмотреть сообщение
ладно, я сейчас попробую накидать это в терминах классов, но вы пока поясните что понимаете под термином "обработка матрицы игры в шахматы"
я например ничего не понимаю)
Ну как я понял нужно составить матрицу шахмотной доски и произвести какие то действия
ну например:
-рассположить несколько фигур;
-выполнить проверку позиции в данной ситуации для Белого Короля.
-будет ли она обычная или шаховая, матовая.
Я так понял. Ну а создавать полноценную игру это слишком геморно.
Для каждой фигуры нужно делать проверку и т.д.
Заранее Благодарю за помощь)
0
cygwin
1 / 1 / 0
Регистрация: 10.04.2013
Сообщений: 17
15.04.2013, 00:17 #10
Цитата Сообщение от Leven9tko Посмотреть сообщение
Тут все это учитывать не нужно.
Задача звучит: Составить класс обработки матрицы игры в "Шахматы" и все больше ни каких условий. То есть как я понял не нужно именно создавать полноценную игру. А привести пример, рассположения фигур (в данной ситуации я взял

И вывести какая это позиция.
ЧТо бы не так заморачиваться.

Добавлено через 3 минуты

ТУт коня я не брал в список фигур использующих в программе.
А вот проверять доступность можно ли ставить фигуру на ту позицию где уже есть фигура я не знаю как сделать, и аналогично при проверки в каком положении Белый Король тут тоже нужно делат проверку может ли другая фигура бить через фигуру.

Не по теме:

я конечно извиняюсь, но это же просто кошмар. Как вы сдавать то экзамен собираетесь?


Можно что-то типо того, или вместо enum использовать числа, как угодно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
enum Figure
{
    KING, QUEEN, ROOK, BISHOP, KNIGHT, PAWN, NOTHING
};
 
 
struct Point 
{
    int x, y;
};
 
class ChessField
{
public:
    ChessField();
 
    void performMove(const Point &, const Point &);
    void performMove(const int &, const int &, const int &, const int &);
 
private:
    Figure field[8][8];
};
 
 
ChessField::ChessField()
{
    // тут заполняешь игровое поле
}
 
void ChessField::performMove(const Point &from, const Point &to)
{
    ChessField::performMove(from.x, from.y, to.x, to.y);
}
 
void ChessField::performMove(const int &x1, const int &y1, const int &x2, const int &y2)
{
    if (field[x2][y2] != 0)
        //и так далее
}
Добавлено через 2 минуты
Фигуры таки лучше через класс сделать, и присваивать дополнительно цвет.

Добавлено через 4 минуты
Алсо даже лучше хранить не только поле, но и создать класс для определения цвета(команды). А вообще в интернете же полно таких программ, даже доделанных.
0
Програмер_80лвл
15 / 15 / 1
Регистрация: 17.10.2012
Сообщений: 96
Записей в блоге: 1
15.04.2013, 00:24 #11
Цитата Сообщение от abit Посмотреть сообщение
class doska()
Пха-ха-ха
утебя должен быть клас в который будет все делать всмысле :
рисовать
считать возможные хода
и конешно-же чистить и выврдить после каждого действие (имеется всмысле доску и хода)
и ещё лучшеб тут использовать наследование класов для каждой фигуры :
Конь
Король
Королева
Ферзь
Тура
Пешка... и так далее
ну а реализацию все-го этого тебе нада для начала считать хода
и делать все хода через деревовидную структуру(всмысле Дерево)
Эхх это дело не спростых...
еслиб я не удалил мой старый код нащет шахматов я б тебе его кинул-бы
а так мне очень сильно влом его писать =)

Добавлено через 3 минуты
ну и ещё вопрос не по теме =)
Ты учишся в КПИ или из Шаг ?*
0
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
15.04.2013, 00:35  [ТС] #12
Цитата Сообщение от cygwin Посмотреть сообщение
C
1
2
3
ChessField::ChessField()
{
* * // тут заполняешь игровое поле
}
каким образом тут заполнить игровое поле и как это все впихнуть или заменить в моей программе?

Добавлено через 2 минуты
Цитата Сообщение от Програмер_80лвл Посмотреть сообщение

Добавлено через 3 минуты
ну и ещё вопрос не по теме =)
Ты учишся в КПИ или из Шаг ?*
Учусь в ДТЗЕ
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 760
15.04.2013, 01:46 #13
Leven9tko,
чё-то я начал писать, реализовал конструктор, который расставляет все белые и у чёрных тока пешки и короля с королевой, реализовал методы проверки поля на фигуру, отображаения доски...

потом поглядел на всё это - и понял, что мой полёт фантазии не остановить...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#include <iostream>
#include <vector>
 
class figura
{
public:
      struct f_position {unsigned int x, y;};
      enum f_color  {white, black};
      enum f_type {p, N, B, R, Q, K};
      
private:
      f_position position;
      f_color color;
      f_type type;
      
public:
      figura(const f_position new_pos, const f_color b,const f_type t) {
                                                                         setposition(new_pos);
                                                                         setcolor(b);
                                                                         settype(t); 
                                                                       };
      figura () {};      
      void setposition(const f_position new_pos) {this->position = new_pos;};
      void setcolor(const f_color b) {this->color = b;};    
      void settype(const f_type t) {this->type = t;};
      
      char f_type_in_char()
                                       {
                                            if (this->color == white)
                                            switch (this->type)
                                            {
                                                   case p : return 'p';
                                                   case N : return 'N';
                                                   case B : return 'B';
                                                   case R : return 'R';
                                                   case Q : return 'Q';
                                                   case K : return 'K';
                                            }
                                            else
                                            switch (this->type)
                                            {
                                                   case p : return 'P';
                                                   case N : return 'n';
                                                   case B : return 'b';
                                                   case R : return 'r';
                                                   case Q : return 'q';
                                                   case K : return 'k';
                                            };
                                       }
      
      f_position getposition() {return position;};
      f_color getcolor() {return color;};
      f_type gettype() {return type;};
};
 
class ChessBoard
{
      std::vector<figura> figures;
      
public:
     static const char * C_x_pols;
     static const char * C_y_pols; 
     
     ChessBoard() {
                      figura::f_color color = figura::white;
                      figura::f_type type   = figura::p;
                      figura::f_position pos = {0,0};
                      
                      figura new_f(pos,color,type);
                      
                      pos.y = 1;
                      for (size_t i=0; i!=8; ++i)
                                  {
                                       pos.x = i;
                                       new_f.setposition(pos);
                                       figures.push_back(new_f);
                                  }
                                  
                      type = figura::K;
                      new_f.settype(type);
                      pos.y = 0;
                      pos.x = 4;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      type = figura::Q;
                      new_f.settype(type);
                      pos.y = 0;
                      pos.x = 3;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      type = figura::B;
                      new_f.settype(type);
                      pos.y = 0;
                      pos.x = 2;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      pos.y = 0;
                      pos.x = 5;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      
                      type = figura::N;
                      new_f.settype(type);
                      pos.y = 0;
                      pos.x = 1;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      pos.y = 0;
                      pos.x = 6;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      type = figura::R;
                      new_f.settype(type);
                      pos.y = 0;
                      pos.x = 0;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      pos.y = 0;
                      pos.x = 7;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      // -------------- black
                      
                      color = figura::black;
                      type = figura::p;
                      new_f.settype(type);
                      new_f.setcolor(color);
                      
                      pos.y = 6;
                      for (size_t i=0; i!=8; ++i)
                                  {
                                       pos.x = i;
                                       new_f.setposition(pos);
                                       figures.push_back(new_f);
                                  }
                                  
                      type = figura::K;
                      new_f.settype(type);
                      pos.y = 7;
                      pos.x = 3;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      type = figura::Q;
                      new_f.settype(type);
                      pos.y = 7;
                      pos.x = 4;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                  };
                  
     bool check_pole(figura::f_position pos, figura& how_figura)
                  {
                      for (std::vector<figura>::const_iterator it=figures.begin(); it!=figures.end(); ++it)
                      {
                          figura::f_position t_pos;
                          figura f;
                          f = *it;
                          t_pos = f.getposition();
                          if ((t_pos.x==pos.x)&&(t_pos.y==pos.y))
                          { how_figura=f;
                            return true;
                          }
                      }
                      return false;
                  };
    
     unsigned int figures_count() { return figures.size();};
     
     void ShowDesk()
                  {
                      for(size_t i=0; i!=8; ++i)
                      {
                        for(size_t j=0; j!=8; ++j)
                          {
                                   figura::f_position pos;
                                   pos.x = j;
                                   pos.y = 7-i;
                                   figura t_figura;
                                   
                                   if (check_pole(pos,t_figura)) std::cout <<t_figura.f_type_in_char();
                                   else std::cout<<'*';
                          }
                          std::cout << std::endl;
                      }
                  }
      
};
 
     const char * ChessBoard::C_x_pols = "abcdefgh";
     const char * ChessBoard::C_y_pols = "12345678"; 
 
 
 
int main()
{
 
      ChessBoard ChessGame;
      
      ChessGame.ShowDesk();
      
      std::cout << std::endl << "total figures = " << ChessGame.figures_count() << std::endl;
      
 
      system("pause");
      return 0;
}
1
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
15.04.2013, 02:01  [ТС] #14
Цитата Сообщение от abit Посмотреть сообщение
Leven9tko,
чё-то я начал писать, реализовал конструктор, который расставляет все белые и у чёрных тока пешки и короля с королевой, реализовал методы проверки поля на фигуру, отображаения доски...

потом поглядел на всё это - и понял, что мой полёт фантазии не остановить...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#include <iostream>
#include <vector>
 
class figura
{
public:
      struct f_position {unsigned int x, y;};
      enum f_color  {white, black};
      enum f_type {p, N, B, R, Q, K};
      
private:
      f_position position;
      f_color color;
      f_type type;
      
public:
      figura(const f_position new_pos, const f_color b,const f_type t) {
                                                                         setposition(new_pos);
                                                                         setcolor(b);
                                                                         settype(t); 
                                                                       };
      figura () {};      
      void setposition(const f_position new_pos) {this->position = new_pos;};
      void setcolor(const f_color b) {this->color = b;};    
      void settype(const f_type t) {this->type = t;};
      
      char f_type_in_char()
                                       {
                                            if (this->color == white)
                                            switch (this->type)
                                            {
                                                   case p : return 'p';
                                                   case N : return 'N';
                                                   case B : return 'B';
                                                   case R : return 'R';
                                                   case Q : return 'Q';
                                                   case K : return 'K';
                                            }
                                            else
                                            switch (this->type)
                                            {
                                                   case p : return 'P';
                                                   case N : return 'n';
                                                   case B : return 'b';
                                                   case R : return 'r';
                                                   case Q : return 'q';
                                                   case K : return 'k';
                                            };
                                       }
      
      f_position getposition() {return position;};
      f_color getcolor() {return color;};
      f_type gettype() {return type;};
};
 
class ChessBoard
{
      std::vector<figura> figures;
      
public:
     static const char * C_x_pols;
     static const char * C_y_pols; 
     
     ChessBoard() {
                      figura::f_color color = figura::white;
                      figura::f_type type   = figura::p;
                      figura::f_position pos = {0,0};
                      
                      figura new_f(pos,color,type);
                      
                      pos.y = 1;
                      for (size_t i=0; i!=8; ++i)
                                  {
                                       pos.x = i;
                                       new_f.setposition(pos);
                                       figures.push_back(new_f);
                                  }
                                  
                      type = figura::K;
                      new_f.settype(type);
                      pos.y = 0;
                      pos.x = 4;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      type = figura::Q;
                      new_f.settype(type);
                      pos.y = 0;
                      pos.x = 3;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      type = figura::B;
                      new_f.settype(type);
                      pos.y = 0;
                      pos.x = 2;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      pos.y = 0;
                      pos.x = 5;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      
                      type = figura::N;
                      new_f.settype(type);
                      pos.y = 0;
                      pos.x = 1;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      pos.y = 0;
                      pos.x = 6;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      type = figura::R;
                      new_f.settype(type);
                      pos.y = 0;
                      pos.x = 0;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      pos.y = 0;
                      pos.x = 7;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      // -------------- black
                      
                      color = figura::black;
                      type = figura::p;
                      new_f.settype(type);
                      new_f.setcolor(color);
                      
                      pos.y = 6;
                      for (size_t i=0; i!=8; ++i)
                                  {
                                       pos.x = i;
                                       new_f.setposition(pos);
                                       figures.push_back(new_f);
                                  }
                                  
                      type = figura::K;
                      new_f.settype(type);
                      pos.y = 7;
                      pos.x = 3;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                      
                      type = figura::Q;
                      new_f.settype(type);
                      pos.y = 7;
                      pos.x = 4;
                      new_f.setposition(pos);
                      figures.push_back(new_f);
                  };
                  
     bool check_pole(figura::f_position pos, figura& how_figura)
                  {
                      for (std::vector<figura>::const_iterator it=figures.begin(); it!=figures.end(); ++it)
                      {
                          figura::f_position t_pos;
                          figura f;
                          f = *it;
                          t_pos = f.getposition();
                          if ((t_pos.x==pos.x)&&(t_pos.y==pos.y))
                          { how_figura=f;
                            return true;
                          }
                      }
                      return false;
                  };
    
     unsigned int figures_count() { return figures.size();};
     
     void ShowDesk()
                  {
                      for(size_t i=0; i!=8; ++i)
                      {
                        for(size_t j=0; j!=8; ++j)
                          {
                                   figura::f_position pos;
                                   pos.x = j;
                                   pos.y = 7-i;
                                   figura t_figura;
                                   
                                   if (check_pole(pos,t_figura)) std::cout <<t_figura.f_type_in_char();
                                   else std::cout<<'*';
                          }
                          std::cout << std::endl;
                      }
                  }
      
};
 
     const char * ChessBoard::C_x_pols = "abcdefgh";
     const char * ChessBoard::C_y_pols = "12345678"; 
 
 
 
int main()
{
 
      ChessBoard ChessGame;
      
      ChessGame.ShowDesk();
      
      std::cout << std::endl << "total figures = " << ChessGame.figures_count() << std::endl;
      
 
      system("pause");
      return 0;
}
Огромное спасибо) Сейчас посмотрю может чего еще и добавлю, или спрошу если что не понятно будет.

Добавлено через 3 минуты
Цитата Сообщение от Leven9tko Посмотреть сообщение
C
1
for (size_t i=0; i!=8; ++i)
У меня в этой строке выдает ошибку
e:\пример №2\premer2.cpp(135) : error C2374: 'i' : redefinition; multiple initialization
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 760
15.04.2013, 02:07 #15
Огромное спасибо) Сейчас посмотрю может чего еще и добавлю, или спрошу если что не понятно будет.
Да я вообще-то там только развернулся ))) просто код растянулся на глазах...

сюда - struct f_position {unsigned int x, y;}; надо перегрузить операторы "==" и "=" чтобы напрямую сравнивать и приравнивать позиции

потом

C++
1
bool check_pole(figura::f_position pos, figura& how_figura)
этот метод работает так - проверяет позицию на поле pos на наличие фигуры, если там есть фигура возвращает true и помещает её в how_figura, если - нет, то false;

аналогично тому как там обходятся фигуры - нужно развернуть всякие методы проверки доступных ходов, шах/пат/мат и т.д.

в общем спрашивайте, а то что-то я больно замудрил мне кажется

Добавлено через 1 минуту
У меня в этой строке выдает ошибку
e:\пример №2\premer2.cpp(135) : error C2374: 'i' : redefinition; multiple initialization
странный у вас компилятор, i там использовалась только в цикле for до этого и прекратила свою жизнь там же
0
15.04.2013, 02:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2013, 02:07
Привет! Вот еще темы с ответами:

Задача по шахматам - C++
Вот сама задача &quot;Легенда гласит, что некий царь захотел поблагодарить изобретателя шахмат и предложил ему попросить любую награду....

Есть программный код целочисленная квадратной матрицы - C++
Есть программный код целочисленная квадратной матрицы, как сделать её прямоугольной. Помогите пожалуйста с кодом. #include &lt;iostream&gt; ...

Задача по шахматам (условие) - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; #include &lt;string&gt; using namespace std; int main() { ...

Программный код написан без ошибок но программу брикает - C++
вот сам код #include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;string&gt; #include&lt;iomanip&gt; using namespace std; struct film ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.