2008-12-03 05:40:16 +00:00
|
|
|
#ifndef TETRIS_PIECE_H_
|
|
|
|
#define TETRIS_PIECE_H_
|
|
|
|
|
|
|
|
#include <inttypes.h>
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/**
|
|
|
|
* \defgroup TetrisPieceTypes Piece: Data types
|
|
|
|
*/
|
|
|
|
/*@{*/
|
2008-12-03 05:40:16 +00:00
|
|
|
|
|
|
|
/*********
|
|
|
|
* types *
|
|
|
|
*********/
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/** shape attributes for a piece */
|
2008-12-03 05:40:16 +00:00
|
|
|
typedef enum tetris_piece_shape_t
|
|
|
|
{
|
2010-04-01 03:11:59 +00:00
|
|
|
TETRIS_PC_LINE, /**< the I shaped brick */
|
|
|
|
TETRIS_PC_T, /**< the T shaped brick */
|
|
|
|
TETRIS_PC_SQUARE, /**< the sqare shaped brick */
|
|
|
|
TETRIS_PC_L, /**< the L shaped brick */
|
|
|
|
TETRIS_PC_LBACK, /**< the reverse L shaped brick */
|
|
|
|
TETRIS_PC_S, /**< the S shaped brick */
|
|
|
|
TETRIS_PC_Z /**< the Z shaped brick */
|
2008-12-03 05:40:16 +00:00
|
|
|
}
|
|
|
|
tetris_piece_shape_t;
|
|
|
|
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/** possible angles for a brick */
|
2008-12-03 05:40:16 +00:00
|
|
|
typedef enum tetris_piece_angle_t
|
|
|
|
{
|
2010-04-01 03:11:59 +00:00
|
|
|
TETRIS_PC_ANGLE_0, /**< standard angle */
|
|
|
|
TETRIS_PC_ANGLE_90, /**< rotated by 90 degrees */
|
|
|
|
TETRIS_PC_ANGLE_180, /**< rotated by 180 degrees */
|
|
|
|
TETRIS_PC_ANGLE_270 /**< rotated by 270 degrees */
|
2008-12-03 05:40:16 +00:00
|
|
|
}
|
|
|
|
tetris_piece_angle_t;
|
|
|
|
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/** rotation attributes */
|
2008-12-03 05:40:16 +00:00
|
|
|
typedef enum tetris_piece_rotation_t
|
|
|
|
{
|
2010-04-01 03:11:59 +00:00
|
|
|
TETRIS_PC_ROT_CW, /**< clockwise rotation */
|
|
|
|
TETRIS_PC_ROT_CCW /**< counter clockwise rotation */
|
2008-12-03 05:40:16 +00:00
|
|
|
}
|
|
|
|
tetris_piece_rotation_t;
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/**
|
|
|
|
* describes the attributes of a piece
|
|
|
|
* @see tetris_piece_shape_t
|
|
|
|
* @see tetris_piece_angle_t
|
|
|
|
*/
|
2008-12-03 05:40:16 +00:00
|
|
|
typedef struct tetris_piece_t
|
|
|
|
{
|
2010-04-01 03:11:59 +00:00
|
|
|
tetris_piece_shape_t shape; /**< specifies the shape of the piece */
|
|
|
|
tetris_piece_angle_t angle; /**< specifies one of 4 angels */
|
2008-12-03 05:40:16 +00:00
|
|
|
}
|
|
|
|
tetris_piece_t;
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/*@}*/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \defgroup TetrisPieceRelated Piece: Interface functions
|
|
|
|
*/
|
|
|
|
/*@{*/
|
2008-12-03 05:40:16 +00:00
|
|
|
|
|
|
|
/*****************************
|
|
|
|
* construction/destruction *
|
|
|
|
*****************************/
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/**
|
|
|
|
* constructs a piece with the given attributes
|
|
|
|
* @param s shape of the piece (see tetris_piece_shape_t)
|
|
|
|
* @param a its angle (see tetris_piece_angel_t)
|
|
|
|
* @return pointer to a newly created piece
|
2008-12-03 05:40:16 +00:00
|
|
|
*/
|
|
|
|
tetris_piece_t *tetris_piece_construct(tetris_piece_shape_t s,
|
|
|
|
tetris_piece_angle_t a);
|
|
|
|
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/**
|
|
|
|
* destructs a piece
|
|
|
|
* @param pPc pointer to the piece to be destructed
|
2008-12-03 05:40:16 +00:00
|
|
|
*/
|
|
|
|
void tetris_piece_destruct(tetris_piece_t *pPc);
|
|
|
|
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/***************************
|
|
|
|
* piece related functions *
|
|
|
|
***************************/
|
2008-12-03 05:40:16 +00:00
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/**
|
|
|
|
* returns bitfield representation of the piece
|
|
|
|
* @param pPc piece from which the bitfield shuld be retrieved
|
|
|
|
* @return bitfield representation of the piece
|
2008-12-03 05:40:16 +00:00
|
|
|
*/
|
|
|
|
uint16_t tetris_piece_getBitmap(tetris_piece_t *pPc);
|
|
|
|
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/**
|
|
|
|
* rotates a piece
|
|
|
|
* @param pPc piece to rotate
|
|
|
|
* @param r type of rotation (see tetris_piece_rotation_t)
|
2008-12-03 05:40:16 +00:00
|
|
|
*/
|
|
|
|
void tetris_piece_rotate(tetris_piece_t *pPc,
|
|
|
|
tetris_piece_rotation_t r);
|
|
|
|
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/**
|
|
|
|
* changes the shape of a piece
|
|
|
|
* @param pPc piece to change
|
|
|
|
* @param shape the shape of interest
|
2009-10-31 15:15:00 +00:00
|
|
|
*/
|
2010-04-01 03:11:59 +00:00
|
|
|
void tetris_piece_setShape(tetris_piece_t *pPc,
|
|
|
|
tetris_piece_shape_t shape);
|
2009-10-31 15:15:00 +00:00
|
|
|
|
2008-12-03 05:40:16 +00:00
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/**
|
|
|
|
* changes the angle of a piece
|
|
|
|
* @param pPc piece to change
|
|
|
|
* @param angle the angle of interest
|
2009-11-06 02:22:11 +00:00
|
|
|
*/
|
2010-04-01 03:11:59 +00:00
|
|
|
void tetris_piece_setAngle(tetris_piece_t *pPc,
|
|
|
|
tetris_piece_angle_t angle);
|
2009-11-06 02:22:11 +00:00
|
|
|
|
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/**
|
|
|
|
* returns the number of different angles
|
|
|
|
* @param pPc piece whose angle count we want to know
|
|
|
|
* @return number of different angles
|
2009-11-06 02:22:11 +00:00
|
|
|
*/
|
2010-04-01 03:11:59 +00:00
|
|
|
int8_t tetris_piece_getAngleCount(tetris_piece_t *pPc);
|
2009-11-06 02:22:11 +00:00
|
|
|
|
2010-04-01 03:11:59 +00:00
|
|
|
/*@}*/
|
2009-11-06 02:22:11 +00:00
|
|
|
|
|
|
|
#endif /*TETRIS_PIECE_H_*/
|