Add finer engine tracing.
[tagua/yd.git] / src / hlvariant / minishogi / gamestate.h
blob1639fa7f5cc9d2dd920742882b4420983e22b460
1 /*
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"
18 namespace HLVariant {
19 namespace MiniShogi {
21 template <typename _Board, typename _Move>
22 class GameState:
23 public Shogi::GameState<_Board, _Move> {
24 public:
25 virtual void setup();
26 virtual bool promotionZone(typename Shogi::Piece::Color player, const Point& p) const;
29 // IMPLEMENTATION
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);
51 #undef MS_PIECE
52 #undef MS_ROW
53 #undef MS_COL
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