Tigerbot AI - Algorithm
-----------------------

The piece placement algorithm attempts to cover cases which require some
maneuvering of pieces around obstacles, which most commonly happens when a
block bomb goes off.  The AI moves the piece horizontally, then moves the piece
vertically, then potentially moves the piece horizontally again, before the
final drop.  The AI only tests such paths that are not blocked and that we
haven't tested already.  Each reasonable final state is evaluated using a
goodness function.  The implementation only looks at the current piece, not the
next piece; the present implementation is too slow for two-ply.

Originally the goodness function are taken from Colin Fahey's tetris program
(http://www.colinfahey.com/2003jan_tetris/2003jan_tetris.htm), although I made
the line completion weighting higher (since I think more eager line completion
is good in Tetrinet) and also looked at the specials that would be pulled into
the inventory, since e.g. we want to pick up bombs ASAP.  However in the end I
found harmless' goodness function worked better, so the final version uses
that.

The usage of specials is quite eager also.  If a special might be beneficial
then we use it immediately, else if there are more specials we drop that
special and move on, if we only have the one special we keep it until needed.
The only type that deserves special mention is the Switch special, which causes
it to "reverse" the search such that the bot chooses the worst moves, only when
the field is sufficiently high does it switch with another player.

