目前我有左移功能
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--;
向右移动,因为左边是++,右边是 - 我想?
我在这里和那里尝试了一些变化,但没有太多工作,所以我开始认为我没有完全理解代码。
有人可以更深入地解释代码在做什么(我可以阅读我想要的更多深入解释的评论)。
编辑有适当的检查以便向左或向右移动。例如检查是否有一块
答案 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;
}