テトリスでブロックが回転してもステージの内側に留まる処理の書き方が知りたい。

提示画像ですがテトリスのブロック回転でブロックのある場所と重なったときに左右に移動して画面の内側に留まるという処理のバグなのですが提示コードのように両方のめり込み量を計算して少ない方に座標を足し引きして実装しているのですがブロックによって外側に出てしまいます。これはどう実装したらいいのでしょうか?

イメージ説明
イメージ説明

cpp

if(isRotate == true) { int leftMove = 0; int rightMove = 0; /* right */ glm::ivec2 pos = position; for(int y = 0; y < 4; y++) { for(int x = 0; x < 4; x++) { if( (piece[y][x] == (byte)1) && (stageBoard[pos.y + y][pos.x + x] != 0) ) { rightMove += 1; pos.x += -1; } } } /* left */ for(int y = 0; y < 4; y++) { for(int x = 0; x < 4; x++) { if( (piece[y][x] == (byte)1) && (stageBoard[pos.y + y][pos.x + x] != 0) ) { leftMove += 1; pos.x += 1; } } } if(leftMove < rightMove) { if(leftMove == 0) { position.x += -rightMove; } else { position.x += leftMove; } } else { position.x += -rightMove; } }

コメントを投稿

0 コメント