This is a remake of tetris game for mbed. Please see detail here http://developer.mbed.org/users/sucrelv/notebook/tetris-game-on-mbed
Dependencies: 4DGL-uLCD-SE PinDetect SDFileSystem mbed-rtos mbed wave_player
Pieces.cpp
- Committer:
- sucrelv
- Date:
- 2014-10-21
- Revision:
- 0:3b5e97ab5884
File content as of revision 0:3b5e97ab5884:
#include "Pieces.h" // Pieces definition char mPieces [7 /*kind */ ][4 /* rotation */ ][5 /* horizontal blocks */ ][5 /* vertical blocks */ ] = { // Square { { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 1, 0}, {0, 0, 1, 1, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 1, 0}, {0, 0, 1, 1, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 1, 0}, {0, 0, 1, 1, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 1, 0}, {0, 0, 1, 1, 0}, {0, 0, 0, 0, 0} } }, // I { { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 1, 2, 1, 1}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {1, 1, 2, 1, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0} } } , // L { { {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 1, 1, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 1, 2, 1, 0}, {0, 1, 0, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 1, 1, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 0, 1, 0}, {0, 1, 2, 1, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} } }, // L mirrored { { {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 2, 0, 0}, {0, 1, 1, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 1, 0, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 1, 1, 0}, {0, 0, 2, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 0, 1, 0}, {0, 0, 0, 0, 0} } }, // N { { {0, 0, 0, 0, 0}, {0, 0, 0, 1, 0}, {0, 0, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 1, 2, 0, 0}, {0, 0, 1, 1, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 0, 0}, {0, 1, 0, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 1, 1, 0, 0}, {0, 0, 2, 1, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} } }, // N mirrored { { {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 2, 1, 0}, {0, 0, 0, 1, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 1, 0}, {0, 1, 1, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 1, 0, 0, 0}, {0, 1, 2, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 1, 1, 0}, {0, 1, 2, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} } }, // T { { {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0} }, { {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} } } }; // Displacement of the piece to the position where it is first drawn in the board when it is created int mPiecesInitialPosition [7 /*kind */ ][4 /* rotation */ ][2 /* position */] = { /* Square */ { {-2, -3}, {-2, -3}, {-2, -3}, {-2, -3} }, /* I */ { {-2, -2}, {-2, -3}, {-2, -2}, {-2, -3} }, /* L */ { {-2, -3}, {-2, -3}, {-2, -3}, {-2, -2} }, /* L mirrored */ { {-2, -3}, {-2, -2}, {-2, -3}, {-2, -3} }, /* N */ { {-2, -3}, {-2, -3}, {-2, -3}, {-2, -2} }, /* N mirrored */ { {-2, -3}, {-2, -3}, {-2, -3}, {-2, -2} }, /* T */ { {-2, -3}, {-2, -3}, {-2, -3}, {-2, -2} }, }; /* ====================================== Return the type of a block (0 = no-block, 1 = normal block, 2 = pivot block) Parameters: >> pPiece: Piece to draw >> pRotation: 1 of the 4 possible rotations >> pX: Horizontal position in blocks >> pY: Vertical position in blocks ====================================== */ int Pieces::GetBlockType (int pPiece, int pRotation, int pX, int pY) { return mPieces [pPiece][pRotation][pX][pY]; } /* ====================================== Returns the horizontal displacement of the piece that has to be applied in order to create it in the correct position. Parameters: >> pPiece: Piece to draw >> pRotation: 1 of the 4 possible rotations ====================================== */ int Pieces::GetXInitialPosition (int pPiece, int pRotation) { return mPiecesInitialPosition [pPiece][pRotation][0]; } /* ====================================== Returns the vertical displacement of the piece that has to be applied in order to create it in the correct position. Parameters: >> pPiece: Piece to draw >> pRotation: 1 of the 4 possible rotations ====================================== */ int Pieces::GetYInitialPosition (int pPiece, int pRotation) { return mPiecesInitialPosition [pPiece][pRotation][1]; }