Winning Pattern Detection
Another method would be to check the board as each piece is added. This has an advantage of real time checking, but requires looping through the whole board.  Also you could use a Dictionary&lt;Piece, int&gt; to keep track of which pieces are added and check that instead of the board array.  Using the ContainsKey eliminates extra looping but requires an extra collection.