src/game.c

changeset 27
efeb98bc69c9
parent 26
e0a76ee1bb2b
child 28
0c1371488d87
equal deleted inserted replaced
26:e0a76ee1bb2b 27:efeb98bc69c9
93 char logstr[] = { 93 char logstr[] = {
94 getpiecechr(move.piece), 94 getpiecechr(move.piece),
95 filechr(move.fromfile), rowchr(move.fromrow), 95 filechr(move.fromfile), rowchr(move.fromrow),
96 move.capture ? 'x':'\0', 96 move.capture ? 'x':'\0',
97 filechr(move.tofile), rowchr(move.torow), 97 filechr(move.tofile), rowchr(move.torow),
98 move.check ? '+' : (move.checkmate ? '#' : 98 move.check ? '+' : (move.promotion ? '=' : '\0'),
99 (move.promotion ? '=' : '\0')),
100 move.promotion ? getpiecechr(move.promotion) : '\0' 99 move.promotion ? getpiecechr(move.promotion) : '\0'
101 }; 100 };
102 for (int stri = 0 ; stri < sizeof(logstr) ; stri++) { 101 for (int stri = 0 ; stri < sizeof(logstr) ; stri++) {
103 if (logstr[stri]) { 102 if (logstr[stri]) {
104 addch(logstr[stri]); 103 addch(logstr[stri]);
105 } 104 }
105 }
106 }
107 if (!logelem->next) {
108 if (gamestate->checkmate) {
109 addch('#');
110 } else if (gamestate->stalemate) {
111 addstr(" stalemate");
106 } 112 }
107 } 113 }
108 addch(' '); 114 addch(' ');
109 115
110 logelem = logelem->next; 116 logelem = logelem->next;
160 int eval_result = eval_move(gamestate, movestr, &move); 166 int eval_result = eval_move(gamestate, movestr, &move);
161 switch (eval_result) { 167 switch (eval_result) {
162 case VALID_MOVE_SYNTAX: 168 case VALID_MOVE_SYNTAX:
163 if (validate_move(gamestate, &move)) { 169 if (validate_move(gamestate, &move)) {
164 apply_move(gamestate, &move); 170 apply_move(gamestate, &move);
165 if (move.checkmate) { 171 if (gamestate->checkmate) {
166 printw("Checkmate!"); 172 printw("Checkmate!");
167 clrtoeol(); 173 clrtoeol();
168 return 1; 174 return 1;
169 } else if (move.stalemate) { 175 } else if (gamestate->stalemate) {
170 printw("Stalemate!"); 176 printw("Stalemate!");
171 clrtoeol(); 177 clrtoeol();
172 return 1; 178 return 1;
173 } else { 179 } else {
174 return 0; 180 return 0;
236 switch (eval_result) { 242 switch (eval_result) {
237 case VALID_MOVE_SYNTAX: 243 case VALID_MOVE_SYNTAX:
238 net_send_data(opponent, NETCODE_MOVE, &move, sizeof(Move)); 244 net_send_data(opponent, NETCODE_MOVE, &move, sizeof(Move));
239 code = net_recieve_code(opponent); 245 code = net_recieve_code(opponent);
240 move.check = code == NETCODE_CHECK; 246 move.check = code == NETCODE_CHECK;
241 move.checkmate = code == NETCODE_CHECKMATE; 247 gamestate->checkmate = code == NETCODE_CHECKMATE;
242 move.stalemate = code == NETCODE_STALEMATE; 248 gamestate->stalemate = code == NETCODE_STALEMATE;
243 if (code == NETCODE_DECLINE) { 249 if (code == NETCODE_DECLINE) {
244 printw("Invalid move."); 250 printw("Invalid move.");
245 } else { 251 } else {
246 apply_move(gamestate, &move); 252 apply_move(gamestate, &move);
247 if (move.checkmate) { 253 if (gamestate->checkmate) {
248 printw("Checkmate!"); 254 printw("Checkmate!");
249 clrtoeol(); 255 clrtoeol();
250 return 1; 256 return 1;
251 } else if (move.stalemate) { 257 } else if (gamestate->stalemate) {
252 printw("Stalemate!"); 258 printw("Stalemate!");
253 clrtoeol(); 259 clrtoeol();
254 return 1; 260 return 1;
255 } else { 261 } else {
256 return 0; 262 return 0;
298 net_recieve_data(opponent, &move, sizeof(Move)); 304 net_recieve_data(opponent, &move, sizeof(Move));
299 if (validate_move(gamestate, &move)) { 305 if (validate_move(gamestate, &move)) {
300 apply_move(gamestate, &move); 306 apply_move(gamestate, &move);
301 if (move.check) { 307 if (move.check) {
302 net_send_code(opponent, NETCODE_CHECK); 308 net_send_code(opponent, NETCODE_CHECK);
303 } else if (move.checkmate) { 309 } else if (gamestate->checkmate) {
304 net_send_code(opponent, NETCODE_CHECKMATE); 310 net_send_code(opponent, NETCODE_CHECKMATE);
305 printw("\rCheckmate!"); 311 printw("\rCheckmate!");
306 clrtoeol(); 312 clrtoeol();
307 return 1; 313 return 1;
308 } else if (move.stalemate) { 314 } else if (gamestate->stalemate) {
309 net_send_code(opponent, NETCODE_STALEMATE); 315 net_send_code(opponent, NETCODE_STALEMATE);
310 printw("\rStalemate!"); 316 printw("\rStalemate!");
311 clrtoeol(); 317 clrtoeol();
312 return 1; 318 return 1;
313 } else { 319 } else {

mercurial