Add mills.cpp/.h and put adjacent_squares_init() in it
This commit is contained in:
parent
75f0d1202e
commit
d8ab4e2901
|
@ -38,6 +38,7 @@ SOURCES += \
|
||||||
src/rule.cpp \
|
src/rule.cpp \
|
||||||
src/main.cpp \
|
src/main.cpp \
|
||||||
src/search.cpp \
|
src/search.cpp \
|
||||||
|
src/mills.cpp \
|
||||||
src/test/test.cpp \
|
src/test/test.cpp \
|
||||||
src/ui/qt/gamewindow.cpp \
|
src/ui/qt/gamewindow.cpp \
|
||||||
src/ui/qt/pieceitem.cpp \
|
src/ui/qt/pieceitem.cpp \
|
||||||
|
@ -73,6 +74,7 @@ HEADERS += \
|
||||||
src/position.h \
|
src/position.h \
|
||||||
src/rule.h \
|
src/rule.h \
|
||||||
src/types.h \
|
src/types.h \
|
||||||
|
src/mills.h \
|
||||||
src/test/test.h \
|
src/test/test.h \
|
||||||
src/ui/qt/client.h \
|
src/ui/qt/client.h \
|
||||||
src/ui/qt/game.h \
|
src/ui/qt/game.h \
|
||||||
|
|
|
@ -458,6 +458,7 @@
|
||||||
</CustomBuild>
|
</CustomBuild>
|
||||||
<ClInclude Include="src\endgame.h" />
|
<ClInclude Include="src\endgame.h" />
|
||||||
<ClInclude Include="src\evaluate.h" />
|
<ClInclude Include="src\evaluate.h" />
|
||||||
|
<ClInclude Include="src\mills.h" />
|
||||||
<ClInclude Include="src\movegen.h" />
|
<ClInclude Include="src\movegen.h" />
|
||||||
<ClInclude Include="src\movepick.h" />
|
<ClInclude Include="src\movepick.h" />
|
||||||
<ClInclude Include="src\search.h" />
|
<ClInclude Include="src\search.h" />
|
||||||
|
@ -729,6 +730,7 @@
|
||||||
<ClCompile Include="src\endgame.cpp" />
|
<ClCompile Include="src\endgame.cpp" />
|
||||||
<ClCompile Include="src\evaluate.cpp" />
|
<ClCompile Include="src\evaluate.cpp" />
|
||||||
<ClCompile Include="src\main.cpp" />
|
<ClCompile Include="src\main.cpp" />
|
||||||
|
<ClCompile Include="src\mills.cpp" />
|
||||||
<ClCompile Include="src\movegen.cpp" />
|
<ClCompile Include="src\movegen.cpp" />
|
||||||
<ClCompile Include="src\movepick.cpp" />
|
<ClCompile Include="src\movepick.cpp" />
|
||||||
<ClCompile Include="src\search.cpp" />
|
<ClCompile Include="src\search.cpp" />
|
||||||
|
|
|
@ -123,6 +123,9 @@
|
||||||
<ClInclude Include="src\thread_win32_osx.h">
|
<ClInclude Include="src\thread_win32_osx.h">
|
||||||
<Filter>Qt Files</Filter>
|
<Filter>Qt Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\mills.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CustomBuild Include="debug\moc_predefs.h.cbt">
|
<CustomBuild Include="debug\moc_predefs.h.cbt">
|
||||||
|
@ -365,6 +368,9 @@
|
||||||
<ClCompile Include="src\ui\qt\game.cpp">
|
<ClCompile Include="src\ui\qt\game.cpp">
|
||||||
<Filter>Qt Files</Filter>
|
<Filter>Qt Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\mills.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="millgame.rc">
|
<ResourceCompile Include="millgame.rc">
|
||||||
|
|
|
@ -39,7 +39,7 @@ PGOBENCH = ./$(EXE) bench
|
||||||
# search.cpp thread.cpp timeman.cpp tt.cpp uci.cpp ucioption.cpp tune.cpp syzygy/tbprobe.cpp \
|
# search.cpp thread.cpp timeman.cpp tt.cpp uci.cpp ucioption.cpp tune.cpp syzygy/tbprobe.cpp \
|
||||||
# nnue/evaluate_nnue.cpp nnue/features/half_kp.cpp
|
# nnue/evaluate_nnue.cpp nnue/features/half_kp.cpp
|
||||||
SRCS = benchmark.cpp bitboard.cpp endgame.cpp evaluate.cpp main.cpp \
|
SRCS = benchmark.cpp bitboard.cpp endgame.cpp evaluate.cpp main.cpp \
|
||||||
misc.cpp movegen.cpp movepick.cpp option.cpp position.cpp rule.cpp \
|
mills.cpp misc.cpp movegen.cpp movepick.cpp option.cpp position.cpp rule.cpp \
|
||||||
search.cpp thread.cpp tt.cpp uci.cpp ucioption.cpp
|
search.cpp thread.cpp tt.cpp uci.cpp ucioption.cpp
|
||||||
|
|
||||||
OBJS = $(notdir $(SRCS:.cpp=.o))
|
OBJS = $(notdir $(SRCS:.cpp=.o))
|
||||||
|
|
|
@ -0,0 +1,246 @@
|
||||||
|
/*
|
||||||
|
This file is part of Sanmill.
|
||||||
|
Copyright (C) 2019-2021 The Sanmill developers (see AUTHORS file)
|
||||||
|
|
||||||
|
Sanmill is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Sanmill is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
#include "bitboard.h"
|
||||||
|
#include "rule.h"
|
||||||
|
#include "movegen.h"
|
||||||
|
#include "mills.h"
|
||||||
|
|
||||||
|
namespace Mills
|
||||||
|
{
|
||||||
|
|
||||||
|
void adjacent_squares_init()
|
||||||
|
{
|
||||||
|
// Note: Not follow order of MoveDirection array
|
||||||
|
const int moveTable12[SQUARE_NB][MD_NB] = {
|
||||||
|
/* 0 */ {0, 0, 0, 0},
|
||||||
|
/* 1 */ {0, 0, 0, 0},
|
||||||
|
/* 2 */ {0, 0, 0, 0},
|
||||||
|
/* 3 */ {0, 0, 0, 0},
|
||||||
|
/* 4 */ {0, 0, 0, 0},
|
||||||
|
/* 5 */ {0, 0, 0, 0},
|
||||||
|
/* 6 */ {0, 0, 0, 0},
|
||||||
|
/* 7 */ {0, 0, 0, 0},
|
||||||
|
|
||||||
|
/* 8 */ {9, 15, 16, 0},
|
||||||
|
/* 9 */ {17, 8, 10, 0},
|
||||||
|
/* 10 */ {9, 11, 18, 0},
|
||||||
|
/* 11 */ {19, 10, 12, 0},
|
||||||
|
/* 12 */ {11, 13, 20, 0},
|
||||||
|
/* 13 */ {21, 12, 14, 0},
|
||||||
|
/* 14 */ {13, 15, 22, 0},
|
||||||
|
/* 15 */ {23, 8, 14, 0},
|
||||||
|
|
||||||
|
/* 16 */ {17, 23, 8, 24},
|
||||||
|
/* 17 */ {9, 25, 16, 18},
|
||||||
|
/* 18 */ {17, 19, 10, 26},
|
||||||
|
/* 19 */ {11, 27, 18, 20},
|
||||||
|
/* 20 */ {19, 21, 12, 28},
|
||||||
|
/* 21 */ {13, 29, 20, 22},
|
||||||
|
/* 22 */ {21, 23, 14, 30},
|
||||||
|
/* 23 */ {15, 31, 16, 22},
|
||||||
|
|
||||||
|
/* 24 */ {25, 31, 16, 0},
|
||||||
|
/* 25 */ {17, 24, 26, 0},
|
||||||
|
/* 26 */ {25, 27, 18, 0},
|
||||||
|
/* 27 */ {19, 26, 28, 0},
|
||||||
|
/* 28 */ {27, 29, 20, 0},
|
||||||
|
/* 29 */ {21, 28, 30, 0},
|
||||||
|
/* 30 */ {29, 31, 22, 0},
|
||||||
|
/* 31 */ {23, 24, 30, 0},
|
||||||
|
|
||||||
|
/* 32 */ {0, 0, 0, 0},
|
||||||
|
/* 33 */ {0, 0, 0, 0},
|
||||||
|
/* 34 */ {0, 0, 0, 0},
|
||||||
|
/* 35 */ {0, 0, 0, 0},
|
||||||
|
/* 36 */ {0, 0, 0, 0},
|
||||||
|
/* 37 */ {0, 0, 0, 0},
|
||||||
|
/* 38 */ {0, 0, 0, 0},
|
||||||
|
/* 39 */ {0, 0, 0, 0},
|
||||||
|
};
|
||||||
|
|
||||||
|
const int moveTable9[SQUARE_NB][MD_NB] = {
|
||||||
|
/* 0 */ {0, 0, 0, 0},
|
||||||
|
/* 1 */ {0, 0, 0, 0},
|
||||||
|
/* 2 */ {0, 0, 0, 0},
|
||||||
|
/* 3 */ {0, 0, 0, 0},
|
||||||
|
/* 4 */ {0, 0, 0, 0},
|
||||||
|
/* 5 */ {0, 0, 0, 0},
|
||||||
|
/* 6 */ {0, 0, 0, 0},
|
||||||
|
/* 7 */ {0, 0, 0, 0},
|
||||||
|
|
||||||
|
/* 8 */ {16, 9, 15, 0},
|
||||||
|
/* 9 */ {10, 8, 0, 0},
|
||||||
|
/* 10 */ {18, 11, 9, 0},
|
||||||
|
/* 11 */ {12, 10, 0, 0},
|
||||||
|
/* 12 */ {20, 13, 11, 0},
|
||||||
|
/* 13 */ {14, 12, 0, 0},
|
||||||
|
/* 14 */ {22, 15, 13, 0},
|
||||||
|
/* 15 */ {8, 14, 0, 0},
|
||||||
|
|
||||||
|
/* 16 */ {8, 24, 17, 23},
|
||||||
|
/* 17 */ {18, 16, 0, 0},
|
||||||
|
/* 18 */ {10, 26, 19, 17},
|
||||||
|
/* 19 */ {20, 18, 0, 0},
|
||||||
|
/* 20 */ {12, 28, 21, 19},
|
||||||
|
/* 21 */ {22, 20, 0, 0},
|
||||||
|
/* 22 */ {14, 30, 23, 21},
|
||||||
|
/* 23 */ {16, 22, 0, 0},
|
||||||
|
|
||||||
|
/* 24 */ {16, 25, 31, 0},
|
||||||
|
/* 25 */ {26, 24, 0, 0},
|
||||||
|
/* 26 */ {18, 27, 25, 0},
|
||||||
|
/* 27 */ {28, 26, 0, 0},
|
||||||
|
/* 28 */ {20, 29, 27, 0},
|
||||||
|
/* 29 */ {30, 28, 0, 0},
|
||||||
|
/* 30 */ {22, 31, 29, 0},
|
||||||
|
/* 31 */ {24, 30, 0, 0},
|
||||||
|
|
||||||
|
/* 32 */ {0, 0, 0, 0},
|
||||||
|
/* 33 */ {0, 0, 0, 0},
|
||||||
|
/* 34 */ {0, 0, 0, 0},
|
||||||
|
/* 35 */ {0, 0, 0, 0},
|
||||||
|
/* 36 */ {0, 0, 0, 0},
|
||||||
|
/* 37 */ {0, 0, 0, 0},
|
||||||
|
/* 38 */ {0, 0, 0, 0},
|
||||||
|
/* 39 */ {0, 0, 0, 0},
|
||||||
|
};
|
||||||
|
|
||||||
|
const Bitboard moveTableBB12[SQUARE_NB] = {
|
||||||
|
/* 0 */ 0,
|
||||||
|
/* 1 */ 0,
|
||||||
|
/* 2 */ 0,
|
||||||
|
/* 3 */ 0,
|
||||||
|
/* 4 */ 0,
|
||||||
|
/* 5 */ 0,
|
||||||
|
/* 6 */ 0,
|
||||||
|
/* 7 */ 0,
|
||||||
|
|
||||||
|
/* 8 */ square_bb(SQ_9) | square_bb(SQ_15) | square_bb(SQ_16),
|
||||||
|
/* 9 */ square_bb(SQ_17) | square_bb(SQ_8) | square_bb(SQ_10),
|
||||||
|
/* 10 */ square_bb(SQ_9) | square_bb(SQ_11) | square_bb(SQ_18),
|
||||||
|
/* 11 */ square_bb(SQ_19) | square_bb(SQ_10) | square_bb(SQ_12),
|
||||||
|
/* 12 */ square_bb(SQ_11) | square_bb(SQ_13) | square_bb(SQ_20),
|
||||||
|
/* 13 */ square_bb(SQ_21) | square_bb(SQ_12) | square_bb(SQ_14),
|
||||||
|
/* 14 */ square_bb(SQ_13) | square_bb(SQ_15) | square_bb(SQ_22),
|
||||||
|
/* 15 */ square_bb(SQ_23) | square_bb(SQ_8) | square_bb(SQ_14),
|
||||||
|
|
||||||
|
/* 16 */ square_bb(SQ_17) | square_bb(SQ_23) | square_bb(SQ_8) | square_bb(SQ_24),
|
||||||
|
/* 17 */ square_bb(SQ_9) | square_bb(SQ_25) | square_bb(SQ_16) | square_bb(SQ_18),
|
||||||
|
/* 18 */ square_bb(SQ_17) | square_bb(SQ_19) | square_bb(SQ_10) | square_bb(SQ_26),
|
||||||
|
/* 19 */ square_bb(SQ_11) | square_bb(SQ_27) | square_bb(SQ_18) | square_bb(SQ_20),
|
||||||
|
/* 20 */ square_bb(SQ_19) | square_bb(SQ_21) | square_bb(SQ_12) | square_bb(SQ_28),
|
||||||
|
/* 21 */ square_bb(SQ_13) | square_bb(SQ_29) | square_bb(SQ_20) | square_bb(SQ_22),
|
||||||
|
/* 22 */ square_bb(SQ_21) | square_bb(SQ_23) | square_bb(SQ_14) | square_bb(SQ_30),
|
||||||
|
/* 23 */ square_bb(SQ_15) | square_bb(SQ_31) | square_bb(SQ_16) | square_bb(SQ_22),
|
||||||
|
|
||||||
|
/* 24 */ square_bb(SQ_25) | square_bb(SQ_31) | square_bb(SQ_16),
|
||||||
|
/* 25 */ square_bb(SQ_17) | square_bb(SQ_24) | square_bb(SQ_26),
|
||||||
|
/* 26 */ square_bb(SQ_25) | square_bb(SQ_27) | square_bb(SQ_18),
|
||||||
|
/* 27 */ square_bb(SQ_19) | square_bb(SQ_26) | square_bb(SQ_28),
|
||||||
|
/* 28 */ square_bb(SQ_27) | square_bb(SQ_29) | square_bb(SQ_20),
|
||||||
|
/* 29 */ square_bb(SQ_21) | square_bb(SQ_28) | square_bb(SQ_30),
|
||||||
|
/* 30 */ square_bb(SQ_29) | square_bb(SQ_31) | square_bb(SQ_22),
|
||||||
|
/* 31 */ square_bb(SQ_23) | square_bb(SQ_24) | square_bb(SQ_30),
|
||||||
|
|
||||||
|
/* 32 */ 0,
|
||||||
|
/* 33 */ 0,
|
||||||
|
/* 34 */ 0,
|
||||||
|
/* 35 */ 0,
|
||||||
|
/* 36 */ 0,
|
||||||
|
/* 37 */ 0,
|
||||||
|
/* 38 */ 0,
|
||||||
|
/* 39 */ 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
const Bitboard moveTableBB9[SQUARE_NB] = {
|
||||||
|
/* 0 */ 0,
|
||||||
|
/* 1 */ 0,
|
||||||
|
/* 2 */ 0,
|
||||||
|
/* 3 */ 0,
|
||||||
|
/* 4 */ 0,
|
||||||
|
/* 5 */ 0,
|
||||||
|
/* 6 */ 0,
|
||||||
|
/* 7 */ 0,
|
||||||
|
|
||||||
|
/* 8 */ square_bb(SQ_16) | square_bb(SQ_9) | square_bb(SQ_15),
|
||||||
|
/* 9 */ square_bb(SQ_10) | square_bb(SQ_8),
|
||||||
|
/* 10 */ square_bb(SQ_18) | square_bb(SQ_11) | square_bb(SQ_9),
|
||||||
|
/* 11 */ square_bb(SQ_12) | square_bb(SQ_10),
|
||||||
|
/* 12 */ square_bb(SQ_20) | square_bb(SQ_13) | square_bb(SQ_11),
|
||||||
|
/* 13 */ square_bb(SQ_14) | square_bb(SQ_12),
|
||||||
|
/* 14 */ square_bb(SQ_22) | square_bb(SQ_15) | square_bb(SQ_13),
|
||||||
|
/* 15 */ square_bb(SQ_8) | square_bb(SQ_14),
|
||||||
|
|
||||||
|
/* 16 */ square_bb(SQ_8) | square_bb(SQ_24) | square_bb(SQ_17) | square_bb(SQ_23),
|
||||||
|
/* 17 */ square_bb(SQ_18) | square_bb(SQ_16),
|
||||||
|
/* 18 */ square_bb(SQ_10) | square_bb(SQ_26) | square_bb(SQ_19) | square_bb(SQ_17),
|
||||||
|
/* 19 */ square_bb(SQ_20) | square_bb(SQ_18),
|
||||||
|
/* 20 */ square_bb(SQ_12) | square_bb(SQ_28) | square_bb(SQ_21) | square_bb(SQ_19),
|
||||||
|
/* 21 */ square_bb(SQ_22) | square_bb(SQ_20),
|
||||||
|
/* 22 */ square_bb(SQ_14) | square_bb(SQ_30) | square_bb(SQ_23) | square_bb(SQ_21),
|
||||||
|
/* 23 */ square_bb(SQ_16) | square_bb(SQ_22),
|
||||||
|
|
||||||
|
/* 24 */ square_bb(SQ_16) | square_bb(SQ_25) | square_bb(SQ_31),
|
||||||
|
/* 25 */ square_bb(SQ_26) | square_bb(SQ_24),
|
||||||
|
/* 26 */ square_bb(SQ_18) | square_bb(SQ_27) | square_bb(SQ_25),
|
||||||
|
/* 27 */ square_bb(SQ_28) | square_bb(SQ_26),
|
||||||
|
/* 28 */ square_bb(SQ_20) | square_bb(SQ_29) | square_bb(SQ_27),
|
||||||
|
/* 29 */ square_bb(SQ_30) | square_bb(SQ_28),
|
||||||
|
/* 30 */ square_bb(SQ_22) | square_bb(SQ_31) | square_bb(SQ_29),
|
||||||
|
/* 31 */ square_bb(SQ_24) | square_bb(SQ_30),
|
||||||
|
|
||||||
|
/* 32 */ 0,
|
||||||
|
/* 33 */ 0,
|
||||||
|
/* 34 */ 0,
|
||||||
|
/* 35 */ 0,
|
||||||
|
/* 36 */ 0,
|
||||||
|
/* 37 */ 0,
|
||||||
|
/* 38 */ 0,
|
||||||
|
/* 39 */ 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
if (rule.hasObliqueLines) {
|
||||||
|
memcpy(MoveList<LEGAL>::moveTable, moveTable12, sizeof(MoveList<LEGAL>::moveTable));
|
||||||
|
memcpy(MoveList<LEGAL>::moveTableBB, moveTableBB12, sizeof(MoveList<LEGAL>::moveTableBB));
|
||||||
|
} else {
|
||||||
|
memcpy(MoveList<LEGAL>::moveTable, moveTable9, sizeof(MoveList<LEGAL>::moveTable));
|
||||||
|
memcpy(MoveList<LEGAL>::moveTableBB, moveTableBB9, sizeof(MoveList<LEGAL>::moveTableBB));
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_MODE
|
||||||
|
int sum = 0;
|
||||||
|
for (int i = 0; i < SQUARE_NB; i++) {
|
||||||
|
loggerDebug("/* %d */ {", i);
|
||||||
|
for (int j = 0; j < MD_NB; j++) {
|
||||||
|
if (j == MD_NB - 1)
|
||||||
|
loggerDebug("%d", moveTable[i][j]);
|
||||||
|
else
|
||||||
|
loggerDebug("%d, ", moveTable[i][j]);
|
||||||
|
sum += moveTable[i][j];
|
||||||
|
}
|
||||||
|
loggerDebug("},\n");
|
||||||
|
}
|
||||||
|
loggerDebug("sum = %d\n", sum);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
This file is part of Sanmill.
|
||||||
|
Copyright (C) 2019-2021 The Sanmill developers (see AUTHORS file)
|
||||||
|
|
||||||
|
Sanmill is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Sanmill is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MILL_H_INCLUDED
|
||||||
|
#define MILL_H_INCLUDED
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
namespace Mills
|
||||||
|
{
|
||||||
|
|
||||||
|
void adjacent_squares_init();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // #ifndef MILL_H_INCLUDED
|
215
src/movegen.cpp
215
src/movegen.cpp
|
@ -26,6 +26,7 @@
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "bitboard.h"
|
#include "bitboard.h"
|
||||||
#include "option.h"
|
#include "option.h"
|
||||||
|
#include "mills.h"
|
||||||
|
|
||||||
/// generate<PLACE> generates all places.
|
/// generate<PLACE> generates all places.
|
||||||
/// Returns a pointer to the end of the move list.
|
/// Returns a pointer to the end of the move list.
|
||||||
|
@ -158,219 +159,7 @@ ExtMove *generate<LEGAL>(Position &pos, ExtMove *moveList)
|
||||||
template<>
|
template<>
|
||||||
void MoveList<LEGAL>::create()
|
void MoveList<LEGAL>::create()
|
||||||
{
|
{
|
||||||
// Note: Not follow order of MoveDirection array
|
Mills::adjacent_squares_init();
|
||||||
const int moveTable12[SQUARE_NB][MD_NB] = {
|
|
||||||
/* 0 */ {0, 0, 0, 0},
|
|
||||||
/* 1 */ {0, 0, 0, 0},
|
|
||||||
/* 2 */ {0, 0, 0, 0},
|
|
||||||
/* 3 */ {0, 0, 0, 0},
|
|
||||||
/* 4 */ {0, 0, 0, 0},
|
|
||||||
/* 5 */ {0, 0, 0, 0},
|
|
||||||
/* 6 */ {0, 0, 0, 0},
|
|
||||||
/* 7 */ {0, 0, 0, 0},
|
|
||||||
|
|
||||||
/* 8 */ {9, 15, 16, 0},
|
|
||||||
/* 9 */ {17, 8, 10, 0},
|
|
||||||
/* 10 */ {9, 11, 18, 0},
|
|
||||||
/* 11 */ {19, 10, 12, 0},
|
|
||||||
/* 12 */ {11, 13, 20, 0},
|
|
||||||
/* 13 */ {21, 12, 14, 0},
|
|
||||||
/* 14 */ {13, 15, 22, 0},
|
|
||||||
/* 15 */ {23, 8, 14, 0},
|
|
||||||
|
|
||||||
/* 16 */ {17, 23, 8, 24},
|
|
||||||
/* 17 */ {9, 25, 16, 18},
|
|
||||||
/* 18 */ {17, 19, 10, 26},
|
|
||||||
/* 19 */ {11, 27, 18, 20},
|
|
||||||
/* 20 */ {19, 21, 12, 28},
|
|
||||||
/* 21 */ {13, 29, 20, 22},
|
|
||||||
/* 22 */ {21, 23, 14, 30},
|
|
||||||
/* 23 */ {15, 31, 16, 22},
|
|
||||||
|
|
||||||
/* 24 */ {25, 31, 16, 0},
|
|
||||||
/* 25 */ {17, 24, 26, 0},
|
|
||||||
/* 26 */ {25, 27, 18, 0},
|
|
||||||
/* 27 */ {19, 26, 28, 0},
|
|
||||||
/* 28 */ {27, 29, 20, 0},
|
|
||||||
/* 29 */ {21, 28, 30, 0},
|
|
||||||
/* 30 */ {29, 31, 22, 0},
|
|
||||||
/* 31 */ {23, 24, 30, 0},
|
|
||||||
|
|
||||||
/* 32 */ {0, 0, 0, 0},
|
|
||||||
/* 33 */ {0, 0, 0, 0},
|
|
||||||
/* 34 */ {0, 0, 0, 0},
|
|
||||||
/* 35 */ {0, 0, 0, 0},
|
|
||||||
/* 36 */ {0, 0, 0, 0},
|
|
||||||
/* 37 */ {0, 0, 0, 0},
|
|
||||||
/* 38 */ {0, 0, 0, 0},
|
|
||||||
/* 39 */ {0, 0, 0, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
const int moveTable9[SQUARE_NB][MD_NB] = {
|
|
||||||
/* 0 */ {0, 0, 0, 0},
|
|
||||||
/* 1 */ {0, 0, 0, 0},
|
|
||||||
/* 2 */ {0, 0, 0, 0},
|
|
||||||
/* 3 */ {0, 0, 0, 0},
|
|
||||||
/* 4 */ {0, 0, 0, 0},
|
|
||||||
/* 5 */ {0, 0, 0, 0},
|
|
||||||
/* 6 */ {0, 0, 0, 0},
|
|
||||||
/* 7 */ {0, 0, 0, 0},
|
|
||||||
|
|
||||||
/* 8 */ {16, 9, 15, 0},
|
|
||||||
/* 9 */ {10, 8, 0, 0},
|
|
||||||
/* 10 */ {18, 11, 9, 0},
|
|
||||||
/* 11 */ {12, 10, 0, 0},
|
|
||||||
/* 12 */ {20, 13, 11, 0},
|
|
||||||
/* 13 */ {14, 12, 0, 0},
|
|
||||||
/* 14 */ {22, 15, 13, 0},
|
|
||||||
/* 15 */ {8, 14, 0, 0},
|
|
||||||
|
|
||||||
/* 16 */ {8, 24, 17, 23},
|
|
||||||
/* 17 */ {18, 16, 0, 0},
|
|
||||||
/* 18 */ {10, 26, 19, 17},
|
|
||||||
/* 19 */ {20, 18, 0, 0},
|
|
||||||
/* 20 */ {12, 28, 21, 19},
|
|
||||||
/* 21 */ {22, 20, 0, 0},
|
|
||||||
/* 22 */ {14, 30, 23, 21},
|
|
||||||
/* 23 */ {16, 22, 0, 0},
|
|
||||||
|
|
||||||
/* 24 */ {16, 25, 31, 0},
|
|
||||||
/* 25 */ {26, 24, 0, 0},
|
|
||||||
/* 26 */ {18, 27, 25, 0},
|
|
||||||
/* 27 */ {28, 26, 0, 0},
|
|
||||||
/* 28 */ {20, 29, 27, 0},
|
|
||||||
/* 29 */ {30, 28, 0, 0},
|
|
||||||
/* 30 */ {22, 31, 29, 0},
|
|
||||||
/* 31 */ {24, 30, 0, 0},
|
|
||||||
|
|
||||||
/* 32 */ {0, 0, 0, 0},
|
|
||||||
/* 33 */ {0, 0, 0, 0},
|
|
||||||
/* 34 */ {0, 0, 0, 0},
|
|
||||||
/* 35 */ {0, 0, 0, 0},
|
|
||||||
/* 36 */ {0, 0, 0, 0},
|
|
||||||
/* 37 */ {0, 0, 0, 0},
|
|
||||||
/* 38 */ {0, 0, 0, 0},
|
|
||||||
/* 39 */ {0, 0, 0, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
const Bitboard moveTableBB12[SQUARE_NB] = {
|
|
||||||
/* 0 */ 0,
|
|
||||||
/* 1 */ 0,
|
|
||||||
/* 2 */ 0,
|
|
||||||
/* 3 */ 0,
|
|
||||||
/* 4 */ 0,
|
|
||||||
/* 5 */ 0,
|
|
||||||
/* 6 */ 0,
|
|
||||||
/* 7 */ 0,
|
|
||||||
|
|
||||||
/* 8 */ square_bb(SQ_9) | square_bb(SQ_15) | square_bb(SQ_16),
|
|
||||||
/* 9 */ square_bb(SQ_17) | square_bb(SQ_8) | square_bb(SQ_10),
|
|
||||||
/* 10 */ square_bb(SQ_9) | square_bb(SQ_11) | square_bb(SQ_18),
|
|
||||||
/* 11 */ square_bb(SQ_19) | square_bb(SQ_10) | square_bb(SQ_12),
|
|
||||||
/* 12 */ square_bb(SQ_11) | square_bb(SQ_13) | square_bb(SQ_20),
|
|
||||||
/* 13 */ square_bb(SQ_21) | square_bb(SQ_12) | square_bb(SQ_14),
|
|
||||||
/* 14 */ square_bb(SQ_13) | square_bb(SQ_15) | square_bb(SQ_22),
|
|
||||||
/* 15 */ square_bb(SQ_23) | square_bb(SQ_8) | square_bb(SQ_14),
|
|
||||||
|
|
||||||
/* 16 */ square_bb(SQ_17) | square_bb(SQ_23) | square_bb(SQ_8) | square_bb(SQ_24),
|
|
||||||
/* 17 */ square_bb(SQ_9) | square_bb(SQ_25) | square_bb(SQ_16) | square_bb(SQ_18),
|
|
||||||
/* 18 */ square_bb(SQ_17) | square_bb(SQ_19) | square_bb(SQ_10) | square_bb(SQ_26),
|
|
||||||
/* 19 */ square_bb(SQ_11) | square_bb(SQ_27) | square_bb(SQ_18) | square_bb(SQ_20),
|
|
||||||
/* 20 */ square_bb(SQ_19) | square_bb(SQ_21) | square_bb(SQ_12) | square_bb(SQ_28),
|
|
||||||
/* 21 */ square_bb(SQ_13) | square_bb(SQ_29) | square_bb(SQ_20) | square_bb(SQ_22),
|
|
||||||
/* 22 */ square_bb(SQ_21) | square_bb(SQ_23) | square_bb(SQ_14) | square_bb(SQ_30),
|
|
||||||
/* 23 */ square_bb(SQ_15) | square_bb(SQ_31) | square_bb(SQ_16) | square_bb(SQ_22),
|
|
||||||
|
|
||||||
/* 24 */ square_bb(SQ_25) | square_bb(SQ_31) | square_bb(SQ_16),
|
|
||||||
/* 25 */ square_bb(SQ_17) | square_bb(SQ_24) | square_bb(SQ_26),
|
|
||||||
/* 26 */ square_bb(SQ_25) | square_bb(SQ_27) | square_bb(SQ_18),
|
|
||||||
/* 27 */ square_bb(SQ_19) | square_bb(SQ_26) | square_bb(SQ_28),
|
|
||||||
/* 28 */ square_bb(SQ_27) | square_bb(SQ_29) | square_bb(SQ_20),
|
|
||||||
/* 29 */ square_bb(SQ_21) | square_bb(SQ_28) | square_bb(SQ_30),
|
|
||||||
/* 30 */ square_bb(SQ_29) | square_bb(SQ_31) | square_bb(SQ_22),
|
|
||||||
/* 31 */ square_bb(SQ_23) | square_bb(SQ_24) | square_bb(SQ_30),
|
|
||||||
|
|
||||||
/* 32 */ 0,
|
|
||||||
/* 33 */ 0,
|
|
||||||
/* 34 */ 0,
|
|
||||||
/* 35 */ 0,
|
|
||||||
/* 36 */ 0,
|
|
||||||
/* 37 */ 0,
|
|
||||||
/* 38 */ 0,
|
|
||||||
/* 39 */ 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
const Bitboard moveTableBB9[SQUARE_NB] = {
|
|
||||||
/* 0 */ 0,
|
|
||||||
/* 1 */ 0,
|
|
||||||
/* 2 */ 0,
|
|
||||||
/* 3 */ 0,
|
|
||||||
/* 4 */ 0,
|
|
||||||
/* 5 */ 0,
|
|
||||||
/* 6 */ 0,
|
|
||||||
/* 7 */ 0,
|
|
||||||
|
|
||||||
/* 8 */ square_bb(SQ_16) | square_bb(SQ_9) | square_bb(SQ_15),
|
|
||||||
/* 9 */ square_bb(SQ_10) | square_bb(SQ_8),
|
|
||||||
/* 10 */ square_bb(SQ_18) | square_bb(SQ_11) | square_bb(SQ_9),
|
|
||||||
/* 11 */ square_bb(SQ_12) | square_bb(SQ_10),
|
|
||||||
/* 12 */ square_bb(SQ_20) | square_bb(SQ_13) | square_bb(SQ_11),
|
|
||||||
/* 13 */ square_bb(SQ_14) | square_bb(SQ_12),
|
|
||||||
/* 14 */ square_bb(SQ_22) | square_bb(SQ_15) | square_bb(SQ_13),
|
|
||||||
/* 15 */ square_bb(SQ_8) | square_bb(SQ_14),
|
|
||||||
|
|
||||||
/* 16 */ square_bb(SQ_8) | square_bb(SQ_24) | square_bb(SQ_17) | square_bb(SQ_23),
|
|
||||||
/* 17 */ square_bb(SQ_18) | square_bb(SQ_16),
|
|
||||||
/* 18 */ square_bb(SQ_10) | square_bb(SQ_26) | square_bb(SQ_19) | square_bb(SQ_17),
|
|
||||||
/* 19 */ square_bb(SQ_20) | square_bb(SQ_18),
|
|
||||||
/* 20 */ square_bb(SQ_12) | square_bb(SQ_28) | square_bb(SQ_21) | square_bb(SQ_19),
|
|
||||||
/* 21 */ square_bb(SQ_22) | square_bb(SQ_20),
|
|
||||||
/* 22 */ square_bb(SQ_14) | square_bb(SQ_30) | square_bb(SQ_23) | square_bb(SQ_21),
|
|
||||||
/* 23 */ square_bb(SQ_16) | square_bb(SQ_22),
|
|
||||||
|
|
||||||
/* 24 */ square_bb(SQ_16) | square_bb(SQ_25) | square_bb(SQ_31),
|
|
||||||
/* 25 */ square_bb(SQ_26) | square_bb(SQ_24),
|
|
||||||
/* 26 */ square_bb(SQ_18) | square_bb(SQ_27) | square_bb(SQ_25),
|
|
||||||
/* 27 */ square_bb(SQ_28) | square_bb(SQ_26),
|
|
||||||
/* 28 */ square_bb(SQ_20) | square_bb(SQ_29) | square_bb(SQ_27),
|
|
||||||
/* 29 */ square_bb(SQ_30) | square_bb(SQ_28),
|
|
||||||
/* 30 */ square_bb(SQ_22) | square_bb(SQ_31) | square_bb(SQ_29),
|
|
||||||
/* 31 */ square_bb(SQ_24) | square_bb(SQ_30),
|
|
||||||
|
|
||||||
/* 32 */ 0,
|
|
||||||
/* 33 */ 0,
|
|
||||||
/* 34 */ 0,
|
|
||||||
/* 35 */ 0,
|
|
||||||
/* 36 */ 0,
|
|
||||||
/* 37 */ 0,
|
|
||||||
/* 38 */ 0,
|
|
||||||
/* 39 */ 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
if (rule.hasObliqueLines) {
|
|
||||||
memcpy(moveTable, moveTable12, sizeof(moveTable));
|
|
||||||
memcpy(moveTableBB, moveTableBB12, sizeof(moveTableBB));
|
|
||||||
} else {
|
|
||||||
memcpy(moveTable, moveTable9, sizeof(moveTable));
|
|
||||||
memcpy(moveTableBB, moveTableBB9, sizeof(moveTableBB));
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_MODE
|
|
||||||
int sum = 0;
|
|
||||||
for (int i = 0; i < SQUARE_NB; i++) {
|
|
||||||
loggerDebug("/* %d */ {", i);
|
|
||||||
for (int j = 0; j < MD_NB; j++) {
|
|
||||||
if (j == MD_NB - 1)
|
|
||||||
loggerDebug("%d", moveTable[i][j]);
|
|
||||||
else
|
|
||||||
loggerDebug("%d, ", moveTable[i][j]);
|
|
||||||
sum += moveTable[i][j];
|
|
||||||
}
|
|
||||||
loggerDebug("},\n");
|
|
||||||
}
|
|
||||||
loggerDebug("sum = %d\n", sum);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 3.4.1)
|
cmake_minimum_required(VERSION 3.4.1)
|
||||||
|
|
||||||
add_definitions(-g -O2 -D FLUTTER_UI)
|
add_definitions(-g -O2 -std=c++17 -D FLUTTER_UI)
|
||||||
|
|
||||||
add_library( # Sets the name of the library.
|
add_library( # Sets the name of the library.
|
||||||
engine
|
engine
|
||||||
|
@ -18,6 +18,7 @@ add_library( # Sets the name of the library.
|
||||||
../../../../endgame.cpp
|
../../../../endgame.cpp
|
||||||
../../../../evaluate.cpp
|
../../../../evaluate.cpp
|
||||||
../../../../main.cpp
|
../../../../main.cpp
|
||||||
|
../../../../mills.cpp
|
||||||
../../../../misc.cpp
|
../../../../misc.cpp
|
||||||
../../../../movegen.cpp
|
../../../../movegen.cpp
|
||||||
../../../../movepick.cpp
|
../../../../movepick.cpp
|
||||||
|
|
Loading…
Reference in New Issue