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

左が ++ 右なので、右に移動するには -- だと思いますか?

あちこちでいくつかの変更を試みましたが、あまりうまくいかなかったので、コードを完全に理解していないと思い始めています。

誰かがコードが何をしているのかをもっと深く説明できますか (もっと詳細な説明が欲しかったコメントを読むことができます)。

EDIT左または右に移動するための適切なチェックがあります。たとえば、ピースがあるかどうかを確認する

4

1 に答える 1

0

rowDataここで重要なようです: ピースのすべてのピクセルがバイナリ形式 (行ごとに 1 つの整数) で含まれているようです。したがって、ピースを右に移動する場合は、テストとインクリメントを変更するだけでなく、値を左ではなく右にシフトする必要があります。

また、このコードは途中で既存の部分をチェックしないことに注意してください。境界のみをチェックします。

移動コードは次のようになります。

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 に答える