Форум программистов, компьютерный форум, киберфорум
С под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
1

Шахматы под Линукс

12.09.2015, 22:22. Просмотров 975. Ответов 17
Метки нет (Все метки)


Могу выложить код шахмат под Линукс. Играют двое игроков, один против другого, не против компьютера. То есть компьютерной логики там нет. Сгодится, кому надо под проект и т.д. Выложу бесплатно, "спасибы" зарабатываю... :-)

Добавлено через 39 минут
Как оказалось слишком длинный текст вывести не дает, а про файлы пишет, что некорректные. Если кто захочет дать мейл, пришлю на мейл...
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2015, 22:22
Ответы с готовыми решениями:

На Виндовсе под Линукс
Доброго времени суток. Можно ли написать программу, любую, например "Hello World!" на Си на...

Не работает программа под линукс.
#include <unistd.h> #include <asm/io.h> #define time 1000 int main() { ioperm(0x278,1,1); ...

Нужен компилятор под линукс
нужен компилятор под линукс, который может генерировать 64 битный код в формате PE (виндовый) и...

Как написать драйвер мыши под Линукс
Здраствуйте. Я студент, и у меня тема курсового проекта "Написание драйвера под Линокс". В качестве...

17
Fonduee
12.09.2015, 23:20
  #2

Не по теме:

Залей на github, bitbucket, etc. Может кому-то и пригодится.

0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,354
12.09.2015, 23:22 3
max_sk, заводите аккаунт на github, это больше чем "спасибки". Это можно и в резбме указать. А ссылку тут оставьте.
1
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
12.09.2015, 23:36  [ТС] 4
Эмм... А что такое github ? Если я живу за границей, а не в России, чем может сгодиться мне регистрация там? С вероятностью 90% мои возможные работодатели не знают русского языка... :-)
0
4320 / 3329 / 339
Регистрация: 12.03.2013
Сообщений: 5,828
14.09.2015, 20:31 5
http://lmgtfy.com/?q=github
0
Антикодер
1872 / 848 / 48
Регистрация: 15.09.2012
Сообщений: 2,998
16.09.2015, 00:49 6
Я бы добавил, что можно завести git репозиторий без github-а. Просто на github-е проект легче публиковать.
Использую Gentoo Linux - у меня личная к вам просьба, пишите к программам для Linux ebuild-ы для Gentoo [это что то вроде инструкции для ОС, как установить вашу программу].
Жаль нету логику, я иногда играю с компом. Лично мне нужны 3D шахматы с ИИ для Gentoo Linux. PouetChess меня не совсем устраивают.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,354
16.09.2015, 00:58 7
ru.lichess.org
1
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
16.09.2015, 07:27  [ТС] 8
XRuZzz, к сожалению с особенностями Gentoo не знаком. Могу накидать README.TXT, но пока что нет желающих забрать этот код.
0
438 / 309 / 97
Регистрация: 02.10.2008
Сообщений: 1,176
Записей в блоге: 1
16.09.2015, 12:15 9
Надо выложить.
Особенно часть сервера и клиента.

К стати, какая схема используется - с центральным серваком или коннект идёт напрямую игрок-игрок?

