Added missing specification and implementation of tile.is_skull()
Respecified and reimplemented Actor in a less complicated way that is
also easier and more reliable for inheritance.
Respecified and reimplemented Transitions to be more simple.
Addition to parsing of board string so it can handle white space around each line.
committing parts missed from changing Transition to simplified version.
Found and added missing specification for Tile singleton classmethod.
Reduced size of random tile generation spec.
Added anvil and scroll for special games to base Tile so that Board etc.
can be simplified and not require storing the Tile class to be
overridden.
Removed skullbombs from random Tile distribution to reduce computation.
Minor reduction of simulation accuracy for a potentially large reduction
in computation (lots of possibilities introduced by randomly filling
the hole caused by a skull bomb).
Tile comments to clarify class attributes.
Respecification and reimplementation of state, actor, transitions.
Mostly simplified design so there is less need for inheritance.
Also removed simulation responsibility from the state which has become
more of a simple container and simulation node.
Finally, changed design to directly inherit from TreeNode. Probably better
if TreeNode was made as a mixin but that's how it is for now.
Cleanup before moving to specification of game.
Completed respecification and implementation of Game, State and
Transitions. Now game is more of a tool that can be used in specific
game types. Biggest difference is accepting a state or eot and then
completing exactly one turn but only for that given node. Not the whole
tree.
Added and confirmed missed specification for filtering during chain reactions.
For consistency, renamed anything manadrain to "mana drain" or "mana_drain"
Coverage revealed missing specification and implementation for manadrain
replacing the board with an random, full, stable start board. Specified
and implemented it.
Reimplemented board position iterator (which is used tens of millions
of times with something hopefully more efficient. numpy.ndenumerate.
At least it's easier to read.
renamed test folder from unit to integration. These are obviously not
unit tests.... one day I'll bother writing them. Maybe.