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