type Effect = unit -> EffectResult
and EffectResult = GameState * AnOption list
resources : Resource list
possibleOptions : PossibleOption list
newGame : unit -> EffectResult
let lookupOptionTask ID =
fun (sl : string list) -> sl |> List.map(fun s ->s + " Option one!")
fun (sl : string list) -> sl |> List.map(fun s ->s + " Option two!")
let rec doEffect index gamestate optionID =
let task = (lookupOptionTask optionID)
let newResources = (task gamestate.resources)
gamestate.possibleOptions
|> List.mapi (fun i pOpt -> if i = index then {pOpt with optionState = UNDO} else pOpt)
let newGameState = {resources = newResources; possibleOptions = newPossibleOptions}
|> List.mapi(fun i opt -> {name = (i.ToString()); effect = doEffect i gamestate opt.optionID } )
(newGameState, newOptions)
let makeOptions gamestate :AnOption list =
gamestate.possibleOptions
|> List.mapi(fun i opt -> {name = (i.ToString()); effect = doEffect i gamestate opt.optionID } )
let newGame () :EffectResult=
let resources = ["Food = 10 (0)"; "Wood = 0 (+10)"; "Houses = 1 (0)"]
{optionID = 0; optionState = TODO}
{optionID = 0; optionState = TODO}
{optionID = 0; optionState = TODO}
{optionID = 1; optionState = TODO}
let gamestate = {resources = resources; possibleOptions = possibleOptions}
let options = makeOptions gamestate
let gamestate, options = newGame()
|> List.map (fun s -> printfn "%s" s)
let newGamestate, newOptions = (options.[3].effect())
|> List.map (fun s -> printfn "%s" s)