27 for (
int i=0; i<8; ++i)
29 const Offset king_square = normal[i];
30 for (
int j=0; j<8; ++j)
32 const Offset target = normal[j];
35 const int dx = king_square.
dx() - target.
dx();
36 const int dy = king_square.
dy() - target.
dy();
41 reverse[i].push_back(j);
46 for (
int i=0; i<256; ++i)
53 for (
int p: reverse[j])
55 if (! reverse_all[i].isMember(p))
56 reverse_all[i].push_back(p);
62 template <osl::Player Attack>
64 #if (defined __GNUC__) && (! defined GPSONE) && (! defined GPSUSIONE) 73 for (
int i=0; i<8; ++i)
75 testSquare<Attack>(state, king_square+
table.
normal[i], i, flags);
95 unsigned int flags = flags8;
109 return find<BLACK>(state, king_square, out);
111 return find<WHITE>(state, king_square, out);
int countEffect(Player player, Square target) const
利きの数を数える.
constexpr Player alt(Player player)
const PtypeO PTYPEO_EDGE __attribute__((unused))
bool hasEffect() const
短い利きがあるか,間がemptyなら長い利きがある
const Piece pieceAt(Square sq) const
int dy() const
Offsetから一般に dyは求まらないので, ここでの入力は12近傍のみとする
Offset32Base< 8, 9 > Offset32
PtypeO newPtypeO(Player player, Ptype ptype)
void push_back(Square position)
const PtypeTable Ptype_Table
static osl::SetUpRegister _initializer([](){ osl::effect_util::SendOffSquare::init();})
static SendOff8 find(const NumEffectState &state, Square king_position, Square8 &out)
const EffectContent getEffect(PtypeO ptypeo, Square from, Square to) const
fromにいるptypeoがtoに利きを持つか?
static void unpack(SendOff8, Square king, Square8 &out)
PtypeO
Player + Ptype [-15, 15] PtypeO の O は Owner の O.
static int takeOneBit(Integer &mask)
CArray< Offset8, 256 > reverse_all
CArray< Offset, 8 > normal
int dx() const
Offsetから一般に dxは求まらないので, ここでの入力は12近傍のみとする