Добавлено через 4 минуты
Цитата Сообщение от XRuZzz Посмотреть сообщение
Использую Gentoo Linux - у меня личная к вам просьба, пишите к программам для Linux ebuild-ы для Gentoo [это что то вроде инструкции для ОС, как установить вашу программу].
Зачем e-build`ы взял исходник и как во фре make installl clean.
А пакет - я думаю одного хватит - deb (только не с ориентировкой на бубунту, лучше на чистый debian), тогда и пакеты для арча, генту, debian-based дистров появятся... Не знаю как с rpm-based, но вроде и там deb завести не проблема
0
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
16.09.2015, 12:34  [ТС] 10
Все гораздо проще, чем кажется. :-)
Учебный проект, шахматы на двоих. Никакой серверной и клиентской части. Просто запускается на компе с Линуксом ( желательно Сентос 7, т.к. писалось на нем ) и играете вдвоем, если есть желание. :-)

Учебный проект, не более того...

Добавлено через 2 минуты
Выложить не могу - форум не дает выкладывать длинный код, а про файлы пишет, что они некорректные. Могу отправить по мейлу, по мейлу вроде проходило, когда сдавал...
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,354
16.09.2015, 12:52 11
Цитата Сообщение от max_sk Посмотреть сообщение
но пока что нет желающих забрать этот код
А где он? Как можно посмотреть то чего нет?
Цитата Сообщение от max_sk Посмотреть сообщение
Выложить не могу
См посты #2, #3
0
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
16.09.2015, 13:55  [ТС] 12
Чет нет у меня желания разбираться в github'e. Пока не понял в чем преимущество регистрации там... Типа социальной сети для программистов и работников хай-тека?

Добавлено через 4 минуты
Хотите, выложу здесь кусками? Правда могут возникнуть какие либо неясности, при копипасте... А может и нет...

Добавлено через 36 минут
Так. Зарегистрировался на github'e. А как туда заливать то?
0
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
03.10.2015, 20:15  [ТС] 13
Ладно, до github'a пока руки не доходят... Лень разбираться ради одного проекта...

Начинаю выкладывать по кускам здесь.

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
//
//
// Файл "mat-pat.c"
// Проверка ходов фигур обеих игроков на мат и пат.
//
//
//
int King_Protection(char *BoardArr,int main_shah, int *agressor_ps, int player, int *go_f, int *go_t, int *trn_pos, char *trn_from,
 char *trn_to)
{
    int count,count1,count2,pos_sym=0,pos_num=0,pos_sym1=0,pos_num1=0;
    int shh=999,trn,kng_pos; // =shah, =turn, =king position
    int stam; // Variable for debugging
    char kng; // =king
    char figures_white[5]={'P','B','N','R','Q'};
    char figures_black[5]={'p','b','n','r','q'};
    char *figure;
    char main_trn_from[2]={'\0','\0'};
    char main_trn_to[2]={'\0','\0'};
 
    ///////////////////////// Bdikat protection by shah /////////////////////////////////////////
 
    if(player==1){
        kng='K'; 
        figure=figures_black;
    }else{
        kng='k';
        figure=figures_white;
    }
 
    for(count=0;count<=63;count++){
        if(BoardArr[count]==kng){
            kng_pos=count;
            count=64;
        }
    }
 
    pos_sym=kng_pos%8;
    pos_num=kng_pos/8; 
    for(pos_num1=pos_num+1; pos_num1>=pos_num-1; pos_num1--){
        for(pos_sym1=pos_sym-1; pos_sym1<=pos_sym+1; pos_sym1++){ // Scaning places arround king
            if( (pos_sym1>=0 && pos_sym1<=7) && (pos_num1>=0 && pos_num1<=7) && 
                BoardArr[pos_num1*8+pos_sym1]!=kng ){
                if(BoardArr[pos_num1*8+pos_sym1]==' '){ // There are free place?
                    BoardArr[pos_num1*8+pos_sym1]=kng;
                    BoardArr[kng_pos]=' ';
                            
                    shh=Shah(BoardArr,player,agressor_ps);
 
                    BoardArr[pos_num1*8+pos_sym1]=' ';
                    BoardArr[kng_pos]=kng;
                    if(shh==0){
                        gotoxy(START_X-9,START_Y+5);
                        printf("\e[%d;%d;%dm  Shah.You can to escape from this         ",all_off,black_t,COLOR);
                        return 1;
                    }
                }else{
                    for(count1=0; count1<=4; count1++){
                        if(BoardArr[pos_num1*8+pos_sym1]==figure[count1]){  
                            BoardArr[pos_num1*8+pos_sym1]=kng;
                            BoardArr[kng_pos]=' ';
 
                            shh=Shah(BoardArr,player,agressor_ps);
 
                            BoardArr[pos_num1*8+pos_sym1]=figure[count1];
                            BoardArr[kng_pos]=kng;
                            if(shh==0){
                                gotoxy(START_X-9,START_Y+5);
                                printf("\e[%d;%d;%dm  Shah.You can to attack with your king    ",all_off,black_t,COLOR);
                                return 1;
                            }
                        }
                    }
                }
            }
        }
    }
    shh=main_shah;
 
    main_trn_from[0]=trn_from[0];
    main_trn_from[1]=trn_from[1];
    main_trn_to[0]=trn_to[0];
    main_trn_to[1]=trn_to[1];
    if(player==1){
        figure=figures_white;
    }else{
        figure=figures_black;
    }
        
    if(shh>0){
    ////////////////// Scaning to close shah-attack or cut the figure enemy //////////////////////////////////////
        for(count=0; count<=63; count++){       
            if(BoardArr[count]!=' '){ /// Scaning figure able to close this attack
                for(count1=0; count1<=4; count1++){
                    if(BoardArr[count]==figure[count1]){ /// If figure is found
                        for(count2=0; count2<=63; count2++){  /// Scaning for free place    
                            if(BoardArr[count2]==' ' || count2==*agressor_ps  ){ /// Any free place found
                                trn_from[0]=count%8+97;
                                trn_from[1]=count/8+48+1;
                                trn_to[0]=count2%8+97;
                                trn_to[1]=count2/8+48+1;
                                    
                                trn=Turn_Validate(BoardArr,shh,player,go_f,go_t,trn_pos,agressor_ps,trn_from,trn_to);
    
                                gotoxy(START_X-9,START_Y+5);
                                printf("\e[%d;%d;%dm                                            ",all_off,black_t,COLOR);
                                        
                                if(trn==1){
                                    if( count2==*agressor_ps ){
                                        gotoxy(START_X-9,START_Y+5);
                                        printf("\e[%d;%d;%dm  Shah.You can to cut his figure           ",all_off,black_t,COLOR);
                                        return 1;
                                    }else{
                                        BoardArr[count2]=figure[count1];  
                                        BoardArr[count]=' ';              
                                                    
                                        shh=Shah(BoardArr,player,agressor_ps);
    
                                        BoardArr[count]=figure[count1];  
                                        BoardArr[count2]=' ';           
                                        if( shh==0 ){
                                            gotoxy(START_X-9,START_Y+5);
                                            printf("\e[%d;%d;%dm  Shah.You can close by his attack         ",all_off,black_t,COLOR);
                                            return 1;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }       
    }
    
    ////////////////////////////////// It's Checkmate! //////////////////////////////////////////////////
    trn_from[0]=main_trn_from[0];
    trn_from[1]=main_trn_from[1];
    trn_to[0]=main_trn_to[0];
    trn_to[1]=main_trn_to[1];
        
    if(main_shah!=0){
        gotoxy(START_X-9,START_Y+5);
        printf("\e[%d;%d;%dm  It's CHECKMATE ( MAT )!!!   ",all_off,red_t,COLOR);
        gotoxy(START_X-6,START_Y+8);
        return 0;
    }else{
        return 1;
    }
}
Добавлено через 2 минуты
Продолжение файла "mat-pat.c",,,

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
int Not_Stalemate(char *BoardArr,int main_shah, int player, int *go_f, int *go_t, int *trn_pos,int *agressor_ps, char *trn_from,
 char *trn_to)
{
    int count,count1,count2,pos_sym=0,pos_num=0,pos_sym1=0,pos_num1=0;
    int shh,trn,kng_pos,stam; // =shah,=turn,=king position, variable for debugging
    char kng; // =king
    char figures_white[7]={'P','B','N','R','Q','K','\0'};
    char figures_black[7]={'p','b','n','r','q','k','\0'};
    char *figure;
    char main_turn_from[2]={'\0','\0'};
    char main_turn_to[2]={'\0','\0'};
 
    if(player==1){
        kng='K'; 
        figure=figures_white;
    }else{
        kng='k';
        figure=figures_black;
    }
 
    for(count=0; count<=63; count++){
        if(BoardArr[count]==kng){
            kng_pos=count;
            count=64;
        }
    }
 
    pos_sym=kng_pos%8;
    pos_num=kng_pos/8; 
    for(count=0; count<=63; count++){ // Scaning for own figures
        if(BoardArr[count]!=' '){ 
            for(count1=0; count1<=5; count1++){
                if(BoardArr[count]==figure[count1]){ /// If this figure found
                    for(count2=0; count2<=63; count2++){  /// Scaning for any free place
                        if(BoardArr[count2]==' ' || count2==*agressor_ps  ){ /// Any free place found
                            trn_from[0]=count%8+97;
                            trn_from[1]=count/8+48+1;
                            trn_to[0]=count2%8+97;
                            trn_to[1]=count2/8+48+1;
 
                            trn=Turn_Validate(BoardArr,main_shah,player,go_f,go_t,trn_pos,agressor_ps,trn_from,trn_to);
                            
                            gotoxy(START_X-9,START_Y+5);
                            printf("\e[%d;%d;%dm                                            ",all_off,black_t,COLOR);
                        
                            trn_from[0]=count2%8+97;
                            trn_from[1]=count2/8+48+1;
                            trn_to[0]=count%8+97;
                            trn_to[1]=count/8+48+1;
                            if(trn==1){
                                return 1;
                            }
                        }
                    }
                }
            }
        }
    }
    
    if(trn==-1){
        gotoxy(START_X-9,START_Y+5);
        printf("\e[%d;%d;%dm  It's STALEMATE ( PAT )!!!   ",all_off,red_t,COLOR);
        gotoxy(START_X-6,START_Y+8);
        return 0;
    }   
}
0
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
03.10.2015, 20:25  [ТС] 14
Файл "turn-validate.c". Вычисление правильности ходов игроков...

Внимание !!! Здесь целая функция разделена на две части !!!

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
//
//
// Файл "turn-validate.c". Проверка правильности ходов игроков.
//
//
#include <stdio.h>
#include "main.h"
 
int Turn_Validate(char *BoardArr,int shah,int player, int *go_f, int *go_t,int *trn_pos,int *agressor_ps, char *trn_from, char *trn_to)
{
    int count1,count2;
    int pos_f=999,pos_t=999; // Position from, position to
    int place=-1; // flag to free place on the board. Used for Place_Empty()
    int shh; // =shah flag
    int stam; // variable for debugging
    char fig; // Temp variable to figure.
 
     if( trn_from[0]>=65 && trn_from[0]<=72 ) pos_f=trn_from[0]-65;
     if( trn_from[0]>=97 && trn_from[0]<=104) pos_f=trn_from[0]-97;
     if( trn_from[1]>=48 && trn_from[1]<=57 ) pos_f+=((trn_from[1]-48)-1)*8; // Calculate position from by gamer input(a1 -h8)
 
     if( trn_to[0]>=65 && trn_to[0]<=72 ) pos_t=trn_to[0]-65;
     if( trn_to[0]>=97 && trn_to[0]<=104) pos_t=trn_to[0]-97;
     if( trn_to[1]>=48 && trn_to[1]<=57 ) pos_t+=((trn_to[1]-48)-1)*8; // Calculate position to by gamer input (a1 - h8 )
 
     *go_f=pos_f; 
     *go_t=pos_t;
     *trn_pos=999;
 
     if( pos_f<0 || pos_f>63 || pos_t<0 || pos_t>63 ){
        gotoxy(START_X-9,START_Y+5);
        printf("\e[%d;%d;%dm  It's WRONG position: outside board!       ",all_off,red_t,COLOR);
        return -1;
     }else{ 
         if(player==-1){
            switch(BoardArr[pos_f]){
                case 'r': if( ((trn_from[1]==trn_to[1]) || (trn_from[0]==trn_to[0])) || ((pos_t-pos_f)%8==0) ){ // Can rook turn?
                          // trn_from[1],trn_to[1] is position numbers on the board. trn_from[0],trn_to[0] is position letters on the board
                              place=Place_Empty(BoardArr,pos_f,pos_t,trn_pos,trn_from,trn_to);
                          }
                          if( (pos_t==*trn_pos && ifturn_white)|| place==1){ // Rook can attack or going ? Condition in parentheses for
                              // attack, place==1 to make course
                              fig=BoardArr[pos_t];
                              BoardArr[pos_t]=BoardArr[pos_f];
                              BoardArr[pos_f]=' ';
 
                              shh=Shah(BoardArr,player,agressor_ps);
 
                              BoardArr[pos_f]=BoardArr[pos_t];
                              BoardArr[pos_t]=fig;
                              if( shh==0 ){
                                  return 1;
                              }else{
                                  gotoxy(START_X-9,START_Y+5);
                                  printf("\e[%d;%d;%dm  It's WRONG turn: own king get shah!      ",all_off,red_t,COLOR);
                                  return -1;
                              }
                          }else{
                              gotoxy(START_X-9,START_Y+5);
                              printf("\e[%d;%d;%dm  It's WRONG turn to black rook            ",all_off,red_t,COLOR);
                              return -1;
                          }
                break;
                case 'n': if( ((pos_t-pos_f)-17==0 || (pos_t-pos_f)-17==-34 || (pos_t-pos_f)-10==0 
                              || (pos_t-pos_f)-10==-20 || (pos_t-pos_f)-6==0 || (pos_t-pos_f)-6==-12
                              ||  (pos_t-pos_f)-15==0 || (pos_t-pos_f)-15==-30) // Calculate division from "position to" and "position from"
                              && (BoardArr[pos_t]==' ' || ifturn_white) ){
         
                              fig=BoardArr[pos_t];
                              BoardArr[pos_t]=BoardArr[pos_f];
                              BoardArr[pos_f]=' ';
                            
                              shh=Shah(BoardArr,player,agressor_ps);
 
                              BoardArr[pos_f]=BoardArr[pos_t];
                              BoardArr[pos_t]=fig;
 
                              if( shh==0 ){
                                  return 1;
                              }else{
                                  gotoxy(START_X-9,START_Y+5);
                                  printf("\e[%d;%d;%dm  It's WRONG turn: own king get shah!      ",all_off,red_t,COLOR);
                                  return -1;
                              }
                          }else{
                              gotoxy(START_X-9,START_Y+5);
                              printf("\e[%d;%d;%dm  It's WRONG turn to black knite           ",all_off,red_t,COLOR);
                              return -1;
                          }
                break;
                case 'b': if( (pos_f-pos_t)%7==0 || (pos_f-pos_t)%9==0 ){
                               place=Place_Empty(BoardArr,pos_f,pos_t,trn_pos,trn_from,trn_to);   
                          }
                          if( (pos_t==*trn_pos && BoardArr[pos_t]!=' ' && ifturn_white ) || place==1 ){ // Can bishop go or attack?
                              fig=BoardArr[pos_t];
                              BoardArr[pos_t]=BoardArr[pos_f];
                              BoardArr[pos_f]=' ';
 
                              shh=Shah(BoardArr,player,agressor_ps);
 
                              BoardArr[pos_f]=BoardArr[pos_t];
                              BoardArr[pos_t]=fig;
                              if( shh==0 ){
                                  return 1;
                              }else{
                                  gotoxy(START_X-9,START_Y+5);
                                  printf("\e[%d;%d;%dm  It's WRONG turn: own king get shah!      ",all_off,red_t,COLOR);
                                  return -1;
                              }
                          }else{
                              gotoxy(START_X-9,START_Y+5);
                              printf("\e[%d;%d;%dm  It's WRONG turn to black bishop          ",all_off,red_t,COLOR);
                              return -1;
                          }
                break;
                case 'q': if( (pos_f-pos_t)%7==0 || (pos_f-pos_t)%9==0 || ((trn_from[1]==trn_to[1]) || (trn_from[0]==trn_to[0])) 
                              || ((pos_t-pos_f)%8==0) ){ // Can qween to go ?
                               place=Place_Empty(BoardArr,pos_f,pos_t,trn_pos,trn_from,trn_to);  
                          }
                          if( (pos_t==*trn_pos && ifturn_white ) || place==1 ){ // If qween going or attack... And in same style...
                              fig=BoardArr[pos_t];
                              BoardArr[pos_t]=BoardArr[pos_f];
                              BoardArr[pos_f]=' ';
 
                              shh=Shah(BoardArr,player,agressor_ps);
 
                              BoardArr[pos_f]=BoardArr[pos_t];
                              BoardArr[pos_t]=fig;
                              if( shh==0 ){
                                  return 1;
                              }else{
                                  gotoxy(START_X-9,START_Y+5);
                                  printf("\e[%d;%d;%dm  It's WRONG turn: own king get shah!      ",all_off,red_t,COLOR);
                                  return -1;
                              }
                          }else{
                              gotoxy(START_X-9,START_Y+5);
                              printf("\e[%d;%d;%dm  It's WRONG turn to black qween           ",all_off,red_t,COLOR);
                              return -1;
                          }
                break;
                case 'k': if( (trn_from[0]-trn_to[0])>=-1 && (trn_from[0]-trn_to[0])<=1 && (trn_from[1]-trn_to[1])>=-1 
                              && (trn_from[1]-trn_to[1])<=1 && (BoardArr[pos_t]==' ' || ifturn_white) ){
                              
                              fig=BoardArr[pos_t];
                              BoardArr[pos_t]=BoardArr[pos_f];
                              BoardArr[pos_f]=' ';
 
                              shh=Shah(BoardArr,player,agressor_ps);
 
                              BoardArr[pos_f]=BoardArr[pos_t];
                              BoardArr[pos_t]=fig;
                              if( shh==0 ){
                                  return 1;
                              }else{
                                  gotoxy(START_X-9,START_Y+5);
                                  printf("\e[%d;%d;%dmIt's WRONG turn to your king - you get shah!",all_off,red_t,COLOR);
                                  return -1;
                              }
                      }else{
                          gotoxy(START_X-9,START_Y+5);
                          printf("\e[%d;%d;%dm  It's WRONG turn to black king            ",all_off,red_t,COLOR);
                          return -1;
                      }
                break;
                case 'p': if( (pos_f>=48 && pos_f<=55 && pos_f-pos_t==16) || (pos_f-pos_t==8) ){ 
                              place=Place_Empty(BoardArr,pos_f,pos_t,trn_pos,trn_from,trn_to);
                          }
                          if( ((pos_f-pos_t==7 || pos_f-pos_t==9) && BoardArr[pos_t]!=' ' && ifturn_white ) || place==1 ){
                              fig=BoardArr[pos_t];
                              BoardArr[pos_t]=BoardArr[pos_f];
                              BoardArr[pos_f]=' ';
 
                              shh=Shah(BoardArr,player,agressor_ps);
 
                              BoardArr[pos_f]=BoardArr[pos_t];
                              BoardArr[pos_t]=fig;
                              if( shh==0 ){
                                  return 1;
                              }else{
                                  gotoxy(START_X-9,START_Y+5);
                                  printf("\e[%d;%d;%dm  It's WRONG turn: own king get shah!      ",all_off,red_t,COLOR);
                                  return -1;
                              }
                          }else{
                              gotoxy(START_X-9,START_Y+5);
                              printf("\e[%d;%d;%dm  It's WRONG turn to black pion            ",all_off,red_t,COLOR);
                              return -1;
                          }
                break;
                default : if(BoardArr[pos_f]==' '){
                              gotoxy(START_X-9,START_Y+5);
                              printf("\e[%d;%d;%dm  It's WRONG turn: empty place!             ",all_off,red_t,COLOR);
                              return -1;
                          }
                          if(BoardArr[pos_f]>='A' && BoardArr[pos_f]<='Z'){
                              gotoxy(START_X-9,START_Y+5);
                              printf("\e[%d;%d;%dmIt's WRONG turn: play with BLACK figures!",all_off,red_t,COLOR);
                              return -1;
                          }
            }
          }else{
0
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
03.10.2015, 20:28  [ТС] 15
Продолжение и конец функции Turn-Validate() !!!

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
              switch(BoardArr[pos_f]){
                  case 'R': if( ((trn_from[1]==trn_to[1]) || (trn_from[0]==trn_to[0])) || ((pos_t-pos_f)%8==0) ){ 
                                place=Place_Empty(BoardArr,pos_f,pos_t,trn_pos,trn_from,trn_to);
                            }
                            if( (pos_t==*trn_pos && ifturn_black ) || place==1){
                                fig=BoardArr[pos_t];
                                BoardArr[pos_t]=BoardArr[pos_f];
                                BoardArr[pos_f]=' ';
 
                                shh=Shah(BoardArr,player,agressor_ps);
 
                                BoardArr[pos_f]=BoardArr[pos_t];
                                BoardArr[pos_t]=fig;
                                if( shh==0 ){
                                    return 1;
                                }else{
                                    gotoxy(START_X-9,START_Y+5);
                                    printf("\e[%d;%d;%dm  It's WRONG turn: own king get shah!      ",all_off,red_t,COLOR);
                                    return -1;
                                }
                            }else{
                                gotoxy(START_X-9,START_Y+5);
                                printf("\e[%d;%d;%dm  It's WRONG turn to white rook            ",all_off,red_t,COLOR);
                                return -1;
                            }
                  break;
                  case 'N': if( ((pos_t-pos_f)-17==0 || (pos_t-pos_f)-17==-34 || (pos_t-pos_f)-10==0 
                                || (pos_t-pos_f)-10==-20 || (pos_t-pos_f)-6==0 || (pos_t-pos_f)-6==-12
                                ||  (pos_t-pos_f)-15==0 || (pos_t-pos_f)-15==-30)
                                && (BoardArr[pos_t]==' ' || ifturn_black) ){
                 
                                fig=BoardArr[pos_t];
                                BoardArr[pos_t]=BoardArr[pos_f];
                                BoardArr[pos_f]=' ';
                            
                                shh=Shah(BoardArr,player,agressor_ps);
 
                                BoardArr[pos_f]=BoardArr[pos_t];
                                BoardArr[pos_t]=fig;
                                if( shh==0 ){
                                    return 1;
                                }else{
                                    gotoxy(START_X-9,START_Y+5);
                                    printf("\e[%d;%d;%dm  It's WRONG turn: own king get shah!      ",all_off,red_t,COLOR);
                                    return -1;
                                }
                            }else{
                                gotoxy(START_X-9,START_Y+5);
                                printf("\e[%d;%d;%dm  It's WRONG turn to white knite           ",all_off,red_t,COLOR);
                                return -1;
                            }
                  break;
                  case 'B': if( (pos_f-pos_t)%7==0 || (pos_f-pos_t)%9==0 ){
                                place=Place_Empty(BoardArr,pos_f,pos_t,trn_pos,trn_from,trn_to);   
                            }
                            if( (pos_t==*trn_pos && BoardArr[pos_t]!=' ' && ifturn_black ) || place==1 ){
                                 fig=BoardArr[pos_t];
                                 BoardArr[pos_t]=BoardArr[pos_f];
                                 BoardArr[pos_f]=' '; 
 
                                 shh=Shah(BoardArr,player,agressor_ps);
 
                                 BoardArr[pos_f]=BoardArr[pos_t];
                                 BoardArr[pos_t]=fig;
                                 if( shh==0 ){
                                     return 1;
                                 }else{
                                     gotoxy(START_X-9,START_Y+5);
                                     printf("\e[%d;%d;%dm  It's WRONG turn: own king get shah!      ",all_off,red_t,COLOR);
                                     return -1;
                                 }
                            }else{
                                gotoxy(START_X-9,START_Y+5);
                                printf("\e[%d;%d;%dm  It's WRONG turn to white bishop          ",all_off,red_t,COLOR);
                                return -1;
                            }
                  break;
                  case 'Q': if( (pos_f-pos_t)%7==0 || (pos_f-pos_t)%9==0 || ( (trn_from[1]==trn_to[1]) || (trn_from[0]==trn_to[0]) ) 
                                || ((pos_t-pos_f)%8==0) ){
                                    place=Place_Empty(BoardArr,pos_f,pos_t,trn_pos,trn_from,trn_to);    
                            }
                            if( (pos_t==*trn_pos && BoardArr[pos_t]!=' ' && ifturn_black ) || place==1 ){
                                fig=BoardArr[pos_t];
                                BoardArr[pos_t]=BoardArr[pos_f];
                                BoardArr[pos_f]=' '; 
 
                                shh=Shah(BoardArr,player,agressor_ps);
 
                                BoardArr[pos_f]=BoardArr[pos_t];
                                BoardArr[pos_t]=fig;
                                if( shh==0 ){
                                    return 1;
                                }else{
                                    gotoxy(START_X-9,START_Y+5);
                                    printf("\e[%d;%d;%dm  It's WRONG turn: own king get shah!      ",all_off,red_t,COLOR);
                                    return -1;
                                }
                            }else{
                                gotoxy(START_X-9,START_Y+5);
                                printf("\e[%d;%d;%dm  It's WRONG turn to white qween           ",all_off,red_t,COLOR);
                                return -1;
                            }
                  break;
                  case 'K': if( (trn_from[0]-trn_to[0])>=-1 && (trn_from[0]-trn_to[0])<=1 && (trn_from[1]-trn_to[1])>=-1 
                                && (trn_from[1]-trn_to[1])<=1  && ( BoardArr[pos_t]==' ' || ifturn_black ) ){
 
                                fig=BoardArr[pos_t];
                                BoardArr[pos_t]=BoardArr[pos_f];
                                BoardArr[pos_f]=' ';
 
                                shh=Shah(BoardArr,player,agressor_ps);
 
                                BoardArr[pos_f]=BoardArr[pos_t];
                                BoardArr[pos_t]=fig;
                                if( shh==0 ){
                                    return 1;
                                }else{
                                    gotoxy(START_X-9,START_Y+5);
                                    printf("\e[%d;%d;%dmIt's WRONG turn to your king - you get shah!",all_off,red_t,COLOR);
                                    return -1;
                                }
                          }else{
                              gotoxy(START_X-9,START_Y+5);
                              printf("\e[%d;%d;%dm  It's WRONG turn to white king            ",all_off,red_t,COLOR);
                              return -1;
                          }
                  break;
                  case 'P': if( (pos_f>=8 && pos_f<=15 && pos_t-pos_f==16) || (pos_t-pos_f==8) ){  // Turn validate to white pion
                                place=Place_Empty(BoardArr,pos_f,pos_t,trn_pos,trn_from,trn_to);
                            }
                            if( ((pos_t-pos_f==7 || pos_t-pos_f==9) && BoardArr[pos_t]!=' ' && ifturn_black ) || place==1 ){  
                                fig=BoardArr[pos_t];
                                BoardArr[pos_t]=BoardArr[pos_f];
                                BoardArr[pos_f]=' '; 
 
                                shh=Shah(BoardArr,player,agressor_ps);
 
                                BoardArr[pos_f]=BoardArr[pos_t];
                                BoardArr[pos_t]=fig;
                                if( shh==0 ){
                                    return 1;
                                }else{
                                    gotoxy(START_X-9,START_Y+5);
                                    printf("\e[%d;%d;%dm  It's WRONG turn: own king get shah!      ",all_off,red_t,COLOR);
                                    return -1;
                                }
                            }else{
                                gotoxy(START_X-9,START_Y+5);
                                printf("\e[%d;%d;%dm  It's WRONG turn to white pion            ",all_off,red_t,COLOR);
                                return -1;
                             }            
                  break;
                  default : if(BoardArr[pos_f]==' '){
                                gotoxy(START_X-9,START_Y+5);
                                printf("\e[%d;%d;%dm  It's WRONG turn: empty place!            ",all_off,red_t,COLOR);
                                return -1;
                            }
                            if(BoardArr[pos_f]>='a' && BoardArr[pos_f]<='z'){
                                gotoxy(START_X-6,START_Y+5);
                                printf("\e[%d;%d;%dmIt's WRONG turn: play with WHITE figures!",all_off,red_t,COLOR);
                                return -1;
                            }
              }
        }           
    }
}
0
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
03.10.2015, 20:32  [ТС] 16
Продолжение файла "turn-validate.c".

Функция Place-Empty(). Вычисляет находится между атакующей фигурой и жертвой какая то посторонняя фигура, мешающая атаковать.

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
int Place_Empty(char *BoardArr,int turn_f, int turn_t,int *trn_pos, char *trn_from, char *trn_to)  // Calculate valid turn for figures
{
    int i;
 
    switch(BoardArr[turn_f]){  
        case 'Q':
        case 'q': if( (turn_t>turn_f) ){  
                      if( (turn_t-turn_f)%7==0 ){
                          for(i=turn_f+7; i<=turn_t; i+=7 ){
                              if(BoardArr[i]!=' '){
                                  *trn_pos=i;
                                  return -1;
                              }
                          }
                          *trn_pos=i-7;
                          return 1;
                      }
                      if( (turn_t-turn_f)%9==0 ){
                          for(i=turn_f+9; i<=turn_t; i+=9 ){
                               if(BoardArr[i]!=' '){
                                   *trn_pos=i;
                                   return -1;
                               }
                          }
                          *trn_pos=i-9;
                          return 1;
                      }
                      if((turn_t-turn_f)%8==0){
                          for(i=turn_f+8; i<=turn_t; i+=8){
                               if(BoardArr[i]!=' '){
                                   *trn_pos=i;
                                   return -1; 
                               }
                          }
                          *trn_pos=i-8;
                          return 1;
                      }
                      if((trn_from[1]==trn_to[1]) || (trn_from[0]==trn_to[0])){
                          for(i=turn_f+1; i<=turn_t; i++){
                              if(BoardArr[i]!=' '){
                                  *trn_pos=i;
                                  return -1; 
                              }
                          }
                          *trn_pos=i--;
                          return 1;
                      }
                  }
                  /////////////////////////////////////////////////////////
                  if( (turn_f>turn_t) ){
                      if( (turn_f-turn_t)%7==0 ){
                          for(i=turn_t-7; i>=turn_f; i-=7 ){
                              if(BoardArr[i]!=' '){
                                  *trn_pos=i;
                                  return -1;
                              }
                          }
                          *trn_pos=i+7;
                          return 1;
                      }
                      if( (turn_f-turn_t)%9==0 ){
                           for(i=turn_f-9; i>=turn_t; i-=9 ){
                               if(BoardArr[i]!=' '){
                                   *trn_pos=i;
                                   return -1;
                               }
                           }
                           *trn_pos=i+9;
                           return 1;
                      }
                      if((turn_f-turn_t)%8==0){
                          for(i=turn_f-8; i>=turn_t; i-=8){
                              if(BoardArr[i]!=' '){
                                  *trn_pos=i;
                                  return -1; 
                              }
                          }
                          *trn_pos=i+8;
                          return 1;
                      }
                      if((trn_from[1]==trn_to[1]) || (trn_from[0]==trn_to[0])){
                          for(i=turn_f-1; i>=turn_t; i--){
                              if(BoardArr[i]!=' '){
                                  *trn_pos=i;
                                  return -1; 
                              }
                          }
                          *trn_pos=i++;
                          return 1;
                      }
                  }
        break;
        case 'p': for(i=turn_f-8; i>=turn_t; i-=8){
                      if(BoardArr[i]!=' '){
                          *trn_pos=i;
                          return -1; 
                      }
                  }
                  *trn_pos=i+8;
                  return 1;
        break;
        case 'r':
        case 'R': if(turn_f>turn_t){
                      if((turn_f-turn_t)%8==0){
                          for(i=turn_f-8; i>=turn_t; i-=8){
                              if(BoardArr[i]!=' '){
                                  *trn_pos=i;
                                  return -1; 
                              }
                          }
                          *trn_pos=i+8;
                          return 1;
                      }
                      if( (trn_from[1]==trn_to[1]) || (trn_from[0]==trn_to[0]) ){
                          for(i=turn_f-1; i>=turn_t; i--){
                              if(BoardArr[i]!=' '){
                                  *trn_pos=i;
                                  return -1; 
                              }
                          }
                          *trn_pos=i++;
                          return 1;
                      }
                  }
                  if(turn_t>turn_f){
                      if((turn_t-turn_f)%8==0){
                          for(i=turn_f+8; i<=turn_t; i+=8){
                              if(BoardArr[i]!=' '){
                                  *trn_pos=i;
                                  return -1; 
                              }
                          }
                          *trn_pos=i-8;
                          return 1;
                      }
                      if( (trn_from[1]==trn_to[1]) || (trn_from[0]==trn_to[0]) ){
                          for(i=turn_f+1; i<=turn_t; i++){
                              if(BoardArr[i]!=' '){
                                  *trn_pos=i;
                                  return -1; 
                              }
                          }
                          *trn_pos=i--;
                          return 1;
                      }
                  }
        break;
        case 'b':  
        case 'B': if( (turn_t>turn_f) && (turn_t-turn_f)%7==0 ){
                      for(i=turn_f+7; i<=turn_t; i+=7 ){
                          if(BoardArr[i]!=' '){
                              *trn_pos=i;
                              return -1;
                          }
                      }
                      *trn_pos=i-7;
                      return 1;
                  }
                  if( (turn_t>turn_f) && (turn_t-turn_f)%9==0 ){
                      for(i=turn_f+9; i<=turn_t; i+=9 ){
                          if(BoardArr[i]!=' '){
                              *trn_pos=i;
                              return -1;
                          }
                      }
                      *trn_pos=i-9;
                      return 1;
                  }
                  if( (turn_f>turn_t) && (turn_f-turn_t)%7==0 ){
                      for(i=turn_t-7; i>=turn_f; i-=7 ){
                          if(BoardArr[i]!=' '){
                              *trn_pos=i;
                              return -1;
                          }
                      }
                      *trn_pos=i+7;
                      return 1;
                  }
                  if( (turn_f>turn_t) && (turn_f-turn_t)%9==0 ){
                      for(i=turn_f-9; i>=turn_t; i-=9 ){
                          if(BoardArr[i]!=' '){
                              *trn_pos=i;
                              return -1;
                          }
                      }
                      *trn_pos=i+9;
                      return 1;
                  }
        break;
        case 'K': 
        break;
        case 'P': for(i=turn_f+8; i<=turn_t; i+=8){
                      if(BoardArr[i]!=' '){
                          *trn_pos=i;
                          return -1; 
                      }
                  }
                  *trn_pos=i-8;
                  return 1;
        break;
    }  
}
0
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
03.10.2015, 20:46  [ТС] 17
Продолжение файла "turn-validate.c".

Функция Shah(). Вычисляет, получает ли король шах.

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
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
int Shah(char *BoardArr,int player,int *agressor_ps)
{
    int pos_sym1=0,pos_num1=0,stam,count; // pos_sym=position symbol(from a=0 to h=7),pos_num=position_number(from 0 to 7)
    int king_pos_sym=0,king_pos_num=0,kng_pos=0;
    int shah_flag=0;
    char kng; // =king
    char figures_white[7]={'P','B','N','R','Q','K','\0'};
    char figures_black[7]={'p','b','n','r','q','k','\0'};
    char *figure;
 
    if(player==1){ // Set opponent figures
        kng='K'; 
        figure=figures_black;
    }else{
        kng='k';
        figure=figures_white;
    }
 
    for(count=0; count<=63; count++){
        if(BoardArr[count]==kng){
            kng_pos=count;
            count=64;   
        }
    }
        
    king_pos_sym=kng_pos%8;
    king_pos_num=kng_pos/8;
 
    /////////////////// Check with bishop or qween /////////////////////////////////////////////////////
    
    for(pos_sym1=king_pos_sym-1,pos_num1=king_pos_num-1; pos_sym1>=0 && pos_num1>=0; pos_sym1--,pos_num1--){//Scaning bishop or qween1      
        if(BoardArr[pos_num1*8+pos_sym1]!=' ' ){ 
            if(BoardArr[pos_num1*8+pos_sym1]==figure[1] || BoardArr[pos_num1*8+pos_sym1]==figure[4]){
                *agressor_ps=pos_num1*8+pos_sym1; 
                shah_flag=1;    
            }else{
                shah_flag=0;
            } 
            pos_sym1=-1;
            pos_num1=-1;        
        }
    }         
    if( shah_flag==1 ){
        return 1;
    }  
    
    for(pos_sym1=king_pos_sym+1,pos_num1=king_pos_num+1; pos_sym1<=7 && pos_num1<=7; pos_sym1++,pos_num1++){//Scaning bishop or qween2
        if(BoardArr[pos_num1*8+pos_sym1]!=' ' ){
            if(BoardArr[pos_num1*8+pos_sym1]==figure[1] || BoardArr[pos_num1*8+pos_sym1]==figure[4]){
                *agressor_ps=pos_num1*8+pos_sym1; 
                shah_flag=1;
            }else{
                shah_flag=0;
            }
            pos_sym1=8;
            pos_num1=8;
        }
    }
    if( shah_flag==1 ){
        return 1;
    }       
    
    for(pos_sym1=king_pos_sym+1,pos_num1=king_pos_num-1; pos_sym1<=7 && pos_num1>=0; pos_sym1++,pos_num1--){ //Scaning bishop or qween3
        if(BoardArr[pos_num1*8+pos_sym1]!=' ' ){
            if(BoardArr[pos_num1*8+pos_sym1]==figure[1] || BoardArr[pos_num1*8+pos_sym1]==figure[4]){
                *agressor_ps=pos_num1*8+pos_sym1; 
                shah_flag=1;
            }else{
                shah_flag=0;
            }
            pos_sym1=8;
            pos_num1=-1;
        }
    } 
    if( shah_flag==1 ){
        return 1;
    }  
 
    for(pos_sym1=king_pos_sym-1,pos_num1=king_pos_num+1; pos_sym1>=0 && pos_num1<=7; pos_sym1--,pos_num1++){//Scaning bishop or qween4
        if(BoardArr[pos_num1*8+pos_sym1]!=' ' ){
            if(BoardArr[pos_num1*8+pos_sym1]==figure[1] || BoardArr[pos_num1*8+pos_sym1]==figure[4]){
                *agressor_ps=pos_num1*8+pos_sym1; 
                shah_flag=1;
            }else{
                shah_flag=0;
            }
            pos_sym1=-1;
            pos_num1=8;
        }
    }     
    if( shah_flag==1 ){
        return 1;
    } 
    /////////////////////////// Check with rook or qween ////////////////////////////////////////////////
    pos_sym1=king_pos_sym;
    for(pos_num1=king_pos_num-1; pos_num1>=0; pos_num1--){ // Scaning rook or qween1
        if(BoardArr[pos_num1*8+pos_sym1]!=' ' ){
            if(BoardArr[pos_num1*8+pos_sym1]==figure[3] || BoardArr[pos_num1*8+pos_sym1]==figure[4]){
                *agressor_ps=pos_num1*8+pos_sym1; 
                shah_flag=1;
            }else{
                shah_flag=0;
            }
            pos_num1=-1;
        }
    }         
    if( shah_flag==1){
        return 2;
    } 
 
    pos_sym1=king_pos_sym;
    for(pos_num1=king_pos_num+1; pos_num1<=7; pos_num1++){ //Scaning rook or qween2
        if(BoardArr[pos_num1*8+pos_sym1]!=' ' ){
            if(BoardArr[pos_num1*8+pos_sym1]==figure[3] || BoardArr[pos_num1*8+pos_sym1]==figure[4]){
                *agressor_ps=pos_num1*8+pos_sym1; 
                shah_flag=1;
            }else{
                shah_flag=0;
            }
            pos_num1=8;
        }
    } 
    if( shah_flag==1){
        return 2;
    } 
    
    pos_num1=king_pos_num;
    for(pos_sym1=king_pos_sym+1; pos_sym1<=7; pos_sym1++){ // Scaning rook or qween3
        if(BoardArr[pos_num1*8+pos_sym1]!=' ' ){
            if(BoardArr[pos_num1*8+pos_sym1]==figure[3] || BoardArr[pos_num1*8+pos_sym1]==figure[4]){
                *agressor_ps=pos_num1*8+pos_sym1; 
                shah_flag=1;
            }else{
                shah_flag=0;
            }
            pos_sym1=8;
        }
    }     
    if( shah_flag==1){
        return 2;
    } 
 
    pos_num1=king_pos_num;
    for(pos_sym1=king_pos_sym-1; pos_sym1>=0; pos_sym1--){ // Scaning rook or qween4
        if(BoardArr[pos_num1*8+pos_sym1]!=' ' ){
            if(BoardArr[pos_num1*8+pos_sym1]==figure[3] || BoardArr[pos_num1*8+pos_sym1]==figure[4]){
                *agressor_ps=pos_num1*8+pos_sym1; 
                shah_flag=1;
            }else{
                shah_flag=0;
            }
            pos_sym1=-1;
        }
    }     
    if( shah_flag==1){
        return 2;
    } 
    /////////////////////// Scaning for knite ////////////////////////////////////////////////////
    pos_sym1=king_pos_sym;
    pos_num1=king_pos_num;
    
    if(ifknite1>=0 && ifknite1<=63 && BoardArr[ifknite1]==figure[2] ){
        *agressor_ps=ifknite1;
        return 3;
    } 
 
    if(ifknite2>=0 && ifknite2<=63 && BoardArr[ifknite2]==figure[2]){
        *agressor_ps=ifknite2;
        return 3;
    } 
 
    if(ifknite3>=0 && ifknite3<=63 && BoardArr[ifknite3]==figure[2]){
        *agressor_ps=ifknite3;
        return 3;
    } 
 
    if(ifknite4>=0 && ifknite4<=63 && BoardArr[ifknite4]==figure[2]){
        *agressor_ps=ifknite4;
        return 3;
    }
 
    if(ifknite5>=0 && ifknite5<=63 && BoardArr[ifknite5]==figure[2]){
        *agressor_ps=ifknite5;
        return 3;
    } 
    
    if(ifknite6>=0 && ifknite6<=63 && BoardArr[ifknite6]==figure[2]){
        *agressor_ps=ifknite6;
        return 3;
    } 
 
    if(ifknite7>=0 && ifknite7<=63 && BoardArr[ifknite7]==figure[2]){
        *agressor_ps=ifknite7;
        return 3;
    } 
 
    if(ifknite8>=0 && ifknite8<=63 && BoardArr[ifknite8]==figure[2]){
        *agressor_ps=ifknite8;
        return 3;
    } 
    /////////////////////////// Check with pion ////////////////////////////////
    pos_sym1=kng_pos%8;
    pos_num1=kng_pos/8;
    if(kng=='k' && (BoardArr[(pos_num1-1)*8+pos_sym1-1]=='P') ){
        *agressor_ps=(pos_num1-1)*8+pos_sym1-1;
        return 4;
    }
    if(kng=='k' && (BoardArr[(pos_num1-1)*8+pos_sym1+1]=='P') ){
        *agressor_ps=(pos_num1-1)*8+pos_sym1+1;
        return 4;
    }
    if(kng=='K' && (BoardArr[(pos_num1+1)*8+pos_sym1-1]=='p') ){
        *agressor_ps=(pos_num1+1)*8+pos_sym1-1;
        return 5;
    }
    if(kng=='K' && (BoardArr[(pos_num1+1)*8+pos_sym1+1]=='p') ){
        *agressor_ps=(pos_num1+1)*8+pos_sym1+1;
        return 5;
    }
    //////////////////////// Check with king //////////////////////////////////////////
    king_pos_sym=kng_pos%8;
    king_pos_num=kng_pos/8;
    for(pos_num1=king_pos_num+1; pos_num1>=king_pos_num-1; pos_num1--){
        for(pos_sym1=king_pos_sym-1; pos_sym1<=king_pos_sym+1; pos_sym1++){
            if( (pos_num1>=0 && pos_num1<=7) && (pos_sym1>=0 && pos_sym1<=7) && BoardArr[(pos_num1*8)+pos_sym1]==figure[5] ){
                *agressor_ps=(pos_num1*8)+pos_sym1;
                return 6;
            }
        }
    }
 
    //////////////////////////End of checking /////////////////////////////////////////////
    return 0;
}
Добавлено через 1 минуту
Файл "main.h"

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
#define  rook       "\u265C"
#define  knite      "\u265e"
#define  bishop     "\u265D"
#define  qween      "\u265B"
#define  king       "\u265A"
#define  pion       "\u265F"
#define  space      " "
 
#define START_X 11
#define START_Y 11
#define COLOR grey_b
 
typedef enum color_attributes {all_off,bold_on,Underscore=4,blink_on,rev_video_on=7,con_on} color_a;
typedef enum color_txt {black_t=30,red_t,green_t,yellow_t,blue_t,magenta_t,cyan_t,grey_t,white_t=97}   color_t;
typedef enum color_bg {black_b=40,red_b,green_b,yellow_b,blue_b,magenta_b,cyan_b,grey_b,white_b=107}   color_b;
 
#define  print(tool)    printf("%c[%d;%d;%dm %s ",'\e',all_off,txt,bg,tool)
#define  printsym(sym)  printf("%c[%d;%d;%dm%s",'\e',all_off,tx,bgr,sym)
#define  change_bg  (bg==yellow_b)?(bg=cyan_b):(bg=yellow_b)
 
#define  ifturn_white  (BoardArr[pos_t]>='A' && BoardArr[pos_t]<='Z')
#define  ifturn_black  (BoardArr[pos_t]>='a' && BoardArr[pos_t]<='z')
 
#define  ifknite1        (pos_num1-2)*8+pos_sym1-1
#define  ifknite2        (pos_num1-2)*8+pos_sym1+1
#define  ifknite3        (pos_num1-1)*8+pos_sym1+2
#define  ifknite4        (pos_num1+1)*8+pos_sym1+2
#define  ifknite5        (pos_num1+2)*8+pos_sym1+1
#define  ifknite6        (pos_num1+2)*8+pos_sym1-1
#define  ifknite7        (pos_num1+1)*8+pos_sym1-2
#define  ifknite8        (pos_num1-1)*8+pos_sym1-2
 
void Frame(char *nm1, char *nm2);  // The function of the frame. nm1, nm2 =names of players
void Board(char *BoardArr); // The function of the playing field
void gotoxy(int x,int y);
void Print_Tool(color_b bgd, int x, int y, char sym); // The function to output gaming figures
int Turn_Validate(char *BoardArr,int shah,int player,int *go_f, int *go_t, int *trn_pos,int *agressor_ps,char *trn_from, char *trn_to); // Validate the turn of player
int Place_Empty(char *BoardArr,int turn_f, int turn_t, int *trn_pos, char *trn_from, char *trn_to); // Looking for a place where player can go. If occupied returns -1, if it is free 1
int Shah(char *BoardArr,int player, int *agressor_ps); // Checking shah
int King_Protection(char *BoardArr,int main_shah,int *agressor_ps,int player,int *go_f, int *go_t, int *trn_pos, char *trn_from, char *trn_to); // Checks whether the player to continue the game after the shah. If yes, then make a recomendation and returns 1, if not then the mat and the game is over ( returns 0 ).
int Not_Stalemate(char *BoardArr,int main_shah, int player, int *go_f, int *go_t, int *trn_pos,int *agressor_ps, char *trn_from, char *trn_to); // Checks whether stalemate. If so, then the game is over and returns 0, if not then 1
Добавлено через 1 минуту
И последний файл "main.c"
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
#include <stdio.h>
#include "main.h"
 
 
void main(void)
{
    char BoardArray[64]={'R','N','B','Q','K','B','N','R',
                     'P','P','P','P','P','P','P','P',
                     ' ',' ',' ',' ',' ',' ',' ',' ',
                     ' ',' ',' ',' ',' ',' ',' ',' ',
                     ' ',' ',' ',' ',' ',' ',' ',' ',
                     ' ',' ',' ',' ',' ',' ',' ',' ',
                     'p','p','p','p','p','p','p','p',
                     'r','n','b','q','k','b','n','r'};
 
    int go_from; // Position in BoardArray, where the figure goes
    int go_to=0; // Position in BoardArray, which goes figure
    int turn_pos=999; // The actual place where the figure can go. Translated from the main() to functions through pointer *trn_pos
    int agressor_pos=0; // The position of the agressor. Translated from main() to functions through pointer *agressor_ps
    int player=1,turn_validate_flag=1,count,shah=0;
    int frame_white_x=48,frame_white_y=15,frame_black_x=48,frame_black_y=7; // Counters to positions where shown felled figures on the   screen
    int prot_flag=999; // Flag for end of game. If ==0 - end of game
    int stam; // Variable for debugging
    char name1[20],name2[20]; // Strings for names of the players
    char turn_from[2]={'\0','\0'}; // A string representing the position on the board in convenient form for the player. Is transfered to the functions through pointer *trn_from. Can be from 'a1' to 'h8'
    char turn_to[2]={'\0','\0'}; // The same, only *trn_to
    char* name; // Pointer to name of the current player
 
    // In main(). Initially, a check to the shah or stalemate is made. If they do not, then the player enters his move. Then validations
    // is running. If figure is cut down, it is displayed on the right screen. Players are changing and all repeated again until the end
    // of game
     
    system("clear");
 
    gotoxy(START_X+5,START_Y+1);
    printf("                                                        "); 
    gotoxy(START_X+5,START_Y+2);
    printf("                                                        "); 
    gotoxy(START_X+5,START_Y+1);
    printf("\e[%d;%d;%dmPlayer#1, enter your name: ",all_off,black_t,grey_b); scanf("%s",name1);
    gotoxy(START_X+5,START_Y+2);
    printf("\e[%d;%d;%dmPlayer#2, enter your name: ",all_off,black_t,grey_b); scanf("%s",name2);
    printf("\e[%d;%d;%dm\n",all_off,black_t,white_b);
 
    Frame(name1,name2);
    Board(BoardArray);
 
    do{
        if(prot_flag!=0){   
            shah=Shah(BoardArray,player,&agressor_pos);
            if(turn_validate_flag==1){
                if(shah>0){
                    prot_flag=King_Protection(BoardArray,shah,&agressor_pos,player,&go_from,&go_to,&turn_pos,turn_from,turn_to); 
                }else{
                    prot_flag=Not_Stalemate(BoardArray,shah,player,&go_from,&go_to,&turn_pos,&agressor_pos,turn_from,turn_to);
                }       
            }
 
            if(prot_flag!=0){
                if(player==1){
                    name=name1;
                }else{
                    name=name2;
                }
                gotoxy(START_X-6,START_Y+4);
                printf("\e[%d;%d;%dm                                   ",all_off,black_t,COLOR);
                
                gotoxy(START_X-6,START_Y+4);
                printf("\e[%d;%d;%dm%s, enter your turn : ",all_off,black_t,COLOR,name);
                scanf("%2s",turn_from);
                gotoxy(START_X+24,START_Y+4);
                printf("\e[%d;%d;%dm-",all_off,black_t,COLOR);
                scanf("%2s",turn_to);
 
                turn_validate_flag=Turn_Validate(BoardArray,shah,player,&go_from,&go_to,&turn_pos,&agressor_pos,turn_from,turn_to);
                
                if(turn_validate_flag==1){
                    if(BoardArray[go_to]!=' '){
                        if(player==1){
                            Print_Tool(COLOR,frame_white_x,frame_white_y,BoardArray[go_to]);
                            frame_white_x+=2;
                            if(frame_white_x>66){
                                frame_white_y--;
                                frame_white_x=48;
                            }
                        }
                        if(player==-1){
                            Print_Tool(COLOR,frame_black_x,frame_black_y,BoardArray[go_to]);
                            frame_black_x+=2;
                            if(frame_black_x>66){
                                frame_black_y--;
                                frame_black_x=48;
                            }
                        }
                    } 
                    BoardArray[go_to]=BoardArray[go_from];
                    BoardArray[go_from]=' ';  
                    player*=-1;    
                
                    Board(BoardArray);
                    
                }                   
            }
        }
    }while(prot_flag!=0); 
}
Добавлено через 8 минут
Если вас этот проект заинтересовал, и вы его перекопировали, у вас должно получиться пять файлов - board.c, mat-pat.c, turn-validate.c, main.h и main.c

Вы можете их скомпилировать и запустить например следующим способом ( 100%-но подходит для Сентос 6 и 7 ):

Bash
1
2
gcc board.c mat-pat.c turn-validate.c main.h main.c -o main
./main
Это был мой первый проект. Я делал его около месяца. Код получился запутанный, я несколько раз порывался все делать заново, но в итоге все должно работать. Если вам понравилось, не забываем ставить "спасибы" :-)
0
87 / 14 / 2
Регистрация: 11.04.2015
Сообщений: 842
03.10.2015, 21:56  [ТС] 18
АХ ДА!!! ЗАБЫЛ ВЫЛОЖИТЬ файл "board.c". Выкладываю...

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
213
214
215
216
#include <stdio.h>
#include "main.h"
 
void gotoxy(int x,int y)
{
  printf("%c[%d;%df",0x1B,y,x);
}
 
void Print_Tool(color_b bgd, int x,int y, char sym)
{
    color_b bg=bgd;
    color_t txt;
 
    gotoxy(x,y);
    switch(sym){
    case 'r': txt=black_t; print(rook); 
    break;
    case 'n': txt=black_t; print(knite); 
    break;
    case 'b': txt=black_t; print(bishop); 
    break;
    case 'q': txt=black_t; print(qween); 
    break;
    case 'k': txt=black_t; print(king); 
    break;
    case 'p': txt=black_t; print(pion);
    break;
    case 'R': txt=white_t; print(rook);
    break;
    case 'N': txt=white_t; print(knite);
    break;
    case 'B': txt=white_t; print(bishop);
    break;
    case 'Q': txt=white_t; print(qween);
    break;
    case 'K': txt=white_t; print(king);
    break;
    case 'P': txt=white_t; print(pion);
    break;
    default : (bg==cyan_b)?(txt=cyan_t):(txt=yellow_t);
              print(space);
    }
}
 
void Board(char *BoardArr)
{
    int count;
    
    color_b bg=cyan_b;
    for(count=0; count<=63; count++){  // Prints figures and fields. With each new field its color changes
        if(count>0 && count%8>0)change_bg; 
        Print_Tool(bg,START_X+count%8*3,START_Y-(int)(count/8),BoardArr[count]);
    }
    for(count=START_Y-7; count<=START_Y; count++){ // Prints numbers above and under the board
        gotoxy(START_X-2,count);
        printf("\e[%d;%d;%dm%d",all_off,black_t,COLOR,(9-(count-2)+1));
        gotoxy(START_X+25,count);
        printf("\e[%d;%d;%dm%d",all_off,black_t,COLOR,(9-(count-2)+1));
    }
    gotoxy(START_X,START_Y-8);
    printf("\e[%d;%d;%dm a  b  c  d  e  f  g  h",all_off,black_t,COLOR); // Print letters above board
    gotoxy(START_X,START_Y+1);
    printf("\e[%d;%d;%dm a  b  c  d  e  f  g  h\n",all_off,black_t,COLOR);   // Print letters under board
   
}
 
void Frame(char *nm1, char *nm2)
{
    color_t tx;
    color_b bgr;
    char *symb;
    int count,count1;
 
    system("clear");
 
    tx=black_t;
    bgr=COLOR;
 
    symb="\u2554";
    gotoxy(1,1);
    printsym(symb);
 
    symb="\u2550";
    for(count=2;count<=45;count++){
        gotoxy(count,1);
        printsym(symb);
    }
    symb="\u2557";
    printsym(symb);
 
    for(count=2;count<=13;count++){
        symb="\u2551";
        gotoxy(1,count);
        printsym(symb);
        for(count1=2;count1<=45;count1++){
            gotoxy(count1,count);
            printsym(" ");
        }
        symb="\u2551";
        gotoxy(46,count);
        printsym(symb);
    }
    
    symb="\u2560";
    gotoxy(1,14);
    printsym(symb);
    symb="\u2550";
    for(count=2;count<=45;count++){
        gotoxy(count,14);
        printsym(symb);
    }   
    symb="\u2563";
    gotoxy(46,14);
    printsym(symb);
 
    for(count=15;count<=16;count++){
        symb="\u2551";
        gotoxy(1,count);
        printsym(symb);
        for(count1=2;count1<=45;count1++){
            gotoxy(count1,count);
            printsym(" ");
        }
        symb="\u2551";
        gotoxy(46,count);
        printsym(symb);
    }
 
    symb="\u255A";
    gotoxy(1,17);
    printsym(symb);
    symb="\u2550";
    for(count=2;count<=45;count++){
        gotoxy(count,17);
        printsym(symb);
    }   
    symb="\u255D";
    printsym(symb);
 
////////////////////////////////////////////
 
    bgr=COLOR;
    symb="\u250C";
    gotoxy(47,1);
    printsym(symb);
    symb="\u2500";
    for(count=48;count<=69;count++){
        gotoxy(count,1);
        printsym(symb);
    }
    symb="\u2510";
    gotoxy(70,1);
    printsym(symb);
 
    for(count1=2;count1<=8;count1++){
        symb="\u2502";
        gotoxy(47,count1);
        printsym(symb);
        for(count=48; count<=69; count++){
            symb=" ";
            gotoxy(count,count1);
            printsym(symb);
        }
        symb="\u2502";
        gotoxy(70,count1);
        printsym(symb);
    }
 
    symb="\u251C";
    gotoxy(47,9);
    printsym(symb);
    symb="\u2500";
    for(count=48;count<=69;count++){
        gotoxy(count,9);
        printsym(symb);
    }
    symb="\u2524";
    gotoxy(70,9);
    printsym(symb);
 
    for(count1=10;count1<=16;count1++){
        symb="\u2502";
        gotoxy(47,count1);
        printsym(symb);
        for(count=48; count<=69; count++){
            symb=" ";
            gotoxy(count,count1);
            printsym(symb);
        }
        symb="\u2502";
        gotoxy(70,count1);
        printsym(symb);
    }
 
    symb="\u2514";
    gotoxy(47,17);
    printsym(symb);
    symb="\u2500";
    for(count=48;count<=69;count++){
        gotoxy(count,17);
        printsym(symb);
    }
    symb="\u2518";
    gotoxy(70,17);
    printsym(symb);
 
 
////////////////////////////////////////////
 
    gotoxy(11,1);
    printf("\e[%d;%d;%dm CHESS by Maksim Skopin ",all_off,black_t,COLOR);
    gotoxy(54,1);
    printf("\e[%d;%d;%dm %s ",all_off,black_t,COLOR,nm1);
    gotoxy(54,9);
    printf("\e[%d;%d;%dm %s ",all_off,black_t,COLOR,nm2);
}
Добавлено через 35 минут
Если у вас при компиляции выдало только warning'и, то попробуйте запустить код, не обращая на них внимания - игра должна запуститься. Если же ошибки - то тут сложнее... :-?

Добавлено через 17 минут
ИСПРАВЛЕНИЯ КОДА !!!

В функции "mat-pat.c" после комментариев на русском в начале файла надо вставить:

C
1
2
#include <stdio.h>
#include "main.h"
Добавлено через 19 секунд
ИСПРАВЛЕНИЯ КОДА !!!

В функции "mat-pat.c" после комментариев на русском в начале файла надо вставить:

C
1
2
#include <stdio.h>
#include "main.h"
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2015, 21:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Уменьшение времени сборки больших проектов под линукс
Какие есть способы уменьшения времени сборки для реально больших C/C++ проектов под линукс?...

Написать программу на Си под Линукс, которая меняет Mac и IP адреса
Подскажите, как вообще такое можно реализовать? Думала, может отправить команду ifconfig в...

Код под Линукс. Чтение и запись в файл. В чем ошибка?
Полдня бьюсь над кодом. Программа чтения и записи в файл. Дело в том, что функция Write() не...

Купить ноутбук под Линуксом или под вин-7 и добавить Линукс Минт?
Я звонил продавцам, пытая, что за Линукс установлен, в частности, в «Нотике», ничего...


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

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

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