Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
15.04.2013, 04:59     программный код по ШАхматам С++ #21
Leven9tko,
оно не может найти checkmove и checkpost.
конечно не может

создайте объект (всё остальное я пишу исключительно для примера, скрепя сердцем, потому что я бы так никогда в здравом уме не писал)
C++
1
2
3
void main()
{
    Figura myboard;
вот мы создали объект вашего класса Figura, теперь уже можно пользоваться методами например так:
C++
1
if (myboard.checkmove(w_king.x,w_king.y)==1)
ну и конечно myboard.doska();

Добавлено через 1 минуту
Вот это должно быть вне Класса?
всё что относится логически к одной и той же шахматной партии должно быть в классе или как-то наследоваться/агрегироваться/делегироваться от других классов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Leven9tko
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 19
15.04.2013, 05:20  [ТС]     программный код по ШАхматам С++ #22
Вот так вот Компилирует и работает)

C++ (Qt)
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
#include<iostream>
#include<string>
#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);
    
};
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()
{
    Figura doska;
    int check,mat;
    coord b_king;
    coord b_knigth;
    coord b_bishop;
    coord w_king;
    check=0;
    mat=1;
doska.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-1][b_king.y-1]='k';
doska.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-1][b_knigth.y-1]='h';
doska.  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-1][b_bishop.y-1]='s';
    doska.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-1][w_king.y-1]='K';
    doska.doska();
    if (doska.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(doska.checkpos(i,j)==0) continue;
        if (doska.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");
 
}
Спасибо за советы) Но все же программа не полность реализована(

Добавлено через 4 минуты
Самому трудно разобраться в своих ошибках(

Добавлено через 6 минут
abit, Мне уже не удобно вас о чем либо просить.
Но все же не могли бы подсказать как в этой программе реализовать ввод ввиде (A 1, B 2 и т.д.)?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2013, 05:39     программный код по ШАхматам С++
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
15.04.2013, 05:39     программный код по ШАхматам С++ #23
Но все же не могли бы подсказать как в этой программе реализовать ввод ввиде (A 1, B 2 и т.д.)?
по хорошему для этого нужно вникать в происходящее здесь, а мне что-то лень, да и спать собираюсь...
давайте я вам костыль напишу на скорую руку...

я так понимаю это пример вашего ввода?
C++
1
2
    cin>>b_king.x;
    cin>>b_king.y;
т.к. буквы сдвинуты в таблице символов ASCII и шахматная нотация в отличии от массива в Си начинается с 1 а не с нуля...
то костыль будет выглядеть так:
введите две функции перед main():

C++
1
2
3
4
5
6
7
8
9
int charX_to_int(char x)
{
   return (int)x-65;
}
 
int charY_to_int(char y)
{
   return (int)y-49;
}
и вместо
C++
1
2
    cin>>b_king.x;
    cin>>b_king.y;
пишите

C++
1
2
3
4
    string pos;
    cin>>pos;
    b_king.x = charX_to_int(pos[0]);
    b_king.y = charY_to_int(pos[2]);
опять же ничерта не проверял, но думаю суть разберёте и исправите, если что

может даже модуль <string> придётся подключать
я ваш компилятор вообще не понимаю
Yandex
Объявления
15.04.2013, 05:39     программный код по ШАхматам С++
Ответ Создать тему
Опции темы

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