master
Kanken 2 years ago
parent 01f87e0f8a
commit 809c923982

@ -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">
</BreakpointContent>
@ -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">
</BreakpointContent>
@ -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">
<Locations>
<Location
@ -457,6 +457,21 @@
endingLineNumber = "18"
offsetFromSymbolStart = "1609">
</Location>
<Location
uuid = "DCE63B6C-A177-400D-A019-8DC8AB50FE21 - 75d56842e8b45f90"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "forcesPack.AreRows4xL.isRuleMet(grid: Swift.Array&lt;Swift.Array&lt;Swift.Optional&lt;Swift.Int&gt;&gt;&gt;, targetedRow: Swift.Int, targetedCol: Swift.Int, lastPlayedId: Swift.Int) -&gt; Swift.Bool"
moduleName = "forcesPackTests"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/yorickgeoffre/swift/4forces/forcesPack/Sources/forcesPack/Rules/AreRows4xL.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "17"
endingLineNumber = "17"
offsetFromSymbolStart = "1301">
</Location>
</Locations>
</BreakpointContent>
</BreakpointProxy>
@ -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">
</BreakpointContent>
</BreakpointProxy>
@ -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">
<Locations>
<Location
@ -564,9 +579,9 @@
filePath = "forcesPack/Sources/forcesPack/Rules/AreRows4xL.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "17"
endingLineNumber = "17"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)"
startingLineNumber = "16"
endingLineNumber = "16"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
@ -646,7 +661,7 @@
endingColumnNumber = "9223372036854775807"
startingLineNumber = "13"
endingLineNumber = "13"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
@ -662,7 +677,7 @@
endingColumnNumber = "9223372036854775807"
startingLineNumber = "13"
endingLineNumber = "13"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
@ -678,7 +693,7 @@
endingColumnNumber = "9223372036854775807"
startingLineNumber = "14"
endingLineNumber = "14"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
@ -694,7 +709,7 @@
endingColumnNumber = "9223372036854775807"
startingLineNumber = "18"
endingLineNumber = "18"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:)"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
@ -842,5 +857,84 @@
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "8BCF5C14-DCCF-4939-9693-39220C46B433"
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "forcesPack/Sources/forcesPack/Rules/AreCols4xL.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "15"
endingLineNumber = "15"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)"
landmarkType = "7">
<Locations>
<Location
uuid = "8BCF5C14-DCCF-4939-9693-39220C46B433 - 2c501b284e01d3a0"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "forcesPack.AreCols4xL.isRuleMet(grid: Swift.Array&lt;Swift.Array&lt;Swift.Optional&lt;Swift.Int&gt;&gt;&gt;, targetedRow: Swift.Int, targetedCol: Swift.Int) -&gt; Swift.Bool"
moduleName = "4forces"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/yorickgeoffre/swift/4forces/forcesPack/Sources/forcesPack/Rules/AreCols4xL.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "15"
endingLineNumber = "15"
offsetFromSymbolStart = "433">
</Location>
<Location
uuid = "8BCF5C14-DCCF-4939-9693-39220C46B433 - 75a93932461f4bbe"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "forcesPack.AreCols4xL.isRuleMet(grid: Swift.Array&lt;Swift.Array&lt;Swift.Optional&lt;Swift.Int&gt;&gt;&gt;, targetedRow: Swift.Int, targetedCol: Swift.Int) -&gt; Swift.Bool"
moduleName = "forcesPackTests"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/yorickgeoffre/swift/4forces/forcesPack/Sources/forcesPack/Rules/AreCols4xL.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "15"
endingLineNumber = "15"
offsetFromSymbolStart = "433">
</Location>
<Location
uuid = "8BCF5C14-DCCF-4939-9693-39220C46B433 - 943c983c060e688e"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "forcesPack.AreCols4xL.isRuleMet(grid: Swift.Array&lt;Swift.Array&lt;Swift.Optional&lt;Swift.Int&gt;&gt;&gt;, targetedRow: Swift.Int, targetedCol: Swift.Int, lastPlayedId: Swift.Int) -&gt; Swift.Bool"
moduleName = "forcesPackTests"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/yorickgeoffre/swift/4forces/forcesPack/Sources/forcesPack/Rules/AreCols4xL.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "15"
endingLineNumber = "15"
offsetFromSymbolStart = "323">
</Location>
</Locations>
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "B23E4265-3B48-4BC0-A364-9C39EB958E83"
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "forcesPack/Sources/forcesPack/Rules/AreCols4xL.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "16"
endingLineNumber = "16"
landmarkName = "isRuleMet(grid:targetedRow:targetedCol:lastPlayedId:)"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>

@ -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
}
}

@ -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
}
}

@ -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{

@ -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]{

@ -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

@ -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

@ -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{

@ -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{

@ -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
}

@ -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)

Loading…
Cancel
Save