-1

目前我有左移功能

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--;

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

我在这里和那里尝试了一些更改,但效果不大,所以我开始认为我没有完全理解代码。

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

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

4

1 回答 1

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;
}
于 2013-05-16T07:35:47.460 回答