start players logic

master
Adam BONAFOS 3 days ago
parent 552c8b2c87
commit 908107ae3e

@ -12,7 +12,7 @@ public struct Board {
let columnNb: Int
var grid: [[Token]]
init(rowsNb: Int = 6, columnsNb: Int = 7) {
public init(rowsNb: Int = 6, columnsNb: Int = 7) {
rowNb = rowsNb
columnNb = columnsNb
grid = Array(repeating: Array(repeating: Token.empty, count: columnsNb), count: rowsNb)

@ -10,11 +10,11 @@ public struct Connect4Rules : Rules {
let piecesToAlign: Int
init(piecesToAlign: Int) {
public init(piecesToAlign: Int) {
self.piecesToAlign = piecesToAlign
}
func add(board: inout Board, position pos: (row: Int, column: Int), token: Token) -> Bool {
public func add(board: inout Board, position pos: (row: Int, column: Int), token: Token) -> Bool {
var currentRowNb = 0;
for var row in board.grid {
if row[pos.column] != Token.empty && currentRowNb != 0 {
@ -26,7 +26,7 @@ public struct Connect4Rules : Rules {
return false
}
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
let maxRow = board.rowNb
let maxCol = board.columnNb
@ -95,4 +95,20 @@ public struct Connect4Rules : Rules {
return true
}
func possibleMoves(board: Board) -> [(row: Int, column: Int)] {
var possibleMoves: [(Int, Int)] = []
for column in 0..<board.columnNb {
// Trouver la première case vide en partant du bas de la colonne
for row in (0..<board.rowNb).reversed() {
if board[row, column] == Token.empty {
possibleMoves.append((row, column)) // Ajouter la position (row, column)
break // Une fois trouvé, on passe à la colonne suivante
}
}
}
return possibleMoves
}
}

@ -7,7 +7,26 @@
import Foundation
class HumanPlayer : Player {
// Propriété CLI de type closure
var CLI: ((String) -> String)?
// Initialisation avec la closure CLI
init(CLI: @escaping (String) -> String) {
self.CLI = CLI
super.init()
}
override func play() -> (row: Int, column: Int) {
return (0, 0)
// Demande la colonne à l'utilisateur
let columnInput = CLI!("Entrez le numéro de la colonne : ")
guard let column = Int(columnInput) else {
fatalError("Entrée invalide pour la colonne.")
}
// Demande la ligne à l'utilisateur
let rowInput = CLI!("Entrez le numéro de la ligne : ")
guard let row = Int(rowInput) else {
fatalError("Entrée invalide pour la ligne.")
}
return (row, column)
}
}

@ -7,7 +7,14 @@
import Foundation
class Player {
var name: String = ""
var name: String
var color: Token
var rules: Rules
init(rules: Rules, color: Token, name: String){
self.name = name
self.color = color
self.rules = rules
}
func play() -> (row: Int, column: Int){
fatalError("Must override in subclass")
}

@ -9,4 +9,5 @@ import Foundation
protocol Rules {
func add(board: inout Board, position pos: (row: Int, column: Int), token: Token) -> Bool
func isGameOver(board: Board) -> (result: Bool, winner: Token)
func possibleMoves(board: Board) -> [(row: Int, column: Int)]
}

@ -6,7 +6,7 @@
//
import Foundation
enum Token {
public enum Token {
case empty
case red
case yellow

Loading…
Cancel
Save