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
;
25 GameState(typename
Piece::Color
, bool, bool, bool, bool, const Point
&);
27 virtual const Pools
& pools() const;
28 virtual Pools
& pools();
30 virtual void captureOn(const Point
& p
);
31 virtual void move(const Move
& m
);
36 template <typename Board
, typename Move
>
37 GameState
<Board
, Move
>::GameState() { }
39 template <typename Board
, typename Move
>
40 GameState
<Board
, Move
>::GameState(
41 typename
Piece::Color turn
,
47 : Base(turn
, wk
, wq
, bk
, bq
, ep
) { }
49 template <typename Board
, typename Move
>
50 const typename GameState
<Board
, Move
>::Pools
& GameState
<Board
, Move
>::pools() const {
54 template <typename Board
, typename Move
>
55 typename GameState
<Board
, Move
>::Pools
& GameState
<Board
, Move
>::pools() {
59 template <typename Board
, typename Move
>
60 void GameState
<Board
, Move
>::move(const Move
& m
) {
61 if (m
.drop() == Piece()) {
64 if (m
.promoteTo() != -1) {
65 Piece promoted
= m_board
.get(m
.to());
66 promoted
.setPromoted();
67 m_board
.set(m
.to(), promoted
);
71 m_board
.set(m
.to(), m
.drop());
72 m_pools
.pool(m
.drop().color()).remove(m
.drop().type());
77 template <typename Board
, typename Move
>
78 void GameState
<Board
, Move
>::captureOn(const Point
& p
) {
79 Piece captured
= m_board
.get(p
);
80 if (captured
!= Piece()) {
81 m_pools
.pool(Piece::oppositeColor(captured
.color()))
82 .add(captured
.actualType());
87 } // namespace Crazyhouse
88 } // namespace HLVariant
90 #endif // HLVARIANT__CRAZYHOUSE__GAMESTATE_H