|
|
1.1 root 1:
2: /* This file contains code for X-CHESS.
3: Copyright (C) 1986 Free Software Foundation, Inc.
4:
5: This file is part of X-CHESS.
6:
7: X-CHESS is distributed in the hope that it will be useful,
8: but WITHOUT ANY WARRANTY. No author or distributor
9: accepts responsibility to anyone for the consequences of using it
10: or for whether it serves any particular purpose or works at all,
11: unless he says so in writing. Refer to the X-CHESS General Public
12: License for full details.
13:
14: Everyone is granted permission to copy, modify and redistribute
15: X-CHESS, but only under the conditions described in the
16: X-CHESS General Public License. A copy of this license is
17: supposed to have been given to you along with X-CHESS so you
18: can know your rights and responsibilities. It should be in a
19: file named COPYING. Among other things, the copyright notice
20: and this notice must be preserved on all copies. */
21:
22:
23: /* RCS Info: $Revision: 1.4 $ on $Date: 86/11/23 17:17:15 $
24: * $Source: /users/faustus/xchess/RCS/board.c,v $
25: * Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
26: * Permission is granted to do anything with this code except sell it
27: * or remove this message.
28: *
29: * Stuff to deal with the board.
30: */
31:
32: #include "xchess.h"
33:
34: board *chessboard;
35:
36: void
37: board_setup()
38: {
39: chessboard = alloc(board);
40: board_init(chessboard);
41: return;
42: }
43:
44: void
45: board_init(b)
46: board *b;
47: {
48: int i, j;
49:
50: for (i = 0; i < 2; i++)
51: for (j = 0; j < SIZE; j++)
52: b->square[i][j].color = BLACK;
53: for (i = 2; i < 6; i++)
54: for (j = 0; j < SIZE; j++)
55: b->square[i][j].color = NONE;
56: for (i = 6; i < 8; i++)
57: for (j = 0; j < SIZE; j++)
58: b->square[i][j].color = WHITE;
59: for (i = 0; i < SIZE; i++)
60: b->square[1][i].type = b->square[6][i].type =
61: PAWN;
62: b->square[0][0].type = b->square[7][0].type = ROOK;
63: b->square[0][1].type = b->square[7][1].type = KNIGHT;
64: b->square[0][2].type = b->square[7][2].type = BISHOP;
65: b->square[0][3].type = b->square[7][3].type = QUEEN;
66: b->square[0][4].type = b->square[7][4].type = KING;
67: b->square[0][5].type = b->square[7][5].type = BISHOP;
68: b->square[0][6].type = b->square[7][6].type = KNIGHT;
69: b->square[0][7].type = b->square[7][7].type = ROOK;
70: b->black_cant_castle_k = false;
71: b->black_cant_castle_q = false;
72: b->white_cant_castle_k = false;
73: b->white_cant_castle_q = false;
74:
75: return;
76: }
77:
78: void
79: board_drawall()
80: {
81: int i, j;
82:
83: for (i = 0; i < SIZE; i++)
84: for (j = 0; j < SIZE; j++)
85: if (chessboard->square[i][j].color != NONE) {
86: win_drawpiece(&chessboard->square[i][j], i,
87: j, WHITE);
88: if (!oneboard)
89: win_drawpiece(&chessboard->square[i][j],
90: i, j, BLACK);
91: }
92: return;
93: }
94:
95: void
96: board_move(b, m)
97: board *b;
98: move *m;
99: {
100: switch (m->type) {
101:
102: case MOVE:
103: case CAPTURE:
104: b->square[m->fromy][m->fromx].color = NONE;
105: b->square[m->toy][m->tox].color = m->piece.color;
106: b->square[m->toy][m->tox].type = m->piece.type;
107: if ((m->piece.type == PAWN) && (((m->piece.color == BLACK) &&
108: (m->toy == 7)) || ((m->piece.color == WHITE) &&
109: (m->toy == 0))))
110: b->square[m->toy][m->tox].type = QUEEN;
111: if (m->enpassant)
112: b->square[m->toy + ((m->piece.color == WHITE) ? 1 :
113: -1)][m->tox].color = NONE;
114: break;
115:
116: case KCASTLE:
117: if (m->piece.color == WHITE) {
118: b->square[7][5].color = m->piece.color;
119: b->square[7][5].type = ROOK;
120: b->square[7][6].color = m->piece.color;
121: b->square[7][6].type = KING;
122: b->square[7][4].color = NONE;
123: b->square[7][7].color = NONE;
124: } else {
125: b->square[0][5].color = m->piece.color;
126: b->square[0][5].type = ROOK;
127: b->square[0][6].color = m->piece.color;
128: b->square[0][6].type = KING;
129: b->square[0][4].color = NONE;
130: b->square[0][7].color = NONE;
131: }
132: break;
133:
134: case QCASTLE:
135: if (m->piece.color == WHITE) {
136: b->square[7][3].color = m->piece.color;
137: b->square[7][3].type = ROOK;
138: b->square[7][2].color = m->piece.color;
139: b->square[7][2].type = KING;
140: b->square[7][4].color = NONE;
141: b->square[7][0].color = NONE;
142: } else {
143: b->square[0][3].color = m->piece.color;
144: b->square[0][3].type = ROOK;
145: b->square[0][2].color = m->piece.color;
146: b->square[0][2].type = KING;
147: b->square[0][4].color = NONE;
148: b->square[0][0].color = NONE;
149: }
150: break;
151:
152: default:
153: fprintf(stderr, "Bad move type %d\n", m->type);
154: }
155:
156: if (m->piece.type == KING) {
157: if (m->piece.color == WHITE)
158: b->white_cant_castle_q =
159: b->white_cant_castle_k= true;
160: else
161: b->black_cant_castle_q =
162: b->black_cant_castle_k= true;
163: } else if (m->piece.type == ROOK) {
164: if (m->piece.color == WHITE) {
165: if (m->fromx == 0)
166: b->white_cant_castle_q = true;
167: else if (m->fromx == 7)
168: b->white_cant_castle_k = true;
169: } else {
170: if (m->fromx == 0)
171: b->black_cant_castle_q = true;
172: else if (m->fromx == 7)
173: b->black_cant_castle_k = true;
174: }
175: }
176:
177: return;
178: }
179:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.