Skip to content

Instantly share code, notes, and snippets.

View vikingosegundo's full-sized avatar

Manuel Meyer vikingosegundo

  • Groningen, Netherlands
View GitHub Profile
enum Empire {
case britain
case france
case germany
case russia
case ottoman
case austria
case italy
}
enum CoastKind{
class Board {
var territories: [Territory]
let borders:[Border]
enum Change {
case move(Move)
case hold(Territory, with:Unit, of:Empire)
enum Move{
case army(of:Empire, from:Territory, to:Territory)
case fleet(of:Empire, from:Territory, to:Territory)
}
let clyde = Territory(name:"Clyde" , kind:.land)
let edinburgh = Territory(name:"Edinburgh", kind:.land)
let liverpool = Territory(name:"Liverpool", kind:.land)
let yorkshire = Territory(name:"Yorkshire", kind:.land)
let wales = Territory(name:"Wales" , kind:.land)
let london = Territory(name:"London" , kind:.land)
let gb = [ clyde, edinburgh, liverpool, yorkshire, wales, london ]
let brest = Territory(name:"Brest" , kind:.land)
let picardy = Territory(name:"Picardy" , kind:.land)
let paris = Territory(name:"Paris" , kind:.land)
let gascony = Territory(name:"Gascony" , kind:.land)
let burgundy = Territory(name:"Burgundy" , kind:.land)
let marseilles = Territory(name:"Marseilles", kind:.land)
let france = [ brest, picardy, paris, gascony, burgundy, marseilles]
let connectionsGB: [Border] = [
.land(clyde, edinburgh),
.land(clyde, liverpool),
.land(edinburgh, liverpool),
.land(edinburgh, yorkshire),
.land(yorkshire, wales ),
.land(yorkshire, london ),
]
let connectionsFrance: [Border] = [
.land(brest, picardy ),
let b = Board(territories:territories, borders:borders)
print(board:b);
b.execute( .move( .army(of:.germany,from:berlin, to:silesia)) )
b.execute( .move( .army(of:.germany,from:ruhr, to:holland)) )
b.execute( .move(.fleet(of:.britain,from:midatlantic,
to:westernmediterrean)) )
b.execute( .move( .army(of:.germany,from:silesia, to:galicia)) )
b.execute( .move( .army(of:.germany,from:holland, to:belgium)) )
b.execute( .move(.fleet(of:.britain,from:westernmediterrean,
Ruhr (army: germany)
Berlin (army: germany)
Mid-Atlantic (fleet: britain)
------
Constantinople (army: germany)
Belgium (army: germany)
Aegean Sea (fleet: britain)
------
// MARK: - Tape
enum Value <T:Equatable>: Equatable { case value(T), unset }
typealias Step = () -> ()
typealias Read<T:Equatable> = () -> Value<T>
typealias Write<T:Equatable> = (T?) -> ()
typealias Tape<T:Equatable> = (stepBack:Step, stepForward:Step, read:Read<T>, write:Write<T>, print:() -> ())
struct TapeState<T:Equatable> {
enum Change {
case cursor(Cursor)
roothandler( .lighting(.change(.display(.slider), on:light)) )