Awesome
ElmOthello
the well known Othello game using Elm
<a href='http://carstenkoenig.github.io/ElmOthello' target='_blank'></a>
You can play the game here
Basics
All the basic modelling is inside the Othello module and Main implements some very basic display using
Div
s with columns of Svg
elements (TODO add turn animations of some sort).
The game right now assumes White (first player) to be the human and moves the black computer-AI right after (as I could not
figure out if or how I can do long-running background processing with a Task
or something similar).
AI
The AI is based on version of the Minimax algorithm implemented in the MiniMax module.
The heuristic used in there is based on a very simple positional evaluation (implemented in the AI module) - basically it values the corners very high, the cells around the corner very low (indeed negative), all the edges and the center cells high, ...
coordValues =
[ [ 10, -5, 6, 5, 5, 6, -5, 10 ]
, [ -5, -8, -4, -4, -4, -4, -8, -5 ]
, [ 6, -4, 2, 3, 3, 2, -4, 6 ]
, [ 5, -4, 3, 4, 4, 3, -4, 6 ]
, [ 5, -4, 3, 4, 4, 3, -4, 6 ]
, [ 6, -4, 2, 3, 3, 2, -4, 6 ]
, [ -5, -8, -4, -4, -4, -4, -8, -5 ]
, [ 10, -5, 6, 5, 5, 6, -5, 10 ]
]
and will evaluate the algorithm to a depth of 3
(which yields quick answer times but is not really hard to beat).
If you want a stronger AI you probably will have to add some advanced strategy like valuing stone-count more at the end of the game, valuing possible move-counts, pref switching few stones at the beginning etc.
It's a fun task to make those algorithms better.
Of course you can try to implement alpha-beta prunning too - which I might or might not do myself in the future.