#include "Pieces.h" #include #include // exit() unsigned PieceHeight(const Piece &piece) { switch(piece) { case PIECE_ONE: return 2; break; case PIECE_TWO: return 4; break; case PIECE_THREE: return 4; break; case PIECE_FOUR: return 3; break; case PIECE_FIVE: return 3; break; case PIECE_SIX: return 2; break; case PIECE_SEVEN: return 3; break; case PIECE_EIGHT: return 3; break; } std::exit(-1); } void DrawPiece(const Piece &piece, int y, int x, Rotation rotation) { attrset(COLOR_PAIR(static_cast(piece) % 8)); switch(piece) { case PIECE_ONE: switch(rotation) { default: case ROTATION_NONE: case ROTATION_180: mvaddstr(y, x, "[][][]"); mvaddstr(y + 1, x, "[][][]"); break; case ROTATION_90: case ROTATION_270: mvaddstr(y, x, "[][]"); mvaddstr(y + 1, x, "[][]"); mvaddstr(y + 2, x, "[][]"); break; }; break; case PIECE_TWO: switch(rotation) { default: case ROTATION_NONE: mvaddstr(y, x, "[]"); mvaddstr(y + 1, x, "[][]"); mvaddstr(y + 2, x, "[]"); mvaddstr(y + 3, x, "[]"); break; case ROTATION_90: mvaddstr(y, x, "[][][][]"); mvaddstr(y + 1, x + 4, "[]"); break; case ROTATION_180: mvaddstr(y, x + 2, "[]"); mvaddstr(y + 1, x + 2, "[]"); mvaddstr(y + 2, x, "[][]"); mvaddstr(y + 3, x + 2, "[]"); break; case ROTATION_270: mvaddstr(y, x + 2, "[]"); mvaddstr(y + 1, x, "[][][][]"); break; }; break; case PIECE_THREE: switch(rotation) { default: case ROTATION_NONE: mvaddstr(y, x + 2, "[]"); mvaddstr(y + 1, x + 2, "[]"); mvaddstr(y + 2, x + 2, "[]"); mvaddstr(y + 3, x, "[][]"); break; case ROTATION_90: mvaddstr(y, x, "[]"); mvaddstr(y + 1, x, "[][][][]"); break; case ROTATION_180: mvaddstr(y, x, "[][]"); mvaddstr(y + 1, x, "[]"); mvaddstr(y + 2, x, "[]"); mvaddstr(y + 3, x, "[]"); break; case ROTATION_270: mvaddstr(y, x, "[][][][]"); mvaddstr(y + 1, x + 6, "[]"); break; }; break; case PIECE_FOUR: switch(rotation) { default: case ROTATION_NONE: mvaddstr(y, x, "[][]"); mvaddstr(y + 1, x, "[]"); mvaddstr(y + 2, x, "[][]"); break; case ROTATION_90: mvaddstr(y, x, "[][][]"); mvaddstr(y + 1, x, "[]"); mvaddstr(y + 1, x + 4, "[]"); // same line as above break; case ROTATION_180: mvaddstr(y, x, "[][]"); mvaddstr(y + 1, x + 2, "[]"); mvaddstr(y + 2, x, "[][]"); break; case ROTATION_270: mvaddstr(y, x, "[]"); mvaddstr(y, x + 4, "[]"); // same line as above mvaddstr(y + 1, x, "[][][]"); break; }; break; case PIECE_FIVE: switch(rotation) { default: case ROTATION_NONE: case ROTATION_180: mvaddstr(y, x, "[][]"); mvaddstr(y + 1, x + 2, "[]"); mvaddstr(y + 2, x + 2, "[][]"); break; case ROTATION_90: case ROTATION_270: mvaddstr(y, x + 4, "[]"); mvaddstr(y + 1, x, "[][][]"); mvaddstr(y + 2, x, "[]"); break; }; break; case PIECE_SIX: switch(rotation) { default: case ROTATION_NONE: mvaddstr(y, x, "[][]"); mvaddstr(y + 1, x + 2, "[][][]"); break; case ROTATION_90: mvaddstr(y, x + 2, "[]"); mvaddstr(y + 1, x, "[][]"); mvaddstr(y + 2, x, "[]"); mvaddstr(y + 3, x, "[]"); break; case ROTATION_180: mvaddstr(y, x, "[][][]"); mvaddstr(y + 1, x + 4, "[][]"); break; case ROTATION_270: mvaddstr(y, x + 2, "[]"); mvaddstr(y + 1, x + 2, "[]"); mvaddstr(y + 2, x, "[][]"); mvaddstr(y + 3, x, "[]"); break; }; break; case PIECE_SEVEN: switch(rotation) { default: case ROTATION_NONE: mvaddstr(y, x, "[][]"); mvaddstr(y + 1, x, "[][]"); mvaddstr(y + 2, x, "[]"); break; case ROTATION_90: mvaddstr(y, x, "[][][]"); mvaddstr(y + 1, x + 2, "[][]"); break; case ROTATION_180: mvaddstr(y, x + 2, "[]"); mvaddstr(y + 1, x, "[][]"); mvaddstr(y + 2, x, "[][]"); break; case ROTATION_270: mvaddstr(y, x, "[][]"); mvaddstr(y + 1, x, "[][][]"); break; }; break; case PIECE_EIGHT: switch(rotation) { default: case ROTATION_NONE: mvaddstr(y, x + 4, "[]"); mvaddstr(y + 1, x + 4, "[]"); mvaddstr(y + 2, x, "[][][]"); break; case ROTATION_90: mvaddstr(y, x, "[]"); mvaddstr(y + 1, x, "[]"); mvaddstr(y + 2, x, "[][][]"); break; case ROTATION_180: mvaddstr(y, x, "[][][]"); mvaddstr(y + 1, x, "[]"); mvaddstr(y + 2, x, "[]"); break; case ROTATION_270: mvaddstr(y, x, "[][][]"); mvaddstr(y + 1, x + 4, "[]"); mvaddstr(y + 2, x + 4, "[]"); break; }; break; default: std::exit(-1); break; } }