2013-05-16 32 views
-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--; 

向右移動,因爲左邊是右邊++將是 - 我想?

我已經嘗試了幾處更改,但沒有太多的工作,所以我開始認爲我不完全理解代碼。

有人可以更深入地解釋代碼在做什麼(我可以閱讀我想要的更多深入解釋的評論)。

編輯有適當的檢查,以左右移動。例如檢查一塊是否存在

+0

現有的代碼似乎有缺陷的或誤導性的。爲了向左移動,需要計算左側座標並檢查它是否小於電路板的左側,然後向左移動。 爲了向右移動,可以計算右側座標,檢查它是否大於板的右側,然後向右移動。 正如@Medinoc指出的那樣,也沒有針對其他作品的檢查。 – nurettin

+0

有,但我沒有顯示的代碼,我將編輯我原來的帖子,雖然 – Jim

回答

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; 
} 
+0

是的,我已經有一點,現在檢查現有的件,試圖讓這一點,讓我放下一塊到底部後,我啓用右移,我將如何去改變測試在這種情況下,然而,這是主要位是我012 – Jim

+0

我添加了一個粗略的代碼示例。 – Medinoc

+0

哦,我明白你的意思了......不知道爲什麼我沒有想到這一點,謝謝。 – Jim