/*
* endgame -- plays through a chess game ending. enjoy.
*
* Copyright (C) 2002 Blair Tennessy (tennessy@cs.ubc.ca)
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation. No representations are made about the suitability of this
* software for any purpose. It is provided "as is" without express or
* implied warranty.
*/
#ifndef __CHESSGAMES_H__
#define __CHESSGAMES_H__
/** structure for a chess game */
typedef struct {
/** original board configuration */
int board[BOARDSIZE][BOARDSIZE];
/** total moves */
int movecount;
/**
moves in game. this is a slight hack: moves are encoded in
integer pairs (x,y). the first pair, _from_, determines the
piece to move. the second pair, _to_, determines where to move.
in case _to_ is held by another piece, that piece is taken.
(see drawTakePiece(), draw_chess())
in case the move promotes a pawn, we assume a queening.
(see drawMovingPiece())
what's lacking?
castling, en passant, under-promotions.
*/
int moves[40][4];
} ChessGame;
#define GAMES 7
static ChessGame games[GAMES] = {
/**
game 1:
E. N. Somov-Nasimovitsch
White to play and win.
"Zadachi I Etiudi"
1928
*/
{
{
{ 0, 0, 0, 0, 0, BKING, 0, 0},
{ BPAWN, 0, BPAWN, 0, BPAWN, 0, 0, 0},
{ 0, 0, BPAWN, 0, BPAWN, 0, 0, KNIGHT},
{ PAWN, 0, ROOK, 0, 0, 0, 0, 0},
{ PAWN, 0, 0, 0, KING, PAWN, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ BPAWN, 0, 0, 0, 0, 0, 0, PAWN},
{ BBISHOP,0, 0, 0, 0, 0, 0, 0},
},
24,
{
{3, 2, 6, 2},
{7, 0, 6, 1},
{6, 2, 6, 6},
{0, 5, 0, 4},
{6, 6, 0, 6},
{0, 4, 1, 3},
{2, 7, 1, 5},
{2, 2, 3, 2},
{0, 6, 0, 3},
{1, 3, 2, 2},
{0, 3, 6, 3},
{3, 2, 4, 2}, /* pawn to bishop 5 */
{1, 5, 0, 3}, /* check */
{2, 2, 3, 2},
{0, 3, 2, 4}, /* takes pawn */
{3, 2, 2, 2},
{2, 4, 0, 3},
{2, 2, 3, 2},
{6, 3, 6, 1}, /* rook takes bishop */
{6, 0, 7, 0},
{6, 1, 3, 1},
{3, 2, 2, 3},
{3, 1, 3, 3},
{0, 0, 2, 3},
}
},
/**
game 2:
K. A. L. Kubbel
White to play and win.
"Chess in the USSR"
1936
*/
{
{
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, BPAWN},
{ 0, 0, 0, 0, BPAWN, KING, 0, BKING},
{ 0, 0, 0, 0, 0, ROOK, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ 0,BBISHOP, 0, 0, BROOK, 0, PAWN, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0,BISHOP, 0, 0},
},
10,
{
{3, 5, 6, 5},
{5, 1, 7, 3},
{6, 5, 6, 7}, /* check */
{7, 3, 3, 7},
{7, 5, 6, 4},
{5, 4, 6, 4},
{5, 6, 4, 6}, /* ! */
{6, 4, 6, 7},
{4, 6, 3, 6},
{0, 0, 2, 7}
}
},
/**
game 3:
J. Hasek
White to play and win.
"Le Strategie"
1929
*/
{
{
{ 0, 0, 0, KNIGHT, 0, 0, 0, KNIGHT},
{ 0, KING, BPAWN, BPAWN, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, BKING, 0, 0, 0, 0, 0, 0},
{ 0, PAWN, 0, 0, 0, BPAWN, 0, 0},
{ PAWN, 0, PAWN, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
},
11,
{
{0, 3, 2, 2},
{1, 3, 2, 2},
{0, 7, 2, 6},
{4, 5, 5, 5},
{2, 6, 3, 4},
{5, 5, 6, 5},
{3, 4, 5, 3}, /* ! */
{6, 5, 7, 5},
{5, 3, 6, 1},
{0, 0, 0, 0}, /* mull it over... */
{0, 0, 3, 1}
}
},
/**
game 4:
M.B. Newman
White to play and win.
"Chess Amateur"
1913
*/
{
{
{ 0, 0, 0, 0, BQUEEN, 0, 0, 0},
{BKNIGHT, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, PAWN},
{ BKING, 0, BISHOP, 0, KNIGHT, 0, 0, 0},
{ PAWN, 0, 0, 0, KNIGHT, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ KING, 0, 0, 0, 0, 0, 0, 0},
},
15,
{
{4, 2, 3, 1},
{0, 4, 3, 1}, /* queen wins bishop */
{4, 4, 5, 2},
{4, 0, 5, 0}, /* king takes pawn */
{5, 2, 3, 1}, /* knight takes queen, check */
{1, 0, 3, 1}, /* knight takes knight */
{3, 7, 2, 7}, /* pawn advances */
{3, 1, 2, 3},
{5, 4, 4, 2},
{2, 3, 4, 2},
{2, 7, 1, 7}, /* pawn advances */
{4, 2, 2, 3},
{1, 7, 0, 7},
{0, 0, 0, 0},
{0, 0, 5, 0}
}
},
/**
game 5:
V.A. Korolikov
White to play and win
First Prize - "Truda"
1935
*/
{
{
{ 0, 0, BISHOP, 0, 0, 0, 0, 0},
{ BPAWN, ROOK, 0, 0, 0, 0, 0, 0},
{ 0, 0, BPAWN, PAWN, 0, BKING, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, KING, BBISHOP},
{ 0, 0, 0, 0, BPAWN, 0, PAWN, 0},
{ 0, 0, 0, 0, 0, BPAWN, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
},
21,
{
{2, 3, 1, 3}, /* pawn to q7 */
{2, 5, 1, 4}, /* cover with king */
{1, 1, 0, 1},
{4, 7, 5, 6}, /* bishop takes pawn */
{0, 1, 0, 0}, /* r - r8 */
{6, 5, 7, 5}, /* queened */
{1, 3, 0, 3}, /* white pawn promoted */
{1, 4, 0, 3}, /* king takes queen */
{0, 2, 2, 0}, /* discovered check */
{5, 6, 0, 1}, /* pull back bishop */
{2, 0, 7, 5}, /* bishop takes queen */
{0, 3, 1, 2},
{7, 5, 2, 0}, /* save rook */
{5, 4, 6, 4},
{2, 0, 6, 4}, /* bishop takes pawn */
{1, 2, 1, 1}, /* king moves in */
{6, 4, 5, 5},
{1, 1, 0, 0},
{5, 5, 2, 2},
{0, 0, 0, 0},
{0, 0, 0, 0}
}
},
/**
game 6:
T.B. Gorgiev
White to play and win
First Prize - "64"
1929
*/
{
{
{ 0, 0, 0, 0, 0, 0, KNIGHT, 0},
{ BKNIGHT, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, BKING, BKNIGHT, 0, 0, 0},
{ KING, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, KNIGHT, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, BISHOP, 0, 0, 0},
},
13,
{
{3, 0, 2, 1}, /* king on move */
{1, 0, 0, 2}, /* check */
{2, 1, 1, 1},
{0, 2, 1, 4}, /* knight moves on */
{7, 4, 5, 6}, /* bishop puts king in check */
{2, 3, 1, 3}, /* king moves back */
{0, 6, 2, 5}, /* knight moves in, check */
{1, 3, 0, 3}, /* king moves back queen */
{5, 6, 1, 2}, /* bishop - b7 ch!! */
{2, 4, 1, 2}, /* black knight takes bishop */
{4, 6, 3, 4}, /* knight to k5 */
{0, 0, 0, 0}, /* mate */
{0, 0, 0, 0}
}
},
/**
game 7:
K. A. L. Kubbel
White to play and win
"Schachmatny Listok"
1922
*/
{
{
{ 0, KNIGHT, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ KING, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, BKING, 0, 0, 0, 0},
{ 0, 0, 0, BPAWN, 0, 0, 0, BISHOP},
{ BPAWN, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, PAWN, PAWN, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
},
12,
{
{0, 1, 2, 2}, /* kt-b6 */
{3, 3, 2, 2}, /* k x kt */
{4, 7, 2, 5}, /* b-b6 */
{2, 2, 3, 3}, /* king back to original position */
{6, 3, 5, 3}, /* p-q3! */
{5, 0, 6, 0}, /* p-r7 */
{6, 2, 4, 2}, /* p-b4ch */
{3, 3, 3, 2}, /* king moves, black cannot capture in passing */
{2, 0, 1, 1}, /* k-kt7! */
{6, 0, 7, 0}, /* promo */
{2, 5, 1, 4}, /* mate */
{0, 0, 3, 2},
}
},
};
#endif /* __CHESSGAMES_H__ */