From a3cb0aca93ba91354eaff1c841d5608bb0312887 Mon Sep 17 00:00:00 2001 From: Paolo Capriotti Date: Thu, 2 Aug 2007 11:39:11 +0200 Subject: [PATCH] Added promotion to shogi gamestate. --- src/hlvariant/shogi/legalitycheck.h | 11 ++++++++++- src/hlvariant/shogi/serializer.h | 21 ++++++++++----------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/hlvariant/shogi/legalitycheck.h b/src/hlvariant/shogi/legalitycheck.h index 41a4917..b5ef31a 100644 --- a/src/hlvariant/shogi/legalitycheck.h +++ b/src/hlvariant/shogi/legalitycheck.h @@ -153,7 +153,16 @@ bool LegalityCheck::pseudolegal(Move& move) const { } else { Piece piece = m_state.board().get(move.from()); - return piece != Piece() && getMoveType(piece, move); + if (piece != Piece() && getMoveType(piece, move)) { + if (piece.type() == Piece::PAWN && + !piece.promoted() && + (m_state.promotionZone(piece.color(), move.to()) || + m_state.promotionZone(piece.color(), move.from()))) + move.setType(Move::PROMOTION); + return true; + } + else + return false; } } diff --git a/src/hlvariant/shogi/serializer.h b/src/hlvariant/shogi/serializer.h index e24aad1..9e71ad6 100644 --- a/src/hlvariant/shogi/serializer.h +++ b/src/hlvariant/shogi/serializer.h @@ -109,10 +109,7 @@ QString Serializer::serialize(const Move& move, const GameState& if (move.drop() != Piece()) res += '*'; res += square(move.to(), ref.board().size()); - if (!piece.promoted() && - move.drop() == Piece() && - ref.promotionZone(ref.turn(), move.to()) && - move.promoteTo() != -1) + if (move.promoteTo() != -1) res += "+"; return res; case COMPACT: @@ -140,14 +137,16 @@ QString Serializer::serialize(const Move& move, const GameState& res += square(move.to(), ref.board().size()); - if (!piece.promoted() && - move.drop() == Piece() && - ref.promotionZone(ref.turn(), move.to())) { - if (move.promoteTo() != -1) - res += "+"; - else - res += "="; + // if it is a promotion + if (move.promoteTo() != -1) + res += "+"; + // if it is a refused promotion + else if (!piece.promoted() && + move.drop() == Piece() && + ref.promotionZone(ref.turn(), move.to())) { + res += "="; } + return res; } } -- 2.11.4.GIT