les tests passenttt

master
Adam BONAFOS 2 months ago
parent 57e294c369
commit da647361e7

@ -20,56 +20,56 @@ public struct TicTacToeRules: Rules {
self.piecesToAlign = piecesToAlign self.piecesToAlign = piecesToAlign
} }
public func isGameOver(board: Board) -> (result: Bool, winner: Token) { public func isGameOver(board: Board) -> (result: Bool, winner: Token) {
// Vérification générale avec le nombre de pièces à aligner // Vérification générale avec le nombre de pièces à aligner
let maxRow = board.rowNb let maxRow = board.rowNb
let maxCol = board.columnNb let maxCol = board.columnNb
// Vérification horizontale // Vérification horizontale
for row in 0..<maxRow { for row in 0..<maxRow {
for col in 0..<(maxCol - piecesToAlign + 1) { for col in 0..<(maxCol - piecesToAlign + 1) {
if checkLine(board: board, start: (row, col), direction: (0, 1)) { if checkLine(board: board, start: (row, col), direction: (0, 1)) {
return (true, board[row, col]) return (true, board[row, col])
}
} }
} }
}
// Vérification verticale // Vérification verticale
for col in 0..<maxCol { for col in 0..<maxCol {
for row in 0..<(maxRow - piecesToAlign + 1) { for row in 0..<(maxRow - piecesToAlign + 1) {
if checkLine(board: board, start: (row, col), direction: (1, 0)) { if checkLine(board: board, start: (row, col), direction: (1, 0)) {
return (true, board[row, col]) return (true, board[row, col])
}
} }
} }
}
// Vérification diagonale ascendante (\) // Vérification diagonale ascendante (\)
for row in (piecesToAlign - 1)..<maxRow { for row in (piecesToAlign - 1)..<maxRow {
for col in 0..<(maxCol - piecesToAlign + 1) { for col in 0..<(maxCol - piecesToAlign + 1) {
if checkLine(board: board, start: (row, col), direction: (-1, 1)) { if checkLine(board: board, start: (row, col), direction: (-1, 1)) {
return (true, board[row, col]) return (true, board[row, col])
}
} }
} }
}
// Vérification diagonale descendante (/) // Vérification diagonale descendante (/)
for row in 0..<(maxRow - piecesToAlign + 1) { for row in 0..<(maxRow - piecesToAlign + 1) {
for col in 0..<(maxCol - piecesToAlign + 1) { for col in 0..<(maxCol - piecesToAlign + 1) {
if checkLine(board: board, start: (row, col), direction: (1, 1)) { if checkLine(board: board, start: (row, col), direction: (1, 1)) {
return (true, board[row, col]) return (true, board[row, col])
}
} }
} }
}
// Vérification du match nul (plateau plein) // Vérification du match nul (plateau plein)
for row in 0..<maxRow { for row in 0..<maxRow {
for col in 0..<maxCol { for col in 0..<maxCol {
if board[row, col] == .empty { if board[row, col] == .empty {
return (false, Token.empty) return (false, Token.empty)
}
} }
} }
return (true, Token.empty) }
return (true, Token.empty)
} }
public func possibleMoves(board: Board) -> [Move] { public func possibleMoves(board: Board) -> [Move] {

@ -21,22 +21,33 @@ final class IsGameOverTest: XCTestCase {
XCTAssertTrue(rules.isGameOver(board: board).result) XCTAssertTrue(rules.isGameOver(board: board).result)
XCTAssertEqual(rules.isGameOver(board: board).winner, Token.red) XCTAssertEqual(rules.isGameOver(board: board).winner, Token.red)
} }
/*func testFullGridWithoutWin() { func testFullGridWithoutWin() {
// A REVOIR let rules = TicTacToeRules(piecesToAlign: 3)
let rules = Connect4Rules(piecesToAlign: 4) var board = Board(rowsNb: 3, columnsNb: 3)
var board = Board()
board[0, 1] = .yellow
board[0, 0] = .red
XCTAssertFalse(rules.isGameOver(board: board).result)
// Remplir une grille complète sans qu'il y ait de victoire board[1, 1] = .yellow
for row in 0..<board.rowNb { board[0, 2] = .red
for col in 0..<board.columnNb { XCTAssertFalse(rules.isGameOver(board: board).result)
board[row, col] = (row + col) % 2 == 0 ? Token.red : Token.yellow
} board[1, 2] = .yellow
} board[1, 0] = .red
XCTAssertFalse(rules.isGameOver(board: board).result)
board[2, 0] = .yellow
board[2, 1] = .red
XCTAssertFalse(rules.isGameOver(board: board).result)
board[2, 2] = .yellow
// Personne ne gagne, mais la partie est terminée // Personne ne gagne, mais la partie est terminée
XCTAssertTrue(rules.isGameOver(board: board).result) let isGameOver = rules.isGameOver(board: board)
XCTAssertEqual(rules.isGameOver(board: board).winner, Token.empty) XCTAssertTrue(isGameOver.result)
}*/ XCTAssertEqual(isGameOver.winner, Token.empty)
}
func testVertical() { func testVertical() {
let rules = Connect4Rules(piecesToAlign: 4) let rules = Connect4Rules(piecesToAlign: 4)
var board = Board() var board = Board()
@ -53,46 +64,44 @@ final class IsGameOverTest: XCTestCase {
board[3, 0] = Token.red board[3, 0] = Token.red
// Le rouge gagne // Le rouge gagne
XCTAssertTrue(rules.isGameOver(board: board).result) let isGameOver = rules.isGameOver(board: board)
XCTAssertEqual(rules.isGameOver(board: board).winner, Token.red) XCTAssertTrue(isGameOver.result)
XCTAssertEqual(isGameOver.winner, Token.red)
} }
/*func testDiagonalAscending() { func testDiagonalDescending() {
let rules = Connect4Rules(piecesToAlign: 4) let rules = TicTacToeRules(piecesToAlign: 3)
var board = Board() var board = Board(rowsNb: 3, columnsNb: 3)
// Placer les jetons pour une victoire diagonale ascendante // Placer les jetons pour une victoire diagonale ascendante
board[0, 0] = Token.red board[2, 0] = Token.red
board[1, 1] = Token.yellow board[2, 1] = Token.yellow
board[1, 0] = Token.red
board[2, 2] = Token.yellow board[1, 1] = Token.red
board[2, 1] = Token.red board[0, 0] = Token.yellow
board[3, 3] = Token.yellow
board[3, 2] = Token.red board[0, 2] = Token.red
board[3, 1] = Token.yellow
board[3, 0] = Token.red
// Rouge gagne ici // Rouge gagne ici
XCTAssertTrue(rules.isGameOver(board: board).result) let isGameOver = rules.isGameOver(board: board)
XCTAssertEqual(rules.isGameOver(board: board).winner, Token.red) XCTAssertTrue(isGameOver.result)
}*/ XCTAssertEqual(isGameOver.winner, Token.red)
}
/*func testDiagonalDescending() { func testDiagonalAscending() {
let rules = Connect4Rules(piecesToAlign: 4) let rules = TicTacToeRules(piecesToAlign: 3)
var board = Board() var board = Board(rowsNb: 3, columnsNb: 3)
// Placer les jetons pour une victoire diagonale descendante // Placer les jetons pour une victoire diagonale descendante
board[3, 0] = Token.red board[0, 2] = .yellow
board[2, 1] = Token.yellow board[1, 2] = .red
board[2, 0] = Token.red
board[1, 2] = Token.yellow board[1, 1] = .yellow
board[1, 1] = Token.red board[0, 0] = .red
board[0, 3] = Token.yellow
board[0, 2] = Token.red
board[0, 1] = Token.yellow
board[0, 0] = Token.red
board[2, 0] = .yellow
// Rouge gagne ici // Rouge gagne ici
XCTAssertTrue(rules.isGameOver(board: board).result) let isGameOver = rules.isGameOver(board: board)
XCTAssertEqual(rules.isGameOver(board: board).winner, Token.red) XCTAssertTrue(isGameOver.result)
}*/ XCTAssertEqual(isGameOver.winner, Token.yellow)
}
} }

Loading…
Cancel
Save