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)