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)] + } +}