Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.88
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
14.04.2013, 12:36     программный код по ШАхматам С++ #1
Прошу помочь с программным кодом по шахматам подсказать что изменить или что добавить.
Мне была дана задача сделать класс матрицы игры в шахматы:
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;
}
 
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2013, 12:36     программный код по ШАхматам С++
Посмотрите здесь:

напишите пожалуйста программный код C++
C++ Задача по шахматам
Исправить программный код C++
C++ Найти сумму, используя программный код
C++ Программный код С++ не компилируется в Dev-C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
14.04.2013, 20:46     программный код по ШАхматам С++ #2
Как можно скорее поменять магические числа на константы
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
14.04.2013, 22:50  [ТС]     программный код по ШАхматам С++ #3
Croessmah, Всмысле? Можно поподробнее?
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
14.04.2013, 22:57     программный код по ШАхматам С++ #4
сделать класс матрицы игры в шахматы
эмм... и где у вас вообще класс?
кроме координат других классов не вижу
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 минуты
И как сделать так что бы при вводе координат программа проверяла есть ли там фигура? Если есть она возвращал с сообщение что сдесь находится фигура и заново нужно было вводить координаты.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
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 Посмотреть сообщение
Сможете помочь в переделывании этой программы под условие?
так сходу и не скажу, это займёт приличное время - если реализовывать всё что, должно быть по хорошему...
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 я бы так не торопился...
ТУт коня я не брал в список фигур использующих в программе.
А вот проверять доступность можно ли ставить фигуру на ту позицию где уже есть фигура я не знаю как сделать, и аналогично при проверки в каком положении Белый Король тут тоже нужно делат проверку может ли другая фигура бить через фигуру.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
14.04.2013, 23:49     программный код по ШАхматам С++ #8
ладно, я сейчас попробую накидать это в терминах классов, но вы пока поясните что понимаете под термином "обработка матрицы игры в шахматы"
я например ничего не понимаю)
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
14.04.2013, 23:57  [ТС]     программный код по ШАхматам С++ #9
Цитата Сообщение от abit Посмотреть сообщение
ладно, я сейчас попробую накидать это в терминах классов, но вы пока поясните что понимаете под термином "обработка матрицы игры в шахматы"
я например ничего не понимаю)
Ну как я понял нужно составить матрицу шахмотной доски и произвести какие то действия
ну например:
-рассположить несколько фигур;
-выполнить проверку позиции в данной ситуации для Белого Короля.
-будет ли она обычная или шаховая, матовая.
Я так понял. Ну а создавать полноценную игру это слишком геморно.
Для каждой фигуры нужно делать проверку и т.д.
Заранее Благодарю за помощь)
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 минуты
Алсо даже лучше хранить не только поле, но и создать класс для определения цвета(команды). А вообще в интернете же полно таких программ, даже доделанных.
Програмер_80лвл
15 / 15 / 1
Регистрация: 17.10.2012
Сообщений: 96
Записей в блоге: 1
15.04.2013, 00:24     программный код по ШАхматам С++ #11
Цитата Сообщение от abit Посмотреть сообщение
class doska()
Пха-ха-ха
утебя должен быть клас в который будет все делать всмысле :
рисовать
считать возможные хода
и конешно-же чистить и выврдить после каждого действие (имеется всмысле доску и хода)
и ещё лучшеб тут использовать наследование класов для каждой фигуры :
Конь
Король
Королева
Ферзь
Тура
Пешка... и так далее
ну а реализацию все-го этого тебе нада для начала считать хода
и делать все хода через деревовидную структуру(всмысле Дерево)
Эхх это дело не спростых...
еслиб я не удалил мой старый код нащет шахматов я б тебе его кинул-бы
а так мне очень сильно влом его писать =)

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

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

Добавлено через 3 минуты
ну и ещё вопрос не по теме =)
Ты учишся в КПИ или из Шаг ?*
Учусь в ДТЗЕ
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
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;
}
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
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
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 до этого и прекратила свою жизнь там же
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
15.04.2013, 02:13  [ТС]     программный код по ШАхматам С++ #16
Цитата Сообщение от Leven9tko Посмотреть сообщение
std::cout << std::endl << "total figures = " << ChessGame.figures_count() << std::endl;
Для чего эта сторока?

Добавлено через 2 минуты
Я так посмотрел вы решили сделать расположение всех шахмат на доске.
А потом уже это приведет к полноценной шахматной игре в консоле)
Но это для меня слишком много. Если продолжить дальше реализовать ваше начало то это затянется на долго и не уверен, что у меня это получится(
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
15.04.2013, 02:57     программный код по ШАхматам С++ #17
Для чего эта сторока?
эта строка перводит консоль на новую строчку и там пишет количество фигур, которые учавствуют в шахматной партии, просто для теста метода получения числа фигур

А потом уже это приведет к полноценной шахматной игре в консоле)
до этого там ещё очень далеко...

