Prechádzať zdrojové kódy

promotion bug removed

Nicolas Winkler 7 rokov pred
rodič
commit
80fec3bf4d
2 zmenil súbory, kde vykonal 8 pridanie a 2 odobranie
  1. 5 2
      src/MoveGeneration.cpp
  2. 3 0
      src/MoveGeneration.h

+ 5 - 2
src/MoveGeneration.cpp

@@ -73,14 +73,17 @@ typename PromotionGenerator<side>::MoveIterator PromotionGenerator<side>::begin(
     else
         pawns &= Bitboard(0x000000000000FF00ULL);
 
-    return MoveIterator{ chessGame, pawns, PieceType::KNIGHT, -1 };
+    auto result = MoveIterator{ chessGame, pawns, PieceType::KNIGHT, -1 };
+    if (!result.valid())
+        ++result;
+    return result;
 }
 
 
 template<Side side>
 typename PromotionGenerator<side>::MoveIterator PromotionGenerator<side>::end(void) const
 {
-    return MoveIterator{ chessGame, 0, PieceType::PAWN, 0 };
+    return MoveIterator{ chessGame, 0, PieceType::KNIGHT, -1 };
 }
 
 

+ 3 - 0
src/MoveGeneration.h

@@ -144,6 +144,7 @@ class chessy::PromotionGenerator
 
     struct MoveIterator
     {
+        friend class chessy::PromotionGenerator;
         const ChessGame& chessGame;
         PositionSet::PositionSetIterator pawns;
         PieceType promotionType;
@@ -152,6 +153,8 @@ class chessy::PromotionGenerator
         inline Move operator *(void) const
         {
             Index pp = *pawns;
+            if (!valid())
+                throw "";
             return Move{ pp, int8_t(pp + (side == WHITE_SIDE ? 8 : -8) +
                     direction), promotionType };
         }