3#ifndef MOBILITY_COUNT_MOBILITY_H
4#define MOBILITY_COUNT_MOBILITY_H
19 template<Player P,
bool All,
bool Safe>
24 for(pos+=o;(p=state.
pieceAt(pos)).isEmpty();pos+=o){
37 countMobilityBoth<BLACK,true,true>(state,pos,o,countAll,countSafe);
39 countMobilityBoth<WHITE,true,true>(state,pos,o,countAll,countSafe);
48 countMobilityBoth<BLACK,true,false>(state,pos,o,ret,dummy);
50 countMobilityBoth<WHITE,true,false>(state,pos,o,ret,dummy);
60 countMobilityBoth<BLACK,false,true>(state,pos,o,dummy,ret);
62 countMobilityBoth<WHITE,false,true>(state,pos,o,dummy,ret);
bool hasEffectAt(Square target) const
対象とするマスにあるプレイヤーの利きがあるかどうか.
bool canMoveOn() const
Player Pの駒が,thisの上に移動できるか? PIECE_EMPTY 0x00008000 BLACK_PIECE 0x000XxxYY X>=2, YY>0 PIECE_EDGE 0xfff1...
const Piece pieceAt(Square sq) const
bool isOnBoard() const
盤面上を表すかどうかの判定. 1<=x() && x()<=9 && 1<=y() && y()<=9 Squareの内部表現に依存する.
void countMobilityBoth(const NumEffectState &state, Square pos, Offset o, int &countAll, int &countSafe)
P : 駒pの持ち主 All : countAllを求めるかどうか? Safe : countAllを求めるかどうか? countAll : 利きに関係なく動けるマス countSafe : 相手の利き...
int countMobilitySafe(Player pl, const NumEffectState &state, Square pos, Offset o)
相手の利きがない動けるマスを求める
int countMobilityAll(Player pl, const NumEffectState &state, Square pos, Offset o)
利きに関係なく動けるマスの数
constexpr Player alt(Player player)