Skip to content

Instantly share code, notes, and snippets.

@vikingosegundo
Created October 5, 2021 13:33
Show Gist options
  • Save vikingosegundo/2d94fca16ed4e6bedc387c62682dfbcb to your computer and use it in GitHub Desktop.
Save vikingosegundo/2d94fca16ed4e6bedc387c62682dfbcb to your computer and use it in GitHub Desktop.
enum Empire {
case britain
case france
case germany
case russia
case ottoman
case austria
case italy
}
enum CoastKind{
case unified
case fragmented([(String, [Territory])])
}
struct Territory {
init(name:String, kind:Kind, occupiedBy:Unit? = nil) {
self.name = name
self.kind = kind
self.occupiedBy = occupiedBy
}
enum Kind {case land, sea}
let name:String
let kind: Kind
let occupiedBy:Unit?
enum Change { case occupy(Unit?) }
func execute(_ change: Change) -> Self {
switch change {
case .occupy(let unit): return .init(name: name, kind: kind, occupiedBy: unit)
}
}
}
enum Border {
case land (Territory, Territory)
case coastal(Territory, Territory, CoastKind)
case sea (Territory, Territory)
case channel(Territory)
}
enum Unit:Equatable {
case army(Empire)
case fleet(Empire)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment