diff --git a/4forces.xcworkspace/xcuserdata/yorickgeoffre.xcuserdatad/UserInterfaceState.xcuserstate b/4forces.xcworkspace/xcuserdata/yorickgeoffre.xcuserdatad/UserInterfaceState.xcuserstate index 26be134..775269a 100644 Binary files a/4forces.xcworkspace/xcuserdata/yorickgeoffre.xcuserdatad/UserInterfaceState.xcuserstate and b/4forces.xcworkspace/xcuserdata/yorickgeoffre.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/4forces.xcworkspace/xcuserdata/yorickgeoffre.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/4forces.xcworkspace/xcuserdata/yorickgeoffre.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index c2414bc..941a431 100644 --- a/4forces.xcworkspace/xcuserdata/yorickgeoffre.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/4forces.xcworkspace/xcuserdata/yorickgeoffre.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -360,8 +360,8 @@ filePath = "forcesPack/Tests/forcesPackTests/boardRulesTests.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "36" - endingLineNumber = "36" + startingLineNumber = "37" + endingLineNumber = "37" landmarkName = "testRules()" landmarkType = "7"> @@ -376,8 +376,8 @@ filePath = "forcesPack/Tests/forcesPackTests/boardRulesTests.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "42" - endingLineNumber = "42" + startingLineNumber = "43" + endingLineNumber = "43" landmarkName = "testRules()" landmarkType = "7"> @@ -392,9 +392,9 @@ filePath = "forcesPack/Sources/forcesPack/Rules/AreRows4xL.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "18" - endingLineNumber = "18" - landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)" + startingLineNumber = "17" + endingLineNumber = "17" + landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)" landmarkType = "7"> + + @@ -470,9 +485,9 @@ filePath = "forcesPack/Sources/forcesPack/Rules/AreRows4xL.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "21" - endingLineNumber = "21" - landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)" + startingLineNumber = "20" + endingLineNumber = "20" + landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)" landmarkType = "7"> @@ -486,9 +501,9 @@ filePath = "forcesPack/Sources/forcesPack/Rules/AreRows4xL.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "20" - endingLineNumber = "20" - landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)" + startingLineNumber = "19" + endingLineNumber = "19" + landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)" landmarkType = "7"> @@ -646,7 +661,7 @@ endingColumnNumber = "9223372036854775807" startingLineNumber = "13" endingLineNumber = "13" - landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)" + landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)" landmarkType = "7"> @@ -662,7 +677,7 @@ endingColumnNumber = "9223372036854775807" startingLineNumber = "13" endingLineNumber = "13" - landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)" + landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)" landmarkType = "7"> @@ -678,7 +693,7 @@ endingColumnNumber = "9223372036854775807" startingLineNumber = "14" endingLineNumber = "14" - landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)" + landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)" landmarkType = "7"> @@ -694,7 +709,7 @@ endingColumnNumber = "9223372036854775807" startingLineNumber = "18" endingLineNumber = "18" - landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)" + landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)" landmarkType = "7"> @@ -842,5 +857,84 @@ landmarkType = "7"> + + + + + + + + + + + + + + + + diff --git a/forcesPack/Sources/forcesPack/Board.swift b/forcesPack/Sources/forcesPack/Board.swift index 9e2c0b2..189c9d1 100644 --- a/forcesPack/Sources/forcesPack/Board.swift +++ b/forcesPack/Sources/forcesPack/Board.swift @@ -119,18 +119,16 @@ public struct Board : CustomStringConvertible{ public func coalesceWonBoard(winningAlignementGrid: [[Int?]]) -> String{ var str: String = "" str += "╔" - str += String(repeating: "═╦", count: (nbColumn)-1) + "═╗\n" + str += String(repeating: "══╦", count: (nbColumn)-1) + "══╗\n" for collNum in 0...nbRows-1{ //parcours de la grille du bas vers le haut for rowNum in 0...nbColumn-1{ str += "║" - str += String(winningAlignementGrid[rowNum][collNum] != nil ? "\u{001B}[0;33" : "") - str += String(((grid[rowNum][collNum] == nil) ? "▒" : String((grid[rowNum][collNum] ?? 0)))) - str += "\u{001B}[0;30" + str += String(winningAlignementGrid[rowNum][collNum] != nil ? "🔴" : " ") } str += String("║\n") } str += "╚" - str += String(repeating: "═╩", count: (nbColumn)-1) + "═╝\n" + str += String(repeating: "══╩", count: (nbColumn)-1) + "══╝\n" return str } } diff --git a/forcesPack/Sources/forcesPack/Game.swift b/forcesPack/Sources/forcesPack/Game.swift index 94104e0..c3cc483 100644 --- a/forcesPack/Sources/forcesPack/Game.swift +++ b/forcesPack/Sources/forcesPack/Game.swift @@ -60,12 +60,12 @@ public class Game{ } printerFunc(board.description) for gRule in winRules { - if(gRule.isRuleMet(grid: board.playspace, targetedRow: board.lastinsert, targetedCol: played)){ + if(gRule.isRuleMet(grid: board.playspace, targetedRow: board.lastinsert, targetedCol: played, lastPlayedId: p.id)){ winner = p printerFunc(board.coalesceWonBoard(winningAlignementGrid: gRule.results ?? [[0]])) return false } - if board.isFull() { + if board.isFull() { //stalemate return false } } diff --git a/forcesPack/Sources/forcesPack/Rules/AreCols4x.swift b/forcesPack/Sources/forcesPack/Rules/AreCols4x.swift index 99abc94..df1a565 100644 --- a/forcesPack/Sources/forcesPack/Rules/AreCols4x.swift +++ b/forcesPack/Sources/forcesPack/Rules/AreCols4x.swift @@ -7,9 +7,9 @@ import Foundation public class AreCols4x: gridRule, Rule{ //TODO: use the targeted row/col for more precision - public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int) -> Bool { + public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int, lastPlayedId: Int) -> Bool { var i: Int = 0 - var old: Int? = -1 + var old: Int? = lastPlayedId var rowid = 0 var colid = 0 for row in grid{ diff --git a/forcesPack/Sources/forcesPack/Rules/AreCols4xL.swift b/forcesPack/Sources/forcesPack/Rules/AreCols4xL.swift index 307cbcc..58b2652 100644 --- a/forcesPack/Sources/forcesPack/Rules/AreCols4xL.swift +++ b/forcesPack/Sources/forcesPack/Rules/AreCols4xL.swift @@ -8,8 +8,8 @@ import Foundation public class AreCols4xL: gridRule, Rule{ - public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int) -> Bool { - var old: Int? = grid[0][targetedCol] + public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int, lastPlayedId: Int) -> Bool { + var old: Int? = lastPlayedId var count: Int = 0 var index: Int = 0 for cell in grid[targetedRow]{ diff --git a/forcesPack/Sources/forcesPack/Rules/AreDiags4x.swift b/forcesPack/Sources/forcesPack/Rules/AreDiags4x.swift index 7a38465..8c38b9a 100644 --- a/forcesPack/Sources/forcesPack/Rules/AreDiags4x.swift +++ b/forcesPack/Sources/forcesPack/Rules/AreDiags4x.swift @@ -9,12 +9,12 @@ import Foundation public class AreDiags4x: gridRule, Rule{ //TODO: use the targeted row/col for more precision - public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int) -> Bool { + public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int, lastPlayedId: Int) -> Bool { let colRange = 0...grid.count-1 let rowRange = 0...grid[0].count-1 - var oldCell: Int? = nil + var oldCell: Int? = lastPlayedId var sameCount: Int = 0 for indexC in colRange{ //donne la colonne de départ en bas du tableau diff --git a/forcesPack/Sources/forcesPack/Rules/AreDiags4xL.swift b/forcesPack/Sources/forcesPack/Rules/AreDiags4xL.swift index 2ea5b36..3bb97d2 100644 --- a/forcesPack/Sources/forcesPack/Rules/AreDiags4xL.swift +++ b/forcesPack/Sources/forcesPack/Rules/AreDiags4xL.swift @@ -7,10 +7,10 @@ import Foundation -public class AreDiags4xL: gridRule, Rule{ //TODO: use the targeted row/col for more precision +public class AreDiags4xL: gridRule, Rule{ - public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int) -> Bool { - var old: Int? = grid[targetedRow][targetedCol] + public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int, lastPlayedId: Int) -> Bool { + var old: Int? = lastPlayedId var count : Int = 0 let rowsize = grid[0].capacity-1 diff --git a/forcesPack/Sources/forcesPack/Rules/AreRows4x.swift b/forcesPack/Sources/forcesPack/Rules/AreRows4x.swift index 5f4eda3..e312f48 100644 --- a/forcesPack/Sources/forcesPack/Rules/AreRows4x.swift +++ b/forcesPack/Sources/forcesPack/Rules/AreRows4x.swift @@ -9,11 +9,11 @@ import Foundation public class AreRows4x: gridRule, Rule{//TODO: use the targeted row/col for more precision public override init(){} - public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int) -> Bool { + public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int, lastPlayedId: Int) -> Bool { var rowid = 0 var colid = 0 var i: [Int] = Array( repeating: 0, count: grid.count) - var old: [Int?] = Array( repeating: nil, count: grid.count) + var old: [Int?] = Array( repeating: lastPlayedId, count: grid.count) var idx: Int = 0 for row in grid{ for cell in row{ diff --git a/forcesPack/Sources/forcesPack/Rules/AreRows4xL.swift b/forcesPack/Sources/forcesPack/Rules/AreRows4xL.swift index 526a6fc..91228d6 100644 --- a/forcesPack/Sources/forcesPack/Rules/AreRows4xL.swift +++ b/forcesPack/Sources/forcesPack/Rules/AreRows4xL.swift @@ -9,11 +9,10 @@ import Foundation public class AreRows4xL: gridRule, Rule{ public override init(){} - public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int) -> Bool { - var old: Int? = grid[0][targetedCol] + public func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int, lastPlayedId: Int) -> Bool { + var old: Int? = lastPlayedId var count: Int = 0 for index in 0...grid[0].capacity-1{ - print(grid[0].capacity) if(grid[index][targetedCol] == old && old != nil){ count += 1 }else{ diff --git a/forcesPack/Sources/forcesPack/Rules/Rule.swift b/forcesPack/Sources/forcesPack/Rules/Rule.swift index ac4ff37..2b573b1 100644 --- a/forcesPack/Sources/forcesPack/Rules/Rule.swift +++ b/forcesPack/Sources/forcesPack/Rules/Rule.swift @@ -8,5 +8,5 @@ import Foundation public protocol Rule : gridRule{ - func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int)-> Bool + func isRuleMet(grid: [[Int?]], targetedRow: Int, targetedCol: Int, lastPlayedId: Int)-> Bool } diff --git a/forcesPack/Tests/forcesPackTests/boardRulesTests.swift b/forcesPack/Tests/forcesPackTests/boardRulesTests.swift index c2070ae..420d13d 100644 --- a/forcesPack/Tests/forcesPackTests/boardRulesTests.swift +++ b/forcesPack/Tests/forcesPackTests/boardRulesTests.swift @@ -11,9 +11,10 @@ import forcesPack final class BoardRulesTests: XCTestCase { private var boardEmpty: [[Int?]] = [[nil,nil,nil,nil],[nil,nil,nil,nil],[nil,nil,nil,nil],[nil,nil,nil,nil]] - private var boardRow: [[Int?]] = [[0,0,0,0],[nil,nil,nil,nil],[nil,nil,nil,nil],[nil,nil,nil,nil]] - private var boardCol: [[Int?]] = [[0,nil,nil,nil],[0,nil,nil,nil],[0,nil,nil,nil],[0,nil,nil,nil]] + private var boardRow: [[Int?]] = [[nil,nil,nil,nil],[nil,nil,nil,nil],[0,0,0,0],[nil,nil,nil,nil]] + private var boardCol: [[Int?]] = [[nil,0,nil,nil],[nil,0,nil,nil],[nil,0,nil,nil],[nil,0,nil,nil],] private var boardDiag: [[Int?]] = [[0,nil,nil,nil],[nil,0,nil,nil],[nil,nil,0,nil],[nil,nil,nil,0]] + private var boardDiagInv: [[Int?]] = [[nil,nil,nil,0],[nil,nil,0,nil],[nil,0,nil,nil],[0,nil,nil,nil]] func testRules(){ var ruleCol : Rule = AreCols4x() @@ -23,39 +24,42 @@ final class BoardRulesTests: XCTestCase { var ruleColL: Rule = AreCols4xL() var ruleDiagL: Rule = AreDiags4xL() - XCTAssertFalse(ruleCol.isRuleMet(grid: boardEmpty, targetedRow: 0, targetedCol: 0)) - XCTAssertFalse(ruleRow.isRuleMet(grid: boardEmpty, targetedRow: 0, targetedCol: 0)) - XCTAssertFalse(ruleDiag.isRuleMet(grid: boardEmpty, targetedRow: 0, targetedCol: 0)) + XCTAssertFalse(ruleCol.isRuleMet(grid: boardEmpty, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) + XCTAssertFalse(ruleRow.isRuleMet(grid: boardEmpty, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) + XCTAssertFalse(ruleDiag.isRuleMet(grid: boardEmpty, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) - XCTAssertTrue(ruleCol.isRuleMet(grid: boardRow, targetedRow: 0, targetedCol: 0)) - XCTAssertFalse(ruleRow.isRuleMet(grid: boardRow, targetedRow: 0, targetedCol: 0)) - XCTAssertFalse(ruleDiag.isRuleMet(grid: boardRow, targetedRow: 0, targetedCol: 0)) + XCTAssertTrue(ruleCol.isRuleMet(grid: boardRow, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) + XCTAssertFalse(ruleRow.isRuleMet(grid: boardRow, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) + XCTAssertFalse(ruleDiag.isRuleMet(grid: boardRow, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) print(ruleCol.results) - XCTAssertFalse(ruleCol.isRuleMet(grid: boardCol, targetedRow: 0, targetedCol: 0)) - XCTAssertTrue(ruleRow.isRuleMet(grid: boardCol, targetedRow: 0, targetedCol: 0)) - XCTAssertFalse(ruleDiag.isRuleMet(grid: boardCol, targetedRow: 0, targetedCol: 0)) + XCTAssertFalse(ruleCol.isRuleMet(grid: boardCol, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) + XCTAssertTrue(ruleRow.isRuleMet(grid: boardCol, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) + XCTAssertFalse(ruleDiag.isRuleMet(grid: boardCol, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) print(ruleRow.results) - XCTAssertFalse(ruleCol.isRuleMet(grid: boardDiag, targetedRow: 0, targetedCol: 0)) - XCTAssertFalse(ruleRow.isRuleMet(grid: boardDiag, targetedRow: 0, targetedCol: 0)) - XCTAssertTrue(ruleDiag.isRuleMet(grid: boardDiag, targetedRow: 0, targetedCol: 0)) + XCTAssertFalse(ruleCol.isRuleMet(grid: boardDiag, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) + XCTAssertFalse(ruleRow.isRuleMet(grid: boardDiag, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) + XCTAssertTrue(ruleDiag.isRuleMet(grid: boardDiag, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) - XCTAssertTrue(ruleColL.isRuleMet(grid: boardRow, targetedRow: 0, targetedCol: 0)) - XCTAssertFalse(ruleRowL.isRuleMet(grid: boardRow, targetedRow: 0, targetedCol: 0)) - XCTAssertFalse(ruleDiagL.isRuleMet(grid: boardRow, targetedRow: 0, targetedCol: 0)) + XCTAssertTrue(ruleColL.isRuleMet(grid: boardRow, targetedRow: 2, targetedCol: 2, lastPlayedId: 0)) + XCTAssertFalse(ruleRowL.isRuleMet(grid: boardRow, targetedRow: 1, targetedCol: 1, lastPlayedId: 0)) + XCTAssertFalse(ruleDiagL.isRuleMet(grid: boardRow, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) - XCTAssertFalse(ruleColL.isRuleMet(grid: boardCol, targetedRow: 0, targetedCol: 0)) - XCTAssertTrue(ruleRowL.isRuleMet(grid: boardCol, targetedRow: 0, targetedCol: 0)) - XCTAssertFalse(ruleDiagL.isRuleMet(grid: boardCol, targetedRow: 0, targetedCol: 0)) + XCTAssertFalse(ruleColL.isRuleMet(grid: boardCol, targetedRow: 2, targetedCol: 2, lastPlayedId: 0)) + XCTAssertTrue(ruleRowL.isRuleMet(grid: boardCol, targetedRow: 1, targetedCol: 1, lastPlayedId: 0)) + XCTAssertFalse(ruleDiagL.isRuleMet(grid: boardCol, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) - XCTAssertFalse(ruleColL.isRuleMet(grid: boardDiag, targetedRow: 0, targetedCol: 0)) - XCTAssertFalse(ruleRowL.isRuleMet(grid: boardDiag, targetedRow: 0, targetedCol: 0)) - XCTAssertTrue(ruleDiagL.isRuleMet(grid: boardDiag, targetedRow: 0, targetedCol: 0)) + XCTAssertFalse(ruleColL.isRuleMet(grid: boardDiag, targetedRow: 2, targetedCol: 2, lastPlayedId: 0)) + XCTAssertFalse(ruleRowL.isRuleMet(grid: boardDiag, targetedRow: 1, targetedCol: 1, lastPlayedId: 0)) + XCTAssertTrue(ruleDiagL.isRuleMet(grid: boardDiag, targetedRow: 0, targetedCol: 0, lastPlayedId: 0)) + XCTAssertFalse(ruleColL.isRuleMet(grid: boardDiagInv, targetedRow: 2, targetedCol: 2, lastPlayedId: 0)) + XCTAssertFalse(ruleRowL.isRuleMet(grid: boardDiagInv, targetedRow: 1, targetedCol: 1, lastPlayedId: 0)) + XCTAssertTrue(ruleDiagL.isRuleMet(grid: boardDiagInv, targetedRow: 0, targetedCol: 3, lastPlayedId: 0)) print(ruleRowL.results) print(ruleColL.results)