Dropping Blocks is a falling blocks game that I developed as a warmup for Ludum Dare 37. Drop the blocks and complete the lines to add to your score.
I took a different approach when developing this game, as I did not create a board structure to hold the blocks. Each of the blocks is just a Unity GameObject, with a Block script attached which contains its row, column, and center offset for handling rotations.
Every time a piece is dropped, it checks all of the other pieces to determine if any of the blocks are directly below any of the blocks in the actively dropping piece. If so, then the status of all of the blocks in the currently dropping piece are set to “not dropping” and a new piece is generated. The downside to this approach is that all of the blocks must be checked every time a block lands. It may be improved by creating a hash structure using the rows as keys, so that only the blocks in the row below the piece will be checked.
A piece is generated by generating a random number from 0 to 6 and instantiating the block in the arrangement for that piece. An array of Materials holds all of the colors of the pieces, and is assigned to the block based on the piece types.
The line check code loops through each line index, and then determines if there are blocks at every column in the line. This is also inefficient, since all of the blocks have to be checked to determine if a block is in each column for the row. Again, a hash table structure may make this more efficient for checking the row and eliminate some of the unnecessary looping. When I play the game in the Unity editor, there is a noticeable delay when a block lands. However, in the Windows build the delay is not apparent so there may be some optimizations made for the Windows build.