2 Copyright (c) 2007 Paolo Capriotti <p.capriotti@gmail.com>
3 (c) 2007 Maurizio Monge <maurizio.monge@kdemail.net>
4 (c) 2007 Yann Dirson <ydirson@altern.org>
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
12 #ifndef HLVARIANT__MINISHOGI__GAMESTATE_H
13 #define HLVARIANT__MINISHOGI__GAMESTATE_H
15 #include "../shogi/gamestate.h"
16 #include "../shogi/piece.h"
21 template <typename _Board
, typename _Move
>
23 public Shogi::GameState
<_Board
, _Move
> {
26 virtual bool promotionZone(typename
Shogi::Piece::Color player
, const Point
& p
) const;
31 #define MS_COL(i, c) c == Shogi::Piece::BLACK ? (i) : \
32 (Shogi::GameState<Board, Move>::board().size().x - i - 1)
33 #define MS_ROW(i, c) rank + i * Shogi::GameState<Board, Move>::direction(color).y
34 #define MS_PIECE(x,y,p) Shogi::GameState<Board, Move>::board().set(Point(MS_COL(x, c), MS_ROW(y, c)), \
35 Shogi::Piece(color, p))
36 template <typename Board
, typename Move
>
37 void GameState
<Board
, Move
>::setup() {
38 for (int c
= 0; c
< 2; c
++) {
39 typename
Shogi::Piece::Color color
= static_cast<typename
Shogi::Piece::Color
>(c
);
40 int rank
= Shogi::GameState
<Board
, Move
>::startingRank(color
);
42 MS_PIECE(0, 0, Shogi::Piece::KING
);
43 MS_PIECE(1, 0, Shogi::Piece::GOLD
);
44 MS_PIECE(2, 0, Shogi::Piece::SILVER
);
45 MS_PIECE(3, 0, Shogi::Piece::BISHOP
);
46 MS_PIECE(4, 0, Shogi::Piece::ROOK
);
48 MS_PIECE(0, 1, Shogi::Piece::PAWN
);
55 template <typename Board
, typename Move
>
56 bool GameState
<Board
, Move
>::promotionZone(typename
Shogi::Piece::Color player
, const Point
& p
) const {
57 return player
== Shogi::Piece::WHITE
? p
.y
== 4 : p
.y
== 0;
60 } // namespace MiniShogi
61 } // namespace HLVariant
63 #endif // HLVARIANT__MINISHOGI__GAMESTATE_H