1. Game Movement
1.1. All functions will take a tetra, return a tetra
1.1.1. tetra-next: returns tetra 1 block lower
1.1.2. tetra-rotate-left: returns tetra rotated left
1.1.3. tetra-rotate-right: returns tetra rotated right
1.1.4. tetra-move-left: returns tetra moved 1 block left
1.1.5. tetra-move-right: returns tetra moved 1 block right
2. Rendering
2.1. Abstract per block?
2.2. Foldr
3. Types of Collisions (return Booleans
3.1. Collision1
3.1.1. Tetra hits ground, added to pile
3.1.1.1. Comparing Tetra, World-Size
3.1.2. Tetra hits list of blocks, added to pile
3.1.2.1. Comparing Tetra, Pile
3.2. Collision2
3.2.1. Tetra hits the wall
3.2.1.1. comparing tetra, world-size
3.3. Collision3
3.3.1. Tetra hits other blocks, left and right
3.3.1.1. comparing tetra, pile
3.4. Collision4
3.4.1. rotating tetra hits a block
3.4.1.1. comparing tetra, pile
3.5. collision?
3.5.1. Takes tetra, pile, name of function to run
3.5.1.1. Runs function on tetra, compares to pile and world-size
3.5.1.2. Ex. functions: tetra-next, tetra-rotate, etc.
4. Functions
4.1. Function to compare two lists of blocks (blockl-compare)
5. End-game?
6. Game Elements
7. Collisions
7.1. Check whether block row is filled
7.2. Check whether piece is 'cemented' in
7.2.1. aka, whether the next block position is filled?
7.3. Check whether block is in the way, can't move into it
7.3.1. can-move-left?
7.3.2. can-move-right?
7.3.3. can-rotate-left?
7.3.4. can-rotate-right?