parent
060517b736
commit
53f9506de8
@ -0,0 +1,3 @@
|
||||
enum RulesType {
|
||||
case Classic
|
||||
}
|
@ -1,5 +1,45 @@
|
||||
import Foundation
|
||||
import Connect4Core
|
||||
import Connect4Players
|
||||
|
||||
class InGameVM: ObservableObject {
|
||||
private var game: Game
|
||||
|
||||
init?(settings: NewGameVM, player1: PlayerSettingsVM, player2: PlayerSettingsVM) {
|
||||
guard let rules = switch (settings.rulesType) {
|
||||
case .Classic:
|
||||
Connect4Rules(
|
||||
nbRows: Int(settings.width), nbColumns: Int(settings.height),
|
||||
nbPiecesToAlign: Int(settings.alignedTokens)
|
||||
)
|
||||
} else { return nil }
|
||||
|
||||
guard let player1 = Self.playerOf(settings: player1, id: .player1) else { return nil }
|
||||
guard let player2 = Self.playerOf(settings: player2, id: .player2) else { return nil }
|
||||
|
||||
self.game = try! Game(withRules: rules, andPlayer1: player1, andPlayer2: player2)
|
||||
|
||||
for player in [player1, player2] {
|
||||
(player as? HumanPlayer)?.changeInput(input: self.onMove)
|
||||
}
|
||||
}
|
||||
|
||||
private func onMove(player: HumanPlayer) -> Move? {
|
||||
fatalError("TODO")
|
||||
}
|
||||
|
||||
private static func playerOf(settings: PlayerSettingsVM, id: Owner) -> Player? {
|
||||
return switch (settings.type) {
|
||||
case .Human:
|
||||
HumanPlayer(withName: settings.name, andId: id, andInputMethod: {
|
||||
_ in fatalError("unreachable: \"uninitialized\" closure should be temporary")
|
||||
})
|
||||
case .AIRandom:
|
||||
RandomPlayer(withName: settings.name, andId: id)
|
||||
case .AIFinnishHim:
|
||||
FinnishHimPlayer(withName: settings.name, andId: id)
|
||||
case .AISimpleNegaMax:
|
||||
SimpleNegaMaxPlayer(withName: settings.name, andId: id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in new issue