Но это для меня слишком много. Если продолжить дальше реализовать ваше начало то это затянется на долго и не уверен, что у меня это получится(
вы говорили что вам не надо до конца готовую игру делать...
собстна большую часть декларативной работы я проделал (из декларативности - осталось разве что описать закон движения каждого типа фигур, а остальное фигня)... осталось дело только определить какие же конкретно методы вам нужны... "сделать ход"? "расставить произвольно фигуры"? "проверить на урозу королю" и т.д.

впишите только то, что вам нужно... не обязательно доводить до рабочего конца всё
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
15.04.2013, 04:21  [ТС]     программный код по ШАхматам С++ #18
Цитата Сообщение от abit Посмотреть сообщение
эта строка перводит консоль на новую строчку и там пишет количество фигур, которые учавствуют в шахматной партии, просто для теста метода получения числа фигур


до этого там ещё очень далеко...



вы говорили что вам не надо до конца готовую игру делать...
собстна большую часть декларативной работы я проделал (из декларативности - осталось разве что описать закон движения каждого типа фигур, а остальное фигня)... осталось дело только определить какие же конкретно методы вам нужны... "сделать ход"? "расставить произвольно фигуры"? "проверить на урозу королю" и т.д.

впишите только то, что вам нужно... не обязательно доводить до рабочего конца всё
Я на столько глуп, что я не могу даже придумать что делать дальше((( Это печальная ситуация(

Добавлено через 1 минуту
Сейчас сижу думаю как лучше переделать мою прогу, что бы она была с класами.

Добавлено через 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
138
139
140
141
142
143
144
145
146
147
148
149
150
#include<iostream.h>
#include<string.h>
#include <vector>
 
struct coord
{
    int x,y;
 
};
 
class Figura
{
public:
    void doska(void);
    void scan(coord &f);
    int checkpos(int x,int y);
    int checkmove(int x,int y);
    void main();
    
};
 
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 Figura::doska(void) //Постороение доски
{
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 Figura:: scan(coord &f)
{
    char t=0;
    cin>>t;
    f.y=t-0;
    cin>>f.x;
    f.x--;
    cout<<f.x<<f.y<<endl;
}
int Figura::checkpos(int x,int y)
{
    if(x>=0 && x<8 && y>=0 && y<8) return 1;
    else return 0;
}
int Figura::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;
void Figura::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';
void Figura::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';
    void Figura::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';
    void Figura::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';
    void Figura::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;
 
system("pause");
 
}
Добавлено через 3 минуты
Только не судите строго(
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
15.04.2013, 04:48     программный код по ШАхматам С++ #19
Только не судите строго(
там нечего судить )

C++
1
2
#include<iostream.h>
#include<string.h>
Это C++/STL, надо просто
C++
1
2
#include <iostream>
#include <string>
у вас это компилируется? какой-то странный тогда у вас компилятор

вот тут
C++
1
 for (i=1; i<8;i++)
например тип i берётся с потолка... стандарт C++ такого не описывает, надо явно указывать
C++
1
 for (int i=1; i<8;i++)
но помня вашу ошибку
У меня в этой строке выдает ошибку
e:\пример №2\premer2.cpp(135) : error C2374: 'i' : redefinition; multiple initialization
я даже теряюсь как это у вас так всё настроено... ну да ладно, далее мотаем в main(), который кстати тоже по стандарту не может быть void, ну да ладно некоторые компиляторы разрешают...
тут
C++
1
if (checkmove(w_king.x,w_king.y)==1)
или
тут
C++
1
 if(checkpos(i,j)==0) continue;
и ещё в куче мест... вы вызываете методы класса Figura (странное название для класса, заведующего всей доской и всеми фигурами) без объекта над которым собстна и надо работать...

а если помотаться по main - а где объект собстна... а нет никакого объекта...

вы просто определили класс без объекта и вместо объекта мы встречаем совсем уникальный вызов:
C++
1
void Figura::doska();
поймите класс - на простом языке, это тип... он физически как бы не существует, а лишь описывает законы поведения чего-то

например тип int или string

надо наградить какой-то объект этим статусом, например

C++
1
string str;
тут мы создаём объект str типа string, вот str уже существует физически и играет по правилам, определённым для типа string, для него есть методы класса - например str.size() вернёт размер строки, str.push_back("s") добавит символ в конец... т.е. есть то с чем можно работать уже... у вас работать не с чем...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2013, 04:56     программный код по ШАхматам С++
Еще ссылки по теме:

Программный код С++ не компилируется в Dev-C++ C++
C++ задача(есть код программы, нужно объяснить её программный код. )
Нужно по блоксхеме написать программный код на с++ C++

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

Или воспользуйтесь поиском по форуму:
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
15.04.2013, 04:56  [ТС]     программный код по ШАхматам С++ #20
Ну я же не сказал что оно компилируется
Цитата Сообщение от abit Посмотреть сообщение
1
i
C++ (Qt)
1
f (checkmove(w_king.x,w_king.y)==1)
или
тут
C++ (Qt)
1
2
Код C++1
*if(checkpos(i,j)==0) continue
;
оно не может найти checkmove и checkpost.

И как я понял что я собственно не создал доску на которую оно должно ввыводиться. И доска будет создаваться вне Класса?

Добавлено через 43 секунды
Цитата Сообщение от abit Посмотреть сообщение
C++ (Qt)
1
void Figura::doska();
Эт поспешил не убрал

Добавлено через 2 минуты
Цитата Сообщение от Leven9tko Посмотреть сообщение
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Figura::doska(void) //Постороение доски
{
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;
* * }
}
Вот это должно быть вне Класса?
Yandex
Объявления
15.04.2013, 04:56     программный код по ШАхматам С++
Ответ Создать тему
Опции темы

Текущее время: 08:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru