rule: Support Endgame N-Move rule

TODO: Translation
This commit is contained in:
Calcitem 2021-10-03 10:26:10 +08:00
parent 02569ae563
commit 9b16a5955d
No known key found for this signature in database
GPG Key ID: F2F7C29E054CFB80
62 changed files with 718 additions and 3 deletions

View File

@ -29,6 +29,7 @@ const char *loseReasonNoWayStr = "Player%d no way to go. Player%d win!";
const char *loseReasonTimeOverStr = "Time over. Player%d win!";
const char *drawReasonThreefoldRepetitionStr = "Threefold Repetition. Draw!";
const char *drawReasonRule50Str = "N-move rule. Draw!";
const char *drawReasonEndgameRule50Str = "Endgame N-move rule. Draw!";
const char *loseReasonBoardIsFullStr = "Full. Player2 win!";
const char *drawReasonBoardIsFullStr = "Full. In draw!";
const char *loseReasonlessThanThreeStr = "Player%d win!";

View File

@ -26,6 +26,7 @@ extern const char *loseReasonNoWayStr;
extern const char *loseReasonTimeOverStr;
extern const char *drawReasonThreefoldRepetitionStr;
extern const char *drawReasonRule50Str;
extern const char *drawReasonEndgameRule50Str;
extern const char *loseReasonBoardIsFullStr;
extern const char *drawReasonBoardIsFullStr;
extern const char *loseReasonlessThanThreeStr;

View File

@ -1014,6 +1014,13 @@ bool Position::check_if_game_is_over()
set_gameover(DRAW, GameOverReason::drawReasonRule50);
return true;
}
if (rule.endgameNMoveRule < rule.nMoveRule &&
is_three_endgame() &&
posKeyHistory.size() > rule.endgameNMoveRule) {
set_gameover(DRAW, GameOverReason::drawReasonEndgameRule50);
return true;
}
#endif // RULE_50
if (pieceOnBoardCount[WHITE] + pieceOnBoardCount[BLACK] >= EFFECTIVE_SQUARE_NB) {

View File

@ -150,6 +150,8 @@ public:
//template <typename Mt> void updateMobility(Square from, Square to);
int calculate_mobility_diff();
bool is_three_endgame() const;
static bool is_star_square(Square s);
bool bitboard_is_ok();
@ -353,4 +355,13 @@ inline int Position::get_mobility_diff() const
return mobilityDiff;
}
inline bool Position::is_three_endgame() const
{
if (get_phase() == Phase::placing) {
return false;
}
return pieceOnBoardCount[WHITE] == 3 || pieceOnBoardCount[BLACK] == 3;
}
#endif // #ifndef POSITION_H_INCLUDED

View File

@ -74,6 +74,9 @@ struct Rule
// The N-move rule in Mill states that if no remove has been made in the last N moves.
unsigned int nMoveRule;
// If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.
unsigned int endgameNMoveRule;
};
#define N_RULES 5

View File

@ -100,6 +100,12 @@ int Thread::search()
if (posKeyHistory.size() > rule.nMoveRule) {
return 50;
}
if (rule.endgameNMoveRule < rule.nMoveRule &&
rootPos->is_three_endgame() &&
posKeyHistory.size() > rule.endgameNMoveRule) {
return 10;
}
#endif // RULE_50
#ifdef THREEFOLD_REPETITION
@ -221,7 +227,10 @@ Value qsearch(Position *pos, Sanmill::Stack<Position> &ss, Depth depth, Depth or
Depth epsilon;
#ifdef RULE_50
if (pos->rule50_count() > rule.nMoveRule) {
if ((pos->rule50_count() > rule.nMoveRule) ||
(rule.endgameNMoveRule < rule.nMoveRule &&
pos->is_three_endgame() &&
pos->rule50_count() > rule.endgameNMoveRule)) {
alpha = VALUE_DRAW;
if (alpha >= beta) {
return alpha;

View File

@ -157,7 +157,7 @@ void Thread::idle_loop()
#endif
int ret = search();
if (ret == 3 || ret == 50) {
if (ret == 3 || ret == 50 || ret == 10) {
loggerDebug("Draw\n\n");
strCommand = "draw";
emitCommand();

View File

@ -181,6 +181,7 @@ enum class GameOverReason
loseReasonTimeOver,
drawReasonThreefoldRepetition,
drawReasonRule50,
drawReasonEndgameRule50,
drawReasonBoardIsFull,
};

View File

@ -167,6 +167,11 @@ void on_nMoveRule(const Option &o)
rule.nMoveRule = (unsigned int)o;
}
void on_endgameNMoveRule(const Option &o)
{
rule.endgameNMoveRule = (unsigned int)o;
}
/// Our case insensitive less() function as required by UCI protocol
bool CaseInsensitiveLess::operator() (const string &s1, const string &s2) const
{
@ -221,6 +226,7 @@ void init(OptionsMap &o)
o["IsLoseButNotChangeSideWhenNoWay"] << Option(true, on_isLoseButNotChangeSideWhenNoWay);
o["MayFly"] << Option(true, on_mayFly);
o["NMoveRule"] << Option(100, 10, 200, on_nMoveRule);
o["EndgameNMoveRule"] << Option(100, 5, 200, on_endgameNMoveRule);
}

View File

@ -97,6 +97,7 @@ class Config {
static bool isLoseButNotChangeSideWhenNoWay = true;
static bool mayFly = true;
static int nMoveRule = 100;
static int endgameNMoveRule = 100;
static Future<void> loadSettings() async {
print("[config] Loading settings...");
@ -207,6 +208,7 @@ class Config {
settings['IsLoseButNotChangeSideWhenNoWay'] ?? true;
rule.mayFly = Config.mayFly = settings['MayFly'] ?? true;
rule.nMoveRule = Config.nMoveRule = settings['NMoveRule'] ?? 100;
rule.endgameNMoveRule = Config.endgameNMoveRule = settings['EndgameNMoveRule'] ?? 100;
settingsLoaded = true;
print("[config] Loading settings done!");
@ -287,6 +289,7 @@ class Config {
Config.isLoseButNotChangeSideWhenNoWay;
settings['MayFly'] = Config.mayFly;
settings['NMoveRule'] = Config.nMoveRule;
settings['EndgameNMoveRule'] = Config.endgameNMoveRule;
settings.commit();

View File

@ -172,6 +172,8 @@ class NativeEngine extends Engine {
'setoption name IsLoseButNotChangeSideWhenNoWay value ${Config.isLoseButNotChangeSideWhenNoWay}');
await send('setoption name MayFly value ${Config.mayFly}');
await send('setoption name NMoveRule value ${Config.nMoveRule}');
await send(
'setoption name EndgameNMoveRule value ${Config.endgameNMoveRule}');
}
String getPositionFen(Position position) {

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "إذا قام اللاعب بتشكيل الطاحونة في مرحلة التسوية ، فسوف يقوم بإزالة القطعة غير الموضوعة للخصم ويستمر في التحرك.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Ако играч формира мелницата във фазата на поставяне, тя ще премахне непоставената фигура на противника и ще продължи да прави ход.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "যদি প্লেয়ার প্লেসিং পর্যায়ে মিল গঠন করে, সে প্রতিপক্ষের স্থানহীন টুকরাটি সরিয়ে দেবে এবং একটি পদক্ষেপ নিতে থাকবে।",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Pokud hráč vytvoří mlýn ve fázi umisťování, odstraní soupeřovu neumístěnou figurku a pokračuje v tahu.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Hvis en spiller danner møllen i placeringsfasen, vil hun fjerne modstanderens uplacerede brik og fortsætte med at foretage et træk.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Wenn ein Spieler in der Platzierungsphase die Mühle bildet, entfernt er den nicht platzierten Stein des Gegners und macht weiter seinen Zug.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Wenn ein Spieler in der Platzierungsphase die Mühle bildet, entfernt er den nicht platzierten Stein des Gegners und macht weiter seinen Zug.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Εάν ένας παίκτης σχηματίσει το μύλο στη φάση τοποθέτησης, θα αφαιρέσει το μη τοποθετημένο κομμάτι του αντιπάλου και θα συνεχίσει να κάνει μια κίνηση.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Si un jugador forma el molino en la fase de colocación, retirará la pieza no colocada del oponente y continuará haciendo un movimiento.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Kui mängija moodustab veski paigutamise faasis, eemaldab ta vastase asetamata tüki ja jätkab käigu tegemist.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "اگر بازیکنی آسیاب را در مرحله قرار دادن تشکیل دهد ، مهره بدون محل حریف را برداشته و به حرکت خود ادامه می دهد.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Jos pelaaja muodostaa myllyn sijoitusvaiheessa, hän poistaa vastustajan sijoittamattoman palan ja jatkaa siirtoa.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Si un joueur forme le moulin lors de la phase de placement, il retirera la pièce non placée de l'adversaire et continuera à se déplacer.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "જો કોઈ ખેલાડી પ્લેસિંગ તબક્કામાં મિલની રચના કરે છે, તો તે વિરોધીના સ્થાનાંતરિત ભાગને દૂર કરશે અને ચાલ ચાલુ રાખશે.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "यदि कोई खिलाड़ी प्लेसिंग चरण में चक्की बनाता है, तो वह प्रतिद्वंद्वी के स्थान से हटाए गए टुकड़े को हटा देगी और एक चाल चलती रहेगी।",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Ako igrač formira mlin u fazi postavljanja, uklonit će protivnikov nezamješten dio i nastaviti činiti potez.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Ha egy játékos az elhelyezési szakaszban megalapítja a malmot, akkor eltávolítja az ellenfél elhelyezett darabját, és folytatja a lépést.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Jika seorang pemain membentuk penggilingan di fase penempatan, dia akan menghapus bidak lawan yang belum ditempatkan dan terus bergerak.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Se un giocatore forma il mulino nella fase di piazzamento, rimuoverà il pezzo non piazzato dell'avversario e continuerà a fare una mossa.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "スリーカムが形成されると、対戦相手の配置されていないピースのみをキャプチャしてゲームを続行できます。",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "ಇರಿಸುವ ಹಂತದಲ್ಲಿ ಆಟಗಾರ್ತಿಯು ಗಿರಣಿಯನ್ನು ರೂಪಿಸಿದರೆ, ಆಕೆ ಎದುರಾಳಿಯ ಸ್ಥಾನವಿಲ್ಲದ ತುಂಡನ್ನು ತೆಗೆದು ಚಲನೆಯನ್ನು ಮುಂದುವರಿಸುತ್ತಾಳೆ.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "플레이어가 배치 단계에서 밀을 형성하면 상대의 배치되지 않은 조각을 제거하고 계속 이동합니다.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Jei žaidėjas suformuoja malūną dėjimo stadijoje, ji pašalina priešininko nepadėtą figūrą ir toliau daro ėjimą.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Ja spēlētājs ievieto dzirnavas ievietošanas fāzē, viņa noņem pretinieka nenovietoto gabalu un turpina gājienu.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Ако играчот ја формира воденицата во фазата на пласман, таа ќе го отстрани непласираното парче на противничката и ќе продолжи да прави потег.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Sekiranya pemain membentuk kilang dalam fasa penempatan, dia akan mengeluarkan bahagian lawan yang tidak ditempatkan dan terus bergerak.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Als een speler de molen vormt in de plaatsingsfase, zal ze het niet-geplaatste stuk van de tegenstander verwijderen en doorgaan met een zet.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Hvis en spiller danner møllen i plasseringsfasen, vil hun fjerne motstanderens uplasserte brikke og fortsette å gjøre et trekk.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Jeśli gracz utworzy młyn w fazie układania, usunie nieumieszczony pion przeciwnika i kontynuuje ruch.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Se um jogador formar o moinho na fase de colocação, ele removerá a peça não colocada do oponente e continuará a fazer um movimento.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Dacă un jucător formează moara în faza de plasare, va elimina piesa neplasată a adversarului și va continua să facă o mișcare.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Если игрок формирует мельницу в фазе размещения, он удалит неразмещенную фишку противника и продолжит движение.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Ak hráč formuje mlyn vo fáze kladenia, odstráni súperovo neumiestnené miesto a pokračuje v ťahu.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Če igralec v fazi postavitve oblikuje mlin, bo odstranil nasprotnikov nezameščen kos in nadaljeval s potezo.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Nëse një lojtar formon mullirin në fazën e vendosjes, ajo do të heqë pjesën e pavendosur të kundërshtarit dhe do të vazhdojë të bëjë një lëvizje.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Ако играч формира воденицу у фази постављања, она ће уклонити противников незамењени део и наставити да прави потез.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Om en spelare bildar kvarnen i placeringsfasen, tar hon bort motståndarens oplacerade bit och fortsätter att göra ett drag.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "ప్లేసింగ్ ఉంచే దశలో ఒక క్రీడాకారుడు మిల్లును ఏర్పాటు చేస్తే, ఆమె ప్రత్యర్థి యొక్క అన్‌ప్లాస్డ్ భాగాన్ని తీసివేసి, ఒక కదలికను కొనసాగిస్తుంది.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "หากผู้เล่นสร้างโรงสีในขั้นตอนการวาง เธอจะถอดชิ้นส่วนที่ไม่ได้วางของคู่ต่อสู้ออกและทำการเคลื่อนไหวต่อไป",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Bir oyuncu değirmeni yerleştirme aşamasında oluşturursa, rakibin yerleştirilmemiş taşını kaldıracak ve hamle yapmaya devam edecektir.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Agar o'yinchi joylashtirish bosqichida tegirmonni hosil qilsa, u raqibning joylanmagan qismini olib tashlaydi va harakatni davom ettiradi.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "Nếu một người chơi hình thành cối xay trong giai đoạn đặt, cô ấy sẽ loại bỏ quân cờ của đối thủ và tiếp tục di chuyển.",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "当形成三连时,只能吃掉对手未摆的棋子并继续行棋。",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -1208,5 +1208,17 @@
"removeUnplacedPiece_Detail": "當形成三連時,只能吃掉對手未擺的棋子並繼續行棋。",
"@removeUnplacedPiece_Detail": {
"description": "If a player forms the mill in the placing phase, she will remove the opponent's unplaced piece and continue to make a move."
},
"endgameNMoveRule": "Endgame N-Move rule",
"@endgameNMoveRule": {
"description": "Endgame N-Move rule"
},
"endgameNMoveRule_Detail": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn.",
"@endgameNMoveRule_Detail": {
"description": "If either player has only three pieces and neither player removes a piece within a specific moves, the game is drawn."
},
"drawReasonEndgameRule50": "Either player has only three pieces and neither player removes a piece within a specific moves.",
"@drawReasonEndgameRule50": {
"description": "Either player has only three pieces and neither player removes a piece within a specific moves."
}
}

View File

@ -293,6 +293,10 @@ class Position {
// TODO: WAR to judge rule50
if (rule.nMoveRule > 0 && posKeyHistory.length > rule.nMoveRule - 1) {
gameOverReason = GameOverReason.drawReasonRule50;
} else if (rule.endgameNMoveRule < rule.nMoveRule &&
isThreeEndgame() &&
posKeyHistory.length > rule.endgameNMoveRule - 1) {
gameOverReason = GameOverReason.drawReasonEndgameRule50;
} else {
gameOverReason = GameOverReason.drawReasonThreefoldRepetition;
}
@ -764,6 +768,15 @@ class Position {
}
}
bool isThreeEndgame() {
if (phase == Phase.placing) {
return false;
}
return pieceOnBoardCount[PieceColor.white] == 3 ||
pieceOnBoardCount[PieceColor.black] == 3;
}
bool checkIfGameIsOver() {
if (phase == Phase.ready || phase == Phase.gameOver) {
return true;
@ -774,6 +787,13 @@ class Position {
return true;
}
if (rule.endgameNMoveRule < rule.nMoveRule &&
isThreeEndgame() &&
posKeyHistory.length > rule.endgameNMoveRule) {
setGameOver(PieceColor.draw, GameOverReason.drawReasonEndgameRule50);
return true;
}
if (pieceOnBoardCount[PieceColor.white]! +
pieceOnBoardCount[PieceColor.black]! >=
rankNumber * fileNumber) {

View File

@ -35,6 +35,7 @@ class Rule {
bool isLoseButNotChangeSideWhenNoWay = true;
bool mayFly = true;
int nMoveRule = 100;
int endgameNMoveRule = 100;
}
Rule rule = Rule();

View File

@ -183,6 +183,7 @@ enum GameOverReason {
loseReasonTimeOver,
drawReasonThreefoldRepetition,
drawReasonRule50,
drawReasonEndgameRule50,
drawReasonBoardIsFull
}

View File

@ -1207,6 +1207,8 @@ class _GamePageState extends State<GamePage>
GameOverReason.loseReasonTimeOver:
loserStr + S.of(context).loseReasonTimeOver,
GameOverReason.drawReasonRule50: S.of(context).drawReasonRule50,
GameOverReason.drawReasonEndgameRule50:
S.of(context).drawReasonEndgameRule50,
GameOverReason.drawReasonBoardIsFull: S.of(context).drawReasonBoardIsFull,
GameOverReason.drawReasonThreefoldRepetition:
S.of(context).drawReasonThreefoldRepetition,

View File

@ -86,6 +86,14 @@ class _RuleSettingsPageState extends State<RuleSettingsPage> {
onTap: setNMoveRule,
),
ListItemDivider(),
SettingsListTile(
context: context,
titleString: S.of(context).endgameNMoveRule,
subtitleString: S.of(context).endgameNMoveRule_Detail,
trailingString: Config.endgameNMoveRule.toString(),
onTap: setEndgameNMoveRule,
),
ListItemDivider(),
],
),
SizedBox(height: AppTheme.sizedBoxHeight),
@ -331,6 +339,99 @@ class _RuleSettingsPageState extends State<RuleSettingsPage> {
);
}
setEndgameNMoveRule() {
callback(int? endgameNMoveRule) async {
print("[config] endgameNMoveRule = $endgameNMoveRule");
Navigator.of(context).pop();
setState(() {
rule.endgameNMoveRule =
Config.endgameNMoveRule = endgameNMoveRule ?? 100;
});
print("[config] rule.endgameNMoveRule: ${rule.endgameNMoveRule}");
Config.save();
}
showModalBottomSheet(
context: context,
builder: (BuildContext context) => Semantics(
label: S.of(context).endgameNMoveRule,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
RadioListTile(
activeColor: AppTheme.switchListTileActiveColor,
title: Text('5'),
groupValue: Config.endgameNMoveRule,
value: 5,
onChanged: callback,
),
ListItemDivider(),
RadioListTile(
activeColor: AppTheme.switchListTileActiveColor,
title: Text('10'),
groupValue: Config.endgameNMoveRule,
value: 10,
onChanged: callback,
),
ListItemDivider(),
RadioListTile(
activeColor: AppTheme.switchListTileActiveColor,
title: Text('20'),
groupValue: Config.endgameNMoveRule,
value: 20,
onChanged: callback,
),
ListItemDivider(),
RadioListTile(
activeColor: AppTheme.switchListTileActiveColor,
title: Text('30'),
groupValue: Config.endgameNMoveRule,
value: 30,
onChanged: callback,
),
ListItemDivider(),
RadioListTile(
activeColor: AppTheme.switchListTileActiveColor,
title: Text('50'),
groupValue: Config.endgameNMoveRule,
value: 50,
onChanged: callback,
),
ListItemDivider(),
RadioListTile(
activeColor: AppTheme.switchListTileActiveColor,
title: Text('60'),
groupValue: Config.endgameNMoveRule,
value: 60,
onChanged: callback,
),
ListItemDivider(),
RadioListTile(
activeColor: AppTheme.switchListTileActiveColor,
title: Text('100'),
groupValue: Config.endgameNMoveRule,
value: 100,
onChanged: callback,
),
ListItemDivider(),
RadioListTile(
activeColor: AppTheme.switchListTileActiveColor,
title: Text('200'),
groupValue: Config.endgameNMoveRule,
value: 200,
onChanged: callback,
),
ListItemDivider(),
],
),
),
);
}
setFlyPieceCount() {
callback(int? flyPieceCount) async {
print("[config] flyPieceCount = $flyPieceCount");

View File

@ -1619,6 +1619,9 @@ void Game::appendGameOverReasonToMoveHistory()
case GameOverReason::drawReasonRule50:
snprintf(record, Position::RECORD_LEN_MAX, drawReasonRule50Str);
break;
case GameOverReason::drawReasonEndgameRule50:
snprintf(record, Position::RECORD_LEN_MAX, drawReasonEndgameRule50Str);
break;
case GameOverReason::loseReasonBoardIsFull:
snprintf(record, Position::RECORD_LEN_MAX, loseReasonBoardIsFullStr);
break;
@ -1719,12 +1722,15 @@ void Game::setTips()
case GameOverReason::drawReasonRule50:
reasonStr = "连续50回合无吃子判和。";
break;
case GameOverReason::drawReasonEndgameRule50:
reasonStr = "残局中连续50回合无吃子判和。";
break;
case GameOverReason::drawReasonBoardIsFull:
reasonStr = "棋盘满判和。";
break;
default:
break;
}
}
tips = reasonStr + resultStr + scoreStr;
break;