ColorVal static inline get_max_i(int par, ColorVal y) { assert(y >= get_min_y(par)); assert(y <= get_max_y(par)); if (y<par-1) { return 4*par+2+4*y; } else if (y>=3*par) { return 8*par-5-4*(y-3*par); } else { return 8*par-2; } }
ColorVal static inline get_max_q(int par, ColorVal y, ColorVal i) { assert(y >= get_min_y(par)); assert(y <= get_max_y(par)); if (i < get_min_i(par,y)) return -1; //invalid value if (i > get_max_i(par,y)) return -1; //invalid value assert(i >= get_min_i(par,y)); assert(i <= get_max_i(par,y)); if (y<par-1) { return 4*par+2*y; } else if (y>=3*par) { return 4*par-1+2*(4*par-1-y)-((1+abs(i-4*par+1))/2)*2; } else { return (std::min)(6*par-2+(y-par+1)*2, 6*par-1+(3*par-1-y)*2-((1+abs(i-4*par+1))/2)*2); } }
ColorVal static inline get_min_q(int par, ColorVal y, ColorVal i) { assert(y >= get_min_y(par)); assert(y <= get_max_y(par)); if (i < get_min_i(par,y)) return 8*par; //invalid value if (i > get_max_i(par,y)) return 8*par; //invalid value assert(i >= get_min_i(par,y)); assert(i <= get_max_i(par,y)); if (y<par-1) { return 4*par-2-2*y+(abs(i-4*par+1)/2)*2; } else if (y>=3*par) { return 4*par-1-2*(4*par-1-y); } else { return std::max(1+(y-2*par)*2, 2*par-(y-par+1)*2+(abs(i-4*par+1)/2)*2); } }
/* check_game_over - checks if the game is over */ bool check_game_over() { int i, y, check_index; if (tetromino->type == LINE) { y = NEXT_Y + tetromino->offset_y + 25 + BLOCK_SIZE / 2; } else if (tetromino->type == SQUARE) { y = NEXT_Y + tetromino->offset_y + 25; } else { y = NEXT_Y + tetromino->offset_y + 25; } check_index = 10 * (get_min_y(tetromino) + y - START_HEIGHT) / BLOCK_SIZE; for (i = 0; i < 10; i++) if (board[check_index + i].type != NO_SHAPE) return true; return false; }