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