Liberty8を得るために使うテーブル. [詳細]
#include <liberty8Table.h>
Public メソッド | |
Liberty8Table () | |
template<Player P> | |
NearMask | getShortMask (Ptype ptype, Position from, Position to) const |
P側のptypeのfromにある駒がtoにある Pの反対側の駒の周囲 にどういう短い利き(長い利きの隣で利きを伸ばすと8近傍内に 伸ばせる場合を除く)を持つかを返す directでなくても,targetの駒を挟んだ反対側ならOKとする 利きがあるところは0でそうでないところは1とする. | |
template<Player P> | |
LongEffect8 | getLongEffect (Ptype ptype, Position from, Position to) const |
P側のptypeのfromにある駒がtoにある Pの反対側の駒の周囲 にどういう長い利き(長い利きの隣で利きを伸ばすと8近傍内に 伸ばせる場合を含む)を持つかを返す. | |
template<Player P> | |
LongEffect8 | getLongEffect2 (Position from, Position to) const |
飛車, 龍が王の斜めの位置にいて, 両方向に長い利きを持つ場合の テーブル | |
Private メソッド | |
LongEffect8 | longEffectOf (Ptype ptype, int dx, int dy) |
黒の攻め方の駒ptype から dx, dyの位置にいる白玉の 近隣 Dir(白玉に白の目から見てDirの動き到達可能なマス) に 利きを持つ場合は dirToMask(Dir)が0, そうでない場合は1 | |
Private 変数 | |
CArray< CArray< unsigned char, Offset32::SIZE >, PTYPE_SIZE > | shortMask |
CArray2d< LongEffect8, PTYPE_SIZE, Offset32::SIZE > | longEffect |
CArray< LongEffect8, Offset32::SIZE > | longEffect2 |
Liberty8を得るために使うテーブル.
短い利きに関しては,ptypeと座標の差でテーブルを引けば得られる. 長い利きはgetLongEffectで得るが, 飛車に関してはそれに加えてgetLongEffect2も使う.
liberty8Table.h の 51 行で定義されています。
osl::effect::Liberty8Table::Liberty8Table | ( | ) |
まずはクリア()
liberty8Table.cc の 141 行で定義されています。
参照先 osl::BLACK, osl::EffectContent::DIRECT(), osl::PtypeTable::getEffect(), osl::EffectContent::hasEffect(), osl::PtypeTable::hasLongMove(), osl::Offset32Base< Width, Width2 >::index(), longEffect, longEffectOf(), osl::newPtypeO(), osl::PPAWN, osl::PTYPE_MAX, osl::PTYPE_PIECE_MIN, osl::Ptype_Table, osl::ROOK, shortMask, と osl::effect::shortMaskOf().
LongEffect8 osl::effect::Liberty8Table::getLongEffect | ( | Ptype | ptype, | |
Position | from, | |||
Position | to | |||
) | const [inline] |
P側のptypeのfromにある駒がtoにある Pの反対側の駒の周囲 にどういう長い利き(長い利きの隣で利きを伸ばすと8近傍内に 伸ばせる場合を含む)を持つかを返す.
liberty8Table.h の 77 行で定義されています。
参照先 osl::PtypeTable::hasLongMove(), osl::Position::isOnBoard(), osl::isValid(), longEffect, と osl::Ptype_Table.
LongEffect8 osl::effect::Liberty8Table::getLongEffect2 | ( | Position | from, | |
Position | to | |||
) | const [inline] |
飛車, 龍が王の斜めの位置にいて, 両方向に長い利きを持つ場合の テーブル
liberty8Table.h の 88 行で定義されています。
NearMask osl::effect::Liberty8Table::getShortMask | ( | Ptype | ptype, | |
Position | from, | |||
Position | to | |||
) | const [inline] |
P側のptypeのfromにある駒がtoにある Pの反対側の駒の周囲 にどういう短い利き(長い利きの隣で利きを伸ばすと8近傍内に 伸ばせる場合を除く)を持つかを返す directでなくても,targetの駒を挟んだ反対側ならOKとする 利きがあるところは0でそうでないところは1とする.
liberty8Table.h の 66 行で定義されています。
参照先 osl::Position::isOnBoard(), osl::isValid(), と shortMask.
LongEffect8 osl::effect::Liberty8Table::longEffectOf | ( | Ptype | ptype, | |
int | dx, | |||
int | dy | |||
) | [private] |
黒の攻め方の駒ptype から dx, dyの位置にいる白玉の 近隣 Dir(白玉に白の目から見てDirの動き到達可能なマス) に 利きを持つ場合は dirToMask(Dir)が0, そうでない場合は1
自分が動いて元のマスに利きをつける手は生成しない
liberty8Table.cc の 91 行で定義されています。
参照先 osl::Board_Table, osl::effect::directionOf(), osl::BoardTable::getDxForBlack(), osl::BoardTable::getDyForBlack(), osl::effect::hasLongMove(), osl::PtypeTable::hasLongMove(), osl::Offset32Base< Width, Width2 >::index(), longEffect2, osl::PROOK, osl::Ptype_Table, osl::ROOK, osl::effect::LongEffect8::setMask(), osl::effect::LongEffect8::setOffset(), と osl::Offset::ZERO().
参照元 Liberty8Table().
CArray2d<LongEffect8,PTYPE_SIZE,Offset32::SIZE> osl::effect::Liberty8Table::longEffect [private] |
liberty8Table.h の 53 行で定義されています。
参照元 getLongEffect(), と Liberty8Table().
CArray<LongEffect8,Offset32::SIZE> osl::effect::Liberty8Table::longEffect2 [private] |
liberty8Table.h の 54 行で定義されています。
参照元 getLongEffect2(), と longEffectOf().
CArray<CArray<unsigned char,Offset32::SIZE>,PTYPE_SIZE> osl::effect::Liberty8Table::shortMask [private] |
liberty8Table.h の 52 行で定義されています。
参照元 getShortMask(), と Liberty8Table().