Use EFFECTIVE_SQUARE_NB
This commit is contained in:
parent
66b6eee8e9
commit
afcc4a953d
|
@ -121,8 +121,7 @@ Value Evaluation<T>::value()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PHASE_GAMEOVER:
|
case PHASE_GAMEOVER:
|
||||||
if (pos.pieces_count_on_board(BLACK) + pos.pieces_count_on_board(WHITE) >=
|
if (pos.pieces_count_on_board(BLACK) + pos.pieces_count_on_board(WHITE) >= EFFECTIVE_SQUARE_NB) {
|
||||||
RANK_NB * FILE_NB) {
|
|
||||||
if (rule.isBlackLoseButNotDrawWhenBoardFull) {
|
if (rule.isBlackLoseButNotDrawWhenBoardFull) {
|
||||||
value -= VALUE_MATE;
|
value -= VALUE_MATE;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -51,13 +51,10 @@ template<>
|
||||||
ExtMove *generate<MOVE>(Position &pos, ExtMove *moveList)
|
ExtMove *generate<MOVE>(Position &pos, ExtMove *moveList)
|
||||||
{
|
{
|
||||||
Square newSquare, oldSquare;
|
Square newSquare, oldSquare;
|
||||||
|
|
||||||
const int MOVE_PRIORITY_TABLE_SIZE = FILE_NB * RANK_NB;
|
|
||||||
|
|
||||||
ExtMove *cur = moveList;
|
ExtMove *cur = moveList;
|
||||||
|
|
||||||
// move piece that location weak first
|
// move piece that location weak first
|
||||||
for (int i = MOVE_PRIORITY_TABLE_SIZE - 1; i >= 0; i--) {
|
for (int i = EFFECTIVE_SQUARE_NB - 1; i >= 0; i--) {
|
||||||
oldSquare = MoveList<LEGAL>::movePriorityTable[i];
|
oldSquare = MoveList<LEGAL>::movePriorityTable[i];
|
||||||
|
|
||||||
if (!pos.select_piece(oldSquare)) {
|
if (!pos.select_piece(oldSquare)) {
|
||||||
|
@ -97,12 +94,10 @@ ExtMove *generate<REMOVE>(Position &pos, ExtMove *moveList)
|
||||||
Color us = pos.side_to_move();
|
Color us = pos.side_to_move();
|
||||||
Color them = ~us;
|
Color them = ~us;
|
||||||
|
|
||||||
const int MOVE_PRIORITY_TABLE_SIZE = FILE_NB * RANK_NB;
|
|
||||||
|
|
||||||
ExtMove *cur = moveList;
|
ExtMove *cur = moveList;
|
||||||
|
|
||||||
if (pos.is_all_in_mills(them)) {
|
if (pos.is_all_in_mills(them)) {
|
||||||
for (int i = MOVE_PRIORITY_TABLE_SIZE - 1; i >= 0; i--) {
|
for (int i = EFFECTIVE_SQUARE_NB - 1; i >= 0; i--) {
|
||||||
s = MoveList<LEGAL>::movePriorityTable[i];
|
s = MoveList<LEGAL>::movePriorityTable[i];
|
||||||
if (pos.get_board()[s] & make_piece(them)) {
|
if (pos.get_board()[s] & make_piece(them)) {
|
||||||
*cur++ = (Move)-s;
|
*cur++ = (Move)-s;
|
||||||
|
@ -112,7 +107,7 @@ ExtMove *generate<REMOVE>(Position &pos, ExtMove *moveList)
|
||||||
}
|
}
|
||||||
|
|
||||||
// not is all in mills
|
// not is all in mills
|
||||||
for (int i = MOVE_PRIORITY_TABLE_SIZE - 1; i >= 0; i--) {
|
for (int i = EFFECTIVE_SQUARE_NB - 1; i >= 0; i--) {
|
||||||
s = MoveList<LEGAL>::movePriorityTable[i];
|
s = MoveList<LEGAL>::movePriorityTable[i];
|
||||||
if (pos.get_board()[s] & make_piece(them)) {
|
if (pos.get_board()[s] & make_piece(them)) {
|
||||||
if (rule.allowRemovePieceInMill || !pos.in_how_many_mills(s, NOBODY)) {
|
if (rule.allowRemovePieceInMill || !pos.in_how_many_mills(s, NOBODY)) {
|
||||||
|
@ -129,8 +124,6 @@ ExtMove *generate<REMOVE>(Position &pos, ExtMove *moveList)
|
||||||
template<>
|
template<>
|
||||||
ExtMove *generate<LEGAL>(Position &pos, ExtMove *moveList)
|
ExtMove *generate<LEGAL>(Position &pos, ExtMove *moveList)
|
||||||
{
|
{
|
||||||
const int MOVE_PRIORITY_TABLE_SIZE = FILE_NB * RANK_NB;
|
|
||||||
|
|
||||||
ExtMove *cur = moveList;
|
ExtMove *cur = moveList;
|
||||||
|
|
||||||
switch (pos.get_action()) {
|
switch (pos.get_action()) {
|
||||||
|
|
|
@ -69,18 +69,22 @@ struct MoveList
|
||||||
explicit MoveList(/* const */ Position &pos) : last(generate<T>(pos, moveList))
|
explicit MoveList(/* const */ Position &pos) : last(generate<T>(pos, moveList))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
const ExtMove *begin() const
|
const ExtMove *begin() const
|
||||||
{
|
{
|
||||||
return moveList;
|
return moveList;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ExtMove *end() const
|
const ExtMove *end() const
|
||||||
{
|
{
|
||||||
return last;
|
return last;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size() const
|
size_t size() const
|
||||||
{
|
{
|
||||||
return last - moveList;
|
return last - moveList;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool contains(Move move) const
|
bool contains(Move move) const
|
||||||
{
|
{
|
||||||
return std::find(begin(), end(), move) != end();
|
return std::find(begin(), end(), move) != end();
|
||||||
|
@ -89,7 +93,7 @@ struct MoveList
|
||||||
static void create();
|
static void create();
|
||||||
static void shuffle();
|
static void shuffle();
|
||||||
|
|
||||||
inline static std::array<Square, FILE_NB *RANK_NB> movePriorityTable {
|
inline static std::array<Square, EFFECTIVE_SQUARE_NB> movePriorityTable {
|
||||||
SQ_8, SQ_9, SQ_10, SQ_11, SQ_12, SQ_13, SQ_14, SQ_15,
|
SQ_8, SQ_9, SQ_10, SQ_11, SQ_12, SQ_13, SQ_14, SQ_15,
|
||||||
SQ_16, SQ_17, SQ_18, SQ_19, SQ_20, SQ_21, SQ_22, SQ_23,
|
SQ_16, SQ_17, SQ_18, SQ_19, SQ_20, SQ_21, SQ_22, SQ_23,
|
||||||
SQ_24, SQ_25, SQ_26, SQ_27, SQ_28, SQ_29, SQ_30, SQ_31,
|
SQ_24, SQ_25, SQ_26, SQ_27, SQ_28, SQ_29, SQ_30, SQ_31,
|
||||||
|
|
|
@ -1154,7 +1154,7 @@ bool Position::check_gameover_condition()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pieceCountOnBoard[BLACK] + pieceCountOnBoard[WHITE] >= RANK_NB * FILE_NB) {
|
if (pieceCountOnBoard[BLACK] + pieceCountOnBoard[WHITE] >= EFFECTIVE_SQUARE_NB) {
|
||||||
if (rule.isBlackLoseButNotDrawWhenBoardFull) {
|
if (rule.isBlackLoseButNotDrawWhenBoardFull) {
|
||||||
set_gameover(WHITE, LOSE_REASON_BOARD_IS_FULL);
|
set_gameover(WHITE, LOSE_REASON_BOARD_IS_FULL);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1756,7 +1756,7 @@ void Position::surrounded_pieces_count(Square s, int &nOurPieces, int &nTheirPie
|
||||||
bool Position::is_all_surrounded() const
|
bool Position::is_all_surrounded() const
|
||||||
{
|
{
|
||||||
// Full
|
// Full
|
||||||
if (pieceCountOnBoard[BLACK] + pieceCountOnBoard[WHITE] >= RANK_NB * FILE_NB)
|
if (pieceCountOnBoard[BLACK] + pieceCountOnBoard[WHITE] >= EFFECTIVE_SQUARE_NB)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Can fly
|
// Can fly
|
||||||
|
@ -1966,8 +1966,8 @@ void Position::turn(vector <string> &cmdlist, bool cmdChange /*= true*/)
|
||||||
|
|
||||||
for (r = 0; r < RANK_NB; r++) {
|
for (r = 0; r < RANK_NB; r++) {
|
||||||
ch = board[RANK_NB + r];
|
ch = board[RANK_NB + r];
|
||||||
board[RANK_NB + r] = board[RANK_NB * FILE_NB + r];
|
board[RANK_NB + r] = board[EFFECTIVE_SQUARE_NB + r];
|
||||||
board[RANK_NB * FILE_NB + r] = ch;
|
board[EFFECTIVE_SQUARE_NB + r] = ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
reset_bb();
|
reset_bb();
|
||||||
|
|
|
@ -177,7 +177,7 @@ QPointF BoardItem::polar2pos(File file, Rank rank)
|
||||||
bool BoardItem::pos2polar(QPointF pos, File &file, Rank &rank)
|
bool BoardItem::pos2polar(QPointF pos, File &file, Rank &rank)
|
||||||
{
|
{
|
||||||
// 寻找最近的落子点
|
// 寻找最近的落子点
|
||||||
for (int i = 0; i < FILE_NB * RANK_NB; i++) {
|
for (int i = 0; i < EFFECTIVE_SQUARE_NB; i++) {
|
||||||
// 如果pos点在落子点附近
|
// 如果pos点在落子点附近
|
||||||
if (QLineF(pos, position[i]).length() < PIECE_SIZE / 6) {
|
if (QLineF(pos, position[i]).length() < PIECE_SIZE / 6) {
|
||||||
file = File(i / RANK_NB + 1);
|
file = File(i / RANK_NB + 1);
|
||||||
|
|
|
@ -75,7 +75,7 @@ private:
|
||||||
int sizeShadow {5};
|
int sizeShadow {5};
|
||||||
|
|
||||||
// 24个落子点
|
// 24个落子点
|
||||||
QPointF position[FILE_NB * RANK_NB];
|
QPointF position[EFFECTIVE_SQUARE_NB];
|
||||||
|
|
||||||
// 是否有斜线
|
// 是否有斜线
|
||||||
bool hasObliqueLine {false};
|
bool hasObliqueLine {false};
|
||||||
|
|
Loading…
Reference in New Issue