From b04ecceb9f4017703ae4928b835040b841b7607c Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:20:02 +0200 Subject: [PATCH] yes --- Sources/Engine/Board.swift | 6 ++++++ Sources/Engine/Pieces/Bishop.swift | 5 ++++- Sources/Engine/Pieces/King.swift | 15 ++++++++++++++- Sources/Engine/Pieces/Queen.swift | 5 ++++- Sources/Engine/Pieces/Rook.swift | 5 ++++- 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Sources/Engine/Board.swift b/Sources/Engine/Board.swift index 9b2cb88..223d6f8 100644 --- a/Sources/Engine/Board.swift +++ b/Sources/Engine/Board.swift @@ -76,6 +76,12 @@ public class Board: CustomStringConvertible, EventDelegate { func notify(_ event: Event) { #warning("Not implemented") + switch event { + case .kingInCheck(let piece, let king): + king.insertThreat(piece) + case .piecePinned(let p1, let p2): + break + } } internal func addPieceToTarget(_ piece: Piece, target: Square.Position) { diff --git a/Sources/Engine/Pieces/Bishop.swift b/Sources/Engine/Pieces/Bishop.swift index a2c7ab7..c968fde 100644 --- a/Sources/Engine/Pieces/Bishop.swift +++ b/Sources/Engine/Pieces/Bishop.swift @@ -29,13 +29,16 @@ final class Bishop: Piece, DiagonalMoves { if let king = piece as? King { delegate?.notify(.kingInCheck(self, on: king)) legalPositions.removeLast() + last = position + return } else { delegate?.notify( .piecePinned(from: self, on: piece)) + last = position } - last = position } } + delegate?.addPieceToTarget(self, target: position) } } } diff --git a/Sources/Engine/Pieces/King.swift b/Sources/Engine/Pieces/King.swift index a820ca7..4a32f6b 100644 --- a/Sources/Engine/Pieces/King.swift +++ b/Sources/Engine/Pieces/King.swift @@ -1,6 +1,19 @@ final class King: Piece { typealias Threats = (Piece?, Piece?) - var threats: Threats = (nil, nil) + internal private(set) var threats: Threats = (nil, nil) + + func insertThreat(_ piece: Piece) { + if threats.0 == nil { + threats.0 = piece + return + } + + if threats.1 == nil { + threats.1 = piece + return + } + } + override var unicodeRepresentation: String { return color == .Black ? "♚" : "♔" } diff --git a/Sources/Engine/Pieces/Queen.swift b/Sources/Engine/Pieces/Queen.swift index 7532420..4eb0dd9 100644 --- a/Sources/Engine/Pieces/Queen.swift +++ b/Sources/Engine/Pieces/Queen.swift @@ -31,13 +31,16 @@ final class Queen: Piece, LinearMoves, DiagonalMoves { if let king = piece as? King { delegate?.notify(.kingInCheck(self, on: king)) legalPositions.removeLast() + last = position + return } else { delegate?.notify( .piecePinned(from: self, on: piece)) + last = position } - last = position } } + delegate?.addPieceToTarget(self, target: position) } } } diff --git a/Sources/Engine/Pieces/Rook.swift b/Sources/Engine/Pieces/Rook.swift index 2bef96e..8d2e715 100644 --- a/Sources/Engine/Pieces/Rook.swift +++ b/Sources/Engine/Pieces/Rook.swift @@ -29,13 +29,16 @@ final class Rook: Piece, LinearMoves { if let king = piece as? King { delegate?.notify(.kingInCheck(self, on: king)) legalPositions.removeLast() + last = position + return } else { delegate?.notify( .piecePinned(from: self, on: piece)) + last = position } - last = position } } + delegate?.addPieceToTarget(self, target: position) } } }