module TwentyFortyEight
Overview
This is the main container that allows you to interact with the underlying
Game struct, it provides two simple methods to allow
for automatic gameplay and controlling gameplay using a block. Sizes of #sample
games are defined by SIZE which in turn can be defined on the
command line, see Options or 2048 -h for more information
Extended Modules
Defined in:
twenty_forty_eight.crtwenty_forty_eight/game.cr
twenty_forty_eight/options.cr
twenty_forty_eight/version.cr
Constant Summary
-
VERSION =
"0.1.0"
Class Method Summary
Instance Method Summary
- #sample(*args)
-
#sample(*args, &)
Same as
#sample(*args)but plays the game with provided block, the game is the receiver of methods within the supplied block.
Class Method Detail
Instance Method Detail
Returns a finished Game with a Board of specified size Int32 or input Array(Array(Int32))
If no arguments are given, a Board will be initialized with a default size of 4 and 2 values
will be inserted a random #empty positions on the board. If an input board is specified by supplying
a Array(Array(Int32)) then no values will be inserted prior to playing the game.
NOTE This means that if a board containing only 0 as values for all fields is passed, the game will never end.
This happens because the #over? method short circuits when the board isn't full and because of the fact that
for a value to be inserted, the board has to have change? which it will not have when only moving empty values.
Finished simply means Game#over?, the game is played automatically
by trying each move in order: Game#down, Game#left, Game#right and finally Game#up.
This process is repeated until no more moves are possible.
puts TwentyFortyEight.sample.score
Will output:
1234
Same as #sample(*args) but plays the game with provided block, the game is the receiver of methods within the supplied block.
you are responsible for calling Game#move with one of :left, :right, :up and :down or
a directional move e.g. Game#down, Game#left, Game#right or Game#up.
A game ends automatically once Game#over? is true.
An example that matches the regular #sample:
puts TwentyFortyEight.sample { down || left || right || up }.score
Will output:
4052
A call to any of the available moves in a game will return it's direction as a Symbol if successful
This means you can find out per move, which direction was moved using:
TwentyFortyEight.sample { moved = down || left || right || up; puts moved }
Will output
left
right
down
down
... snipped ...
up
also, getters such as Game#size and Game#board are callable from within the block.
What they represent is up to you, depending on wether you call these before or after
you've executed a successful move.