#ifndef TETRIS_PIECE_H_ #define TETRIS_PIECE_H_ #include /********* * types * *********/ typedef enum tetris_piece_shape_t { TETRIS_PC_LINE, TETRIS_PC_T, TETRIS_PC_SQUARE, TETRIS_PC_L, TETRIS_PC_LBACK, TETRIS_PC_S, TETRIS_PC_Z } tetris_piece_shape_t; typedef enum tetris_piece_angle_t { TETRIS_PC_ANGLE_0, TETRIS_PC_ANGLE_90, TETRIS_PC_ANGLE_180, TETRIS_PC_ANGLE_270 } tetris_piece_angle_t; typedef enum tetris_piece_rotation_t { TETRIS_PC_ROT_CW, // clockwise rotation TETRIS_PC_ROT_CCW // counter clockwise rotation } tetris_piece_rotation_t; typedef struct tetris_piece_t { tetris_piece_shape_t shape; // specifies the shape of the piece tetris_piece_angle_t angle; // specifies one of 4 angels } tetris_piece_t; /***************************** * construction/destruction * *****************************/ /* Function: tetris_piece_construct * Description: constructs a piece with the given attributes * Argument s: shape of the piece (see tetris_piece_shape_t) * Argument a: its angle (see tetris_piece_angel_t) * Return value: pointer to a newly created piece */ tetris_piece_t *tetris_piece_construct(tetris_piece_shape_t s, tetris_piece_angle_t a); /* Function: tetris_piece_destruct * Description: destructs a piece * Argument pPc: pointer to the piece to be destructed * Return value: void */ void tetris_piece_destruct(tetris_piece_t *pPc); /**************************** * piece related functions * ****************************/ /* Function: tetris_piece_getBitmap * Description: returns bitfield representation of the piece * Argument pPc: piece from which the bitfield shuld be retrieved * Return value: bitfield representation of the piece * - nth nibble is nth row of the piece (from upper left) * - the LSB of a nibble represents the left side of a row */ uint16_t tetris_piece_getBitmap(tetris_piece_t *pPc); /* Function: tetris_piece_rotate * Description: rotates a piece * Argument pPc: piece to rotate * Argument r: type of rotation (see tetris_piece_rotation_t) * Return value: void */ void tetris_piece_rotate(tetris_piece_t *pPc, tetris_piece_rotation_t r); #endif /*TETRIS_PIECE_H_*/