From f1fab2ec5a01ecf945dccd8ff7e1a1478e904fb3 Mon Sep 17 00:00:00 2001 From: Mathieu GROUSSEAU Date: Sat, 25 Jan 2025 10:41:45 +0100 Subject: [PATCH] Player(s) classes --- Model/Sources/Model/Players/AIPlayer.swift | 3 +++ Model/Sources/Model/Players/HumanPlayer.swift | 15 +++++++++++++++ Model/Sources/Model/Players/Player.swift | 11 +++++++++++ Model/Sources/Model/Players/RandomPlayer.swift | 5 +++++ 4 files changed, 34 insertions(+) create mode 100644 Model/Sources/Model/Players/AIPlayer.swift create mode 100644 Model/Sources/Model/Players/HumanPlayer.swift create mode 100644 Model/Sources/Model/Players/Player.swift create mode 100644 Model/Sources/Model/Players/RandomPlayer.swift diff --git a/Model/Sources/Model/Players/AIPlayer.swift b/Model/Sources/Model/Players/AIPlayer.swift new file mode 100644 index 0000000..c328689 --- /dev/null +++ b/Model/Sources/Model/Players/AIPlayer.swift @@ -0,0 +1,3 @@ +public class AIPlayer : Player { + +} diff --git a/Model/Sources/Model/Players/HumanPlayer.swift b/Model/Sources/Model/Players/HumanPlayer.swift new file mode 100644 index 0000000..95ebf89 --- /dev/null +++ b/Model/Sources/Model/Players/HumanPlayer.swift @@ -0,0 +1,15 @@ +public typealias MoveCallback = ([Move.Action], Board) -> Move.Action + +public class HumanPlayer : Player { + private let callback: MoveCallback + + public init(name: String, callback: @escaping MoveCallback) { + self.callback = callback + + super.init(name: name) + } + + public override func chooseMove(allowed_moves moves: [Move.Action], board: Board) -> Move.Action { + callback(moves, board) + } +} diff --git a/Model/Sources/Model/Players/Player.swift b/Model/Sources/Model/Players/Player.swift new file mode 100644 index 0000000..c4e1c54 --- /dev/null +++ b/Model/Sources/Model/Players/Player.swift @@ -0,0 +1,11 @@ +public class Player { + public let name: String + + init(name: String) { + self.name = name + } + + public func chooseMove(allowed_moves moves: [Move.Action], board: Board) -> Move.Action { + fatalError("abstract method not implemented") + } +} diff --git a/Model/Sources/Model/Players/RandomPlayer.swift b/Model/Sources/Model/Players/RandomPlayer.swift new file mode 100644 index 0000000..eaa7ce1 --- /dev/null +++ b/Model/Sources/Model/Players/RandomPlayer.swift @@ -0,0 +1,5 @@ +public class RandomPlayer : Player { + public override func chooseMove(allowed_moves moves: [Move.Action], board: Board) -> Move.Action { + moves[Int.random(in: moves.indices)] + } +}