1 #ifndef HLVARIANT__CRAZYHOUSE__GAMESTATE_H
2 #define HLVARIANT__CRAZYHOUSE__GAMESTATE_H
4 #include "../chess/gamestate.h"
6 #include "../poolcollection.h"
11 template <typename _Board
, typename _Move
>
12 class GameState
: public HLVariant::Chess::GameState
<_Board
, _Move
> {
13 typedef HLVariant::Chess::GameState
<_Board
, _Move
> Base
;
15 typedef typename
Base::Board Board
;
16 typedef typename
Base::Move Move
;
17 typedef typename
Base::Piece Piece
;
18 typedef Pool
<Piece
> Pool
;
19 typedef PoolCollection
<Pool
> Pools
;
24 virtual const Pools
& pools() const;
25 virtual Pools
& pools();
27 virtual void captureOn(const Point
& p
);
28 virtual void move(const Move
& m
);
33 template <typename Board
, typename Move
>
34 const typename GameState
<Board
, Move
>::Pools
& GameState
<Board
, Move
>::pools() const {
38 template <typename Board
, typename Move
>
39 typename GameState
<Board
, Move
>::Pools
& GameState
<Board
, Move
>::pools() {
43 template <typename Board
, typename Move
>
44 void GameState
<Board
, Move
>::move(const Move
& m
) {
45 if (m
.drop() == Piece()) {
48 if (m
.promoteTo() != -1) {
49 Piece promoted
= m_board
.get(m
.to());
50 promoted
.setPromoted();
51 m_board
.set(m
.to(), promoted
);
55 m_board
.set(m
.to(), m
.drop());
56 m_pools
.pool(m
.drop().color()).remove(m
.drop().type());
60 template <typename Board
, typename Move
>
61 void GameState
<Board
, Move
>::captureOn(const Point
& p
) {
62 Piece captured
= m_board
.get(p
);
63 if (captured
!= Piece()) {
64 m_pools
.pool(captured
.color()).add(captured
.actualType());
69 } // namespace Crazyhouse
70 } // namespace HLVariant
72 #endif // HLVARIANT__CRAZYHOUSE__GAMESTATE_H