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 { |