src/game.c

Mon, 31 Mar 2014 14:08:00 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 31 Mar 2014 14:08:00 +0200
changeset 22
41bbfd4d17a3
parent 21
2e5846019b4f
child 23
824c9522ce66
permissions
-rw-r--r--

improved network performance

6
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2014 Mike Becker. All rights reserved.
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 *
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 */
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 #include "game.h"
19
6a26114297a1 moved chess rules to separate lib
Mike Becker <universe@uap-core.de>
parents: 18
diff changeset
31 #include "network.h"
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
32 #include "input.h"
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
33 #include <ncurses.h>
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
34 #include <string.h>
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
35
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
36 static const uint8_t boardx = 10, boardy = 10;
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
37
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
38 static void draw_board(Board board, MoveListRoot *movelist, uint8_t mycolor) {
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
39
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
40 for (uint8_t y = 0 ; y < 8 ; y++) {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
41 for (uint8_t x = 0 ; x < 8 ; x++) {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
42 uint8_t col = board[y][x] & COLOR_MASK;
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
43 uint8_t piece = board[y][x] & PIECE_MASK;
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
44 char piecec;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
45 if (piece) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
46 piecec = piece == PAWN ? 'P' : getpiecechr(piece);
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
47 } else {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
48 piecec = ' ';
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
49 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
50
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
51 attrset((col == WHITE ? A_BOLD : A_DIM) |
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
52 COLOR_PAIR((y&1)==(x&1) ? COL_WB : COL_BW));
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
53
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
54 int cy = mycolor == WHITE ? boardy-y : boardy-7+y;
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
55 int cx = mycolor == WHITE ? boardx+x*3 : boardx+21-x*3;
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
56 mvaddch(cy, cx, ' ');
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
57 mvaddch(cy, cx+1, piecec);
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
58 mvaddch(cy, cx+2, ' ');
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
59 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
60 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
61
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
62 attrset(A_NORMAL);
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
63 for (uint8_t i = 0 ; i < 8 ; i++) {
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
64 int x = mycolor == WHITE ? boardx+i*3+1 : boardx+22-i*3;
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
65 int y = mycolor == WHITE ? boardy-i : boardy-7+i;
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
66 mvaddch(boardy+1, x, 'a'+i);
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
67 mvaddch(y, boardx-2, '1'+i);
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
68 }
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
69
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
70 /* move log */
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
71 // TODO: introduce window to avoid bugs with a long move log
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
72 uint8_t logy = 0;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
73 const uint8_t logx = boardx + 30;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
74 int logi = 1;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
75 MoveList *logelem = movelist->first;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
76
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
77 while (logelem) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
78 logi++;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
79 if (logi % 2 == 0) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
80 if ((logi - 2) % 4 == 0) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
81 logy++;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
82 wmove(tchess_window, logy, logx);
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
83 }
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
84 printw("%d. ", logi / 2);
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
85 }
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
86
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
87 if (logelem) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
88 Move move = logelem->move;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
89 char logstr[] = {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
90 getpiecechr(move.piece),
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
91 filechr(move.fromfile), rowchr(move.fromrow),
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
92 move.capture ? 'x':'\0',
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
93 filechr(move.tofile), rowchr(move.torow),
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
94 move.check ? '+' : (move.checkmate ? '#' :
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
95 (move.promotion ? '=' : '\0')),
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
96 move.promotion ? getpiecechr(move.promotion) : '\0',
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
97 ' '
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
98 };
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
99 for (int stri = 0 ; stri < sizeof(logstr) ; stri++) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
100 if (logstr[stri]) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
101 addch(logstr[stri]);
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
102 }
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
103 }
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
104
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
105 logelem = logelem->next;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
106 }
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
107 }
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
108 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
109
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
110
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
111 static int sendmove(Board board, MoveListRoot *movelist,
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
112 uint8_t mycolor, int opponent) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
113
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
114 const size_t buflen = 8;
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
115 char movestr[buflen];
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
116 _Bool remisrejected = FALSE;
11
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
117 uint8_t code;
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
118
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
119 int inputy = getmaxy(tchess_window) - 6;
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
120 while (1) {
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
121 move(inputy, 0);
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
122 if (remisrejected) {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
123 printw(
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
124 "Use chess notation to enter your move.\n"
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
125 "Remis offer rejected - type 'surr' to surrender. \n\n"
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
126 "Type your move: ");
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
127 } else {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
128 printw(
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
129 "Use chess notation to enter your move.\n"
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
130 "Or type 'surr' to surrender or 'remis' to offer remis.\n\n"
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
131 "Type your move: ");
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
132 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
133 clrtoeol();
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
134 refresh();
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
135 getnstr(movestr, buflen);
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
136
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
137 if (strncmp(movestr, "surr", buflen) == 0) {
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
138 printw("You surrendered!");
16
a298c6637c30 introduced status codes for get_location to produce detailed error messages + added knight rules
Mike Becker <universe@uap-core.de>
parents: 15
diff changeset
139 clrtoeol();
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
140 refresh();
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
141 net_send_code(opponent, NETCODE_SURRENDER);
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
142 return 1;
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
143 } else if (strncmp(movestr, "remis", buflen) == 0) {
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
144 if (!remisrejected) {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
145 net_send_code(opponent, NETCODE_REMIS);
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
146 printw("Remis offer sent - waiting for acceptance...");
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
147 refresh();
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
148 if (net_recieve_code(opponent) == NETCODE_ACCEPT) {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
149 printw("\rRemis accepted!");
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
150 clrtoeol();
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
151 refresh();
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
152 return 1;
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
153 } else {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
154 remisrejected = TRUE;
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
155 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
156 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
157 } else {
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
158 Move move;
16
a298c6637c30 introduced status codes for get_location to produce detailed error messages + added knight rules
Mike Becker <universe@uap-core.de>
parents: 15
diff changeset
159 int eval_result = eval_move(board, mycolor, movestr, &move);
a298c6637c30 introduced status codes for get_location to produce detailed error messages + added knight rules
Mike Becker <universe@uap-core.de>
parents: 15
diff changeset
160 switch (eval_result) {
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
161 case VALID_MOVE_SYNTAX:
22
41bbfd4d17a3 improved network performance
Mike Becker <universe@uap-core.de>
parents: 21
diff changeset
162 net_send_data(opponent, NETCODE_MOVE, &move, sizeof(Move));
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
163 code = net_recieve_code(opponent);
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
164 move.check = code == NETCODE_CHECK;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
165 move.checkmate = code == NETCODE_CHECKMATE;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
166 if (code == NETCODE_DECLINE) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
167 printw("Invalid move.");
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
168 } else {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
169 apply_move(board, &move);
21
2e5846019b4f implemented rook + some fixes
Mike Becker <universe@uap-core.de>
parents: 19
diff changeset
170 addmove(movelist, &move);
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
171 if (move.checkmate) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
172 printw("Checkmate!");
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
173 clrtoeol();
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
174 return 1;
14
970748b9a73b fixed crucial bug where both players could move at the same time + added pawn rules (TODO: en passant)
Mike Becker <universe@uap-core.de>
parents: 13
diff changeset
175 } else {
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
176 return 0;
11
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
177 }
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
178 }
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
179 break;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
180 case AMBIGUOUS_MOVE:
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
181 printw("Ambiguous move - please specify the piece to move.");
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
182 break;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
183 case INVALID_POSITION:
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
184 printw("Cannot find the piece that shall be moved.");
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
185 break;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
186 case NEED_PROMOTION:
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
187 printw("You need to promote the pawn (append \"=Q\" e.g.)!");
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
188 break;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
189 default:
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
190 printw("Can't interpret move - please use algebraic notation.");
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
191 }
16
a298c6637c30 introduced status codes for get_location to produce detailed error messages + added knight rules
Mike Becker <universe@uap-core.de>
parents: 15
diff changeset
192 clrtoeol();
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
193 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
194 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
195 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
196
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
197 static int recvmove(Board board, MoveListRoot *movelist, int opponent) {
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
198
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
199 int inputy = getmaxy(tchess_window) - 6;
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
200 while (1) {
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
201 move(inputy, 0);
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
202 printw("Awaiting opponent move...");
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
203 clrtoeol();
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
204 refresh();
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
205
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
206 // TODO: nonblocking
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
207 uint32_t code = net_recieve_code(opponent);
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
208
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
209 Move move;
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
210 switch (code) {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
211 case NETCODE_SURRENDER:
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
212 printw("\rYour opponent surrendered!");
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
213 clrtoeol();
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
214 return 1;
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
215 case NETCODE_REMIS:
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
216 if (prompt_yesno(
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
217 "\rYour opponent offers remis - do you accept")) {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
218 printw("\rRemis accepted!");
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
219 clrtoeol();
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
220 net_send_code(opponent, NETCODE_ACCEPT);
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
221 return 1;
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
222 } else {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
223 net_send_code(opponent, NETCODE_DECLINE);
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
224 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
225 break;
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
226 case NETCODE_MOVE:
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
227 net_recieve_data(opponent, &move, sizeof(Move));
11
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
228 if (validate_move(board, &move)) {
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
229 apply_move(board, &move);
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
230 addmove(movelist, &move);
11
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
231 if (move.check) {
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
232 net_send_code(opponent, NETCODE_CHECK);
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
233 } else if (move.checkmate) {
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
234 net_send_code(opponent, NETCODE_CHECKMATE);
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
235 } else {
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
236 net_send_code(opponent, NETCODE_ACCEPT);
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
237 }
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
238 return 0;
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
239 } else {
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
240 net_send_code(opponent, NETCODE_DECLINE);
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
241 }
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
242 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
243 }
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
244 }
6
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
245
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
246 void freemovelist(MoveListRoot* list) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
247 MoveList *elem;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
248 elem = list->first;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
249 while (elem) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
250 MoveList *cur = elem;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
251 elem = elem->next;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
252 free(cur);
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
253 };
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
254 free(list);
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
255 }
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
256
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
257 void addmove(MoveListRoot* list, Move *move) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
258 MoveList *elem = malloc(sizeof(MoveList));
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
259 elem->next = NULL;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
260 elem->move = *move;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
261
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
262 if (list->last) {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
263 list->last->next = elem;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
264 list->last = elem;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
265 } else {
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
266 list->first = list->last = elem;
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
267 }
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
268 }
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
269
6
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
270 void game_start(Settings *settings, int opponent) {
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
271 _Bool myturn = is_server(settings) ==
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
272 (settings->gameinfo.servercolor == WHITE);
8
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
273 uint8_t mycolor = myturn ? WHITE:BLACK;
52d742aee695 implemented simple pawn movement
Mike Becker <universe@uap-core.de>
parents: 7
diff changeset
274
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
275 _Bool running;
6
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
276
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
277 MoveListRoot* movelist = calloc(1, sizeof(MoveListRoot));
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
278
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
279 Board board = {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
280 {WROOK, WKNIGHT, WBISHOP, WQUEEN, WKING, WBISHOP, WKNIGHT, WROOK},
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
281 {WPAWN, WPAWN, WPAWN, WPAWN, WPAWN, WPAWN, WPAWN, WPAWN},
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
282 {0, 0, 0, 0, 0, 0, 0, 0},
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
283 {0, 0, 0, 0, 0, 0, 0, 0},
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
284 {0, 0, 0, 0, 0, 0, 0, 0},
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
285 {0, 0, 0, 0, 0, 0, 0, 0},
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
286 {BPAWN, BPAWN, BPAWN, BPAWN, BPAWN, BPAWN, BPAWN, BPAWN},
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
287 {BROOK, BKNIGHT, BBISHOP, BQUEEN, BKING, BBISHOP, BKNIGHT, BROOK}
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
288 };
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
289
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
290 do {
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
291 clear();
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
292 draw_board(board, movelist, mycolor);
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
293 if (myturn) {
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
294 running = !sendmove(board, movelist, mycolor, opponent);
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
295 } else {
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
296 running = !recvmove(board, movelist, opponent);
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
297 flushinp(); // flush any input the user hacked in while waiting
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
298 }
11
08d7a6e3ec31 added network messages for check and checkmate
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
299 myturn ^= TRUE;
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
300 } while (running);
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
301
18
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
302 freemovelist(movelist);
6008840b859e fixed bishop + added pawn promotion + added move log
Mike Becker <universe@uap-core.de>
parents: 17
diff changeset
303
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
304 mvaddstr(getmaxy(tchess_window)-1, 0,
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
305 "Game has ended. Press any key to leave...");
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 6
diff changeset
306 getch();
6
daaf6e5b3501 structured code
Mike Becker <universe@uap-core.de>
parents:
diff changeset
307 }

mercurial