-
Notifications
You must be signed in to change notification settings - Fork 1
/
io.c
129 lines (93 loc) · 3.26 KB
/
io.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
#include <stdio.h>
#include <string.h>
#include "defs.h"
char *PrSq(const int sq) {
static char SqStr[3];
int file = FilesBrd[sq];
int rank = RanksBrd[sq];
sprintf(SqStr, "%c%c", ('a'+file), ('1'+rank));
return SqStr;
}
char *PrMove(const int move) {
static char MvStr[7];
int ff = FilesBrd[FROMSQ(move)];
int rf = RanksBrd[FROMSQ(move)];
int ft = FilesBrd[TOSQ(move)];
int rt = RanksBrd[TOSQ(move)];
int promoted = PROMOTED(move);
if(promoted) {
// char pchar = 'q';
// if(IsKn(promoted)) {
// pchar = 'n';
// } else if(IsRQ(promoted) && !IsBQ(promoted)) {
// pchar = 'r';
// } else if(!IsRQ(promoted) && IsBQ(promoted)) {
// pchar = 'b';
// }
// sprintf(MvStr, "%c%c%c%c%c", ('a'+ff), ('1'+rf), ('a'+ft), ('1'+rt), pchar);
} else {
if(rf > RANK_9 && rt > RANK_9) {
rf = rf-266;
rt = rt-266;
sprintf(MvStr, "%c1%c-%c1%c", ('a'+ff), ('1'+rf), ('a'+ft), ('1'+rt));
} else if(rt > RANK_9) {
rt = rt-266;
sprintf(MvStr, "%c%c-%c1%c", ('a'+ff), ('1'+rf), ('a'+ft), ('1'+rt));
} else if(rf > RANK_9) {
rf = rf-266;
sprintf(MvStr, "%c1%c-%c%c", ('a'+ff), ('1'+rf), ('a'+ft), ('1'+rt));
} else {
sprintf(MvStr, "%c%c-%c%c", ('a'+ff), ('1'+rf), ('a'+ft), ('1'+rt));
}
}
return MvStr;
}
void PrintMoveList(const S_MOVELIST *list) {
int i = 0;
int score = 0;
int move = 0;
printf("Movelist:\n", list->count);
for(i = 0; i < list->count; i++) {
move = list->moves[i].move;
score = list->moves[i].score;
printf("Move: %d > %s (score: %d)\n", i+1, PrMove(move), score);
}
printf("MoveList Total %d Moves:\n\n", list->count);
}
int ParseMove(char *move, S_BOARD *pos) {
char * fromTo[10];
char fromTobytes[10];
int count = explode("-", move, fromTo, fromTobytes);
char * fromstr = fromTo[0];
char * tostr = fromTo[1];
// int i;
// for(i = 0; i < count; i++) {
// printf("fromTo[%d]: %s\n", i, fromTo[i]);
// }
// printf("fromTo[1]: %s\n", fromTo[1]);
int fileFrom = fromstr[0] - 'a';
int fileTo = tostr[0] - 'a';
int rankFrom, rankTo;
fromstr++; tostr++;
rankFrom = atoi(fromstr) - 1;
rankTo = atoi(tostr) - 1;
// printf("FileFrom: %d FileTo: %d\n", fileFrom, fileTo);
// printf("fromstr: %s tostr: %d\n", fromstr, tostr);
int from = FR2SQ(fileFrom, rankFrom);
int to = FR2SQ(fileTo, rankTo);
// printf("move: %s from: %d to %d\n", move, from, to);
ASSERT(SqOnBoard(from) && SqOnBoard(to));
S_MOVELIST list[1];
GenerateAllMoves(pos, list);
int MoveNum = 0;
int Move = 0;
int PromPce = EMPTY;
for(MoveNum = 0; MoveNum < list->count; ++MoveNum) {
Move = list->moves[MoveNum].move;
// printf("from: %d, to: %d\n", FROMSQ(Move), TOSQ(Move));
if(FROMSQ(Move) == from && TOSQ(Move) == to) {
return Move;
}
}
return NOMOVE;
}