俄罗斯方块功能在C中移动

时间:2013-05-16 07:21:33

标签: c tetris

目前我有左移功能

int8_t move_piece_left(piece_type* piecePtr) {

int8_t row;
/*
 * Check if piece is all the way to the left If so, return.
 * (Remember, column number is based on bit position - higher
 * numbers to the left.
 */
if(piecePtr->right_column + piecePtr->x_dimension >= BOARD_WIDTH) {
    return 0;
}

/*
 * Make the move.
 */
for(row=0; row < piecePtr->y_dimension; row++) {
    piecePtr->rowdata[row] <<= 1;
}
piecePtr->right_column++;
return 1;

}

我认为这是一个简单的改变,我确信这是一个简单的改变,但我不认为它会如此顺利。所以显然我需要检查这件作品是否一直向右而不是左边,也许是

piecePtr->right_column--;

向右移动,因为左边是++,右边是 - 我想?

我在这里和那里尝试了一些变化,但没有太多工作,所以我开始认为我没有完全理解代码。

有人可以更深入地解释代码在做什么(我可以阅读我想要的更多深入解释的评论)。

编辑有适当的检查以便向左或向右移动。例如检查是否有一块

1 个答案:

答案 0 :(得分:0)

rowData似乎是关键所在:它似乎包含所有像素,以二进制形式(每行一个整数)。因此,如果您将棋子向右移动,除了更改测试和增量之外,您还必须将其值向右移动而不是向左移动。

另请注意,此代码不会检查现有的部分:它只检查边界。

移动代码应该是这样的:

int8_t move_piece_right(piece_type* piecePtr) {

    int8_t row;
    /*
     * Check if piece is all the way to the right If so, return.
     * (Remember, column number is based on bit position - higher
     * numbers to the left.
     */
    if(piecePtr->right_column == 0) {
        return 0;
    }

    /*
     * Make the move.
     */
    for(row=0; row < piecePtr->y_dimension; row++) {
        piecePtr->rowdata[row] >>= 1;
    }
    piecePtr->right_column--;
    return 1;
}