From 4af5705e4fa8e79973b8d2beb162c8f7e267eda2 Mon Sep 17 00:00:00 2001 From: Alexis Drai Date: Tue, 7 Feb 2023 14:50:42 +0100 Subject: [PATCH] :shield: Implement isValid() in rules --- .../rules/BasicDefaultsNoDiag.swift | 35 +++++++++++++------ .../Sources/connect4_lib/rules/IRules.swift | 16 ++++++--- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/Connect4/connect4_lib/Sources/connect4_lib/rules/BasicDefaultsNoDiag.swift b/Connect4/connect4_lib/Sources/connect4_lib/rules/BasicDefaultsNoDiag.swift index d529567..79cddf7 100644 --- a/Connect4/connect4_lib/Sources/connect4_lib/rules/BasicDefaultsNoDiag.swift +++ b/Connect4/connect4_lib/Sources/connect4_lib/rules/BasicDefaultsNoDiag.swift @@ -12,22 +12,35 @@ public struct BasicDefaultsNoDiag : IRules { withMinNbCols minNbCols: Int = 5, withMaxNbCols maxNbCols: Int = 15, withNbChipsToAlign nbChipsToAlign: Int = 4) { - - guard ( - minNbRows >= 3 - && minNbCols >= 3 - && maxNbRows >= minNbRows - && maxNbCols >= minNbCols - && nbChipsToAlign >= 2 - && nbChipsToAlign <= minNbCols - && nbChipsToAlign <= minNbRows - ) else { return nil } - + self.minNbRows = minNbRows self.maxNbRows = maxNbRows self.minNbCols = minNbCols self.maxNbCols = maxNbCols self.nbChipsToAlign = nbChipsToAlign + + guard (isValid( + withMinNbRows: minNbRows, + withMaxNbRows: maxNbRows, + withMinNbCols: minNbCols, + withMaxNbCols: maxNbCols, + withNbChipsToAlign: nbChipsToAlign + )) else { return nil } + } + + public func isValid(withMinNbRows minNbRows: Int = 5, + withMaxNbRows maxNbRows: Int = 15, + withMinNbCols minNbCols: Int = 5, + withMaxNbCols maxNbCols: Int = 15, + withNbChipsToAlign nbChipsToAlign: Int = 4) + -> Bool { + return minNbRows >= 3 + && minNbCols >= 3 + && maxNbRows >= minNbRows + && maxNbCols >= minNbCols + && nbChipsToAlign >= 2 + && nbChipsToAlign <= minNbCols + && nbChipsToAlign <= minNbRows } public func isGameOver(byPlayer playerId: Int, onGrid grid: [[Int?]]) diff --git a/Connect4/connect4_lib/Sources/connect4_lib/rules/IRules.swift b/Connect4/connect4_lib/Sources/connect4_lib/rules/IRules.swift index 0e6d012..6aaf590 100644 --- a/Connect4/connect4_lib/Sources/connect4_lib/rules/IRules.swift +++ b/Connect4/connect4_lib/Sources/connect4_lib/rules/IRules.swift @@ -6,12 +6,18 @@ public protocol IRules { var minNbCols: Int { get } var maxNbCols: Int { get } var nbChipsToAlign: Int { get } - func isGameOver(byPlayer playerId: Int, onGrid grid: [[Int?]]) -> (isOver: Bool, result: Result) - // TODO plug in the EnumResult - // and - // getNextPlayer(c) -> Int - // isValid(c) -> Bool + func isGameOver(byPlayer playerId: Int, + onGrid grid: [[Int?]]) + -> (isOver: Bool, result: Result) + + func isValid(withMinNbRows: Int, + withMaxNbRows: Int, + withMinNbCols: Int, + withMaxNbCols: Int, + withNbChipsToAlign: Int) + -> Bool + // TODO : getNextPlayer(c) -> Int (or code this in Game instead? what is c anyway? Board doesn't know the players...) } public enum Result : Equatable {