Go to the documentation of this file. 1 #ifndef OSL_PIECE_ON_BOARD_H
2 #define OSL_PIECE_ON_BOARD_H
7 namespace move_generator
18 template<
class Action,
bool noCapturePromote=false>
32 action.unknownMove(from,target,p1,
promote(ptype),
true,P);
33 int y=(P==
BLACK ? target.
y() : 10-target.
y());
35 (((ptype==
LANCE || ptype==
PAWN) ? y==3 :
true )) &&
37 action.unknownMove(from,target,p1,ptype,
false,P);
40 action.unknownMove(from,target,p1,
promote(ptype),
true,P);
42 action.unknownMove(from,target,p1,ptype,
false,P);
45 action.unknownMove(from,target,p1,ptype,
false,P);
48 action.unknownMove(from,target,p1,ptype,
false,P);
66 generatePieceUnsafe<P>(state,p,target,p1,action);
72 template<Player P,Ptype T>
80 action.unknownMove(from,target,p1,
promote(T),
true,P);
82 (P==
BLACK ? target.
y()==1 : target.
y()==9))||
86 (T==
LANCE && (P==
BLACK ? target.
y()==2 : target.
y()==8))))
89 action.unknownMove(from,target,p1,T,
false,P);
91 template<Player P,Ptype T>
103 generatePiecePtypeUnsafe<P,T>(state,p,target,p1,action);
113 template <Player P,Ptype T,
bool useDirMask>
116 template <Player P,Ptype T>
120 generatePtype<P,T,false>(state,p,action,dummy);
130 template <Player P,Ptype T,
bool useDirMask>
132 template <Player P,Ptype T>
136 generatePtypeUnsafe<P,T,false>(state,p,action,dummy);
146 template <Player P,
bool useDirMask>
constexpr Direction primDirUnsafe(Direction d)
8方向について,primitiveな4方向を求める dとしてknight, INVALIDなども来る
const BoardTable Board_Table
static void generatePieceUnsafe(const NumEffectState &state, Piece p, Square target, Piece p1, Action &action)
駒pがマスtargetに利きをもっているとして,手を生成する.
constexpr Player alt(Player player)
static void generatePtype(const NumEffectState &state, Piece p, Action &action)
Ptype promote(Ptype ptype)
promote可能なptypeに対して,promote後の型を返す promote不可のptypeを与えてはいけない.
bool isBetterToPromote(Ptype ptype) const
static void generatePtype(const NumEffectState &state, Piece p, Action &action, int dirMask=0)
Generate moves without stating the Ptype as template param.
static void generatePiece(const NumEffectState &state, Piece p, Square target, Piece p1, Action &action)
bool hasEffectAt(Square target) const
対象とするマスにあるプレイヤーの利きがあるかどうか.
const PtypeTable Ptype_Table
static void generatePtypeUnsafe(const NumEffectState &state, Piece p, Action &action, int dirMask)
Generate moves without stating the Ptype as template param.
Direction pinnedDir(Piece p) const
pinされた駒がPのKingから見てどの方向か? Pから見たdirectionを返す
bool hasEffectByPiece(Piece attack, Square target) const
駒attack が target に利きを持つか (旧hasEffectToと統合)
PieceMask pinOrOpen(Player king) const
const PieceMask pin(Player king) const
Direction getShort8Unsafe(Square from, Square to) const
8方向にいない場合も適当なものを返す.
int y() const
将棋としてのY座標を返す.
constexpr Direction primDir(Direction d)
8方向について,primitiveな4方向を求める
const Square square() const
static void generate(const NumEffectState &state, Piece p, Action &action, int dirMask=0)
Generate moves without stating the Ptype as template param.
bool canDropTo(Player pl, Ptype ptype, Square pos) const
bool canPromote(Ptype ptype)
ptypeがpromote可能な型かどうかのチェック promote済みの場合はfalseを返す
static void generatePiecePtype(const NumEffectState &state, Piece p, Square target, Piece p1, Action &action)
static void generate(Player turn, const NumEffectState &state, Piece target, MoveVector &)
static void generatePtypeUnsafe(const NumEffectState &state, Piece p, Action &action)
static void generatePiecePtypeUnsafe(const NumEffectState &state, Piece p, Square target, Piece p1, Action &action)
PtypeがTの駒pがマスtargetに利きをもっているとして,手を生成する. p1 - targetにある駒