nicolaswinkler %!s(int64=7) %!d(string=hai) anos
pai
achega
f249888dd1
Modificáronse 1 ficheiros con 24 adicións e 0 borrados
  1. 24 0
      src/Search.h

+ 24 - 0
src/Search.h

@@ -55,6 +55,9 @@ public:
     inline void iterateKing(Args&&... args);
 
     template<Side side, typename... Args>
+    inline void iterateCastling(Args&&... args);
+
+    template<Side side, typename... Args>
     inline void iteratePawns(Args&&... args);
 
     template<Side side, typename... Args>
@@ -111,6 +114,7 @@ inline void chessy::Search<T>::iterateAll(Args&&... args)
     iterateRooks<side, Args...>(std::forward<Args>(args)...);
     iterateQueens<side, Args...>(std::forward<Args>(args)...);
     iterateKing<side, Args...>(std::forward<Args>(args)...);
+    iterateCastling<side, Args...>(std::forward<Args>(args)...);
 
     /*
 
@@ -262,6 +266,26 @@ inline void chessy::Search<T>::iterateKing(Args&&... args)
 
 template<typename T>
 template<chessy::Side side, typename... Args>
+inline void chessy::Search<T>::iterateCastling(Args&&... args)
+{
+    MoveInfo moveInfo;
+    moveInfo.movedPiece = PieceType::KING;
+    if (game.getCanCastleKingSide(side)) {
+        Bitboard king = board.getKing<side>();
+        Bitboard target = king.bits >> 2; // move king to the right
+        Bitboard rook = king.bits >> 3;
+        Bitboard rookTarget = king.bits >> 1;
+        if (!(target | friends<WHITE_SIDE>() | friends<BLACK_SIDE>()) &&
+            !(rookTarget | friends<WHITE_SIDE>() | friends<BLACK_SIDE>())) {
+
+        }
+        moveInfo.move = Move{ king, target, true };
+    }
+}
+
+
+template<typename T>
+template<chessy::Side side, typename... Args>
 inline void chessy::Search<T>::iterateSinglePawnPushes(Args&&... args)
 {
     MoveInfo moveInfo;