Down the Oregon trail with functional C# by Simon Painter

August 10, 2022

In 1971, three students from Minnesota thought they could liven up a history lecture by creating a computer game for the students to play, and after several days of work in HP Time Share BASIC, they came up with what turned out to be a significant milestone in the history of computer games – Oregon Trail.

Oregon Trail is often regarded as one of the first great computer games, as well as being the originator of a franchise that is still running to this day. It was effectively also one of the first instances of both Shareware and a Commercial home release of (depending on the version).

My interest though, isn’t just in historical computer games, it’s also .NET and Functional Programming. I want to use this as a worked example of one of my passions – Functional Programming in C#! The challenge I’ve set myself is to redevelop Oregon Trail into C# using the following restrictions:
* Near 100% unit test coverage
* No variables can change state once set
* No statements (for, foreach, if, where, etc.) unless there literally is no way of avoiding them

I’ll also be demonstrating a few of the tricks Functional Programming can offer, like Higher-order functions, functional flows with simple Monads and Tail Recursion. There should also be a bit of retro computing fun, while we’re at it.

Simon Painter
I code both professionally and – since it’s also my hobby – for fun as well. I’ve been coding professionally since I graduated from university in 2005, and for a hobby since I was old enough to read my Dad’s ZX Spectrum BASIC manual. I used to love those Usbourne books which were full of source code, accompanied by flashy 80s-tastic oil paintings of spaceships and monsters, as well as the accompanying source code for a game that, once entered into the machine, was somewhat less visually impressive.

Check out more from the MeetUp Func Prog Sweden. Func Prog Sweden is the community for anyone interested in functional programming. At the MeetUps the community explore different functional languages like Erlang, Elixir, Haskell, Scala, Clojure, OCaml, F# and more.