にしのクエスト2

情報処理技術者試験と資格学校講師の日常

20221224103753

Unityで学ぶプログラミング  テトリス的を作る(10)ブロックの回転

こんにちは!

テトリス的なものを作っていきます。長い連載になります
で、気長にお付き合いください。

なお、プログラムの内容は難しいので、初心者には向きませ
ん。いきなり作るのは厳しいのでよろしくお願いします。
また、説明も大幅に省いていきます。

最後に注意事項
ご紹介するのはあくまで「テトリス的」です。そのものでは
ありませんし、非常にシンプルに遊べるだけのものです。

連載終了後に、より詳しい技術的な解説&追加機能を加えた
電子書籍を発行する予定ですので、よろしくお願いします。


今回はブロックを回転させます
スペースキーを押すと、回転するようにしましょう。
なので、update部分に次のようなものを追加して。

//回転させる場合(スペースキー)
if(Input.GetKey(KeyCode.Space)){
TurnBlk();
}

新しくTurnBlkのプログラムを書いていきます。
このロジックについては、ちょっと説明が長くなるので、省
略します(調べてみてね)が、ステージの変数の値を広めに
取っていることで、壁際でエラーが発生しなくなっています。

これが私の工夫でございます。
これで、次々ブロックが積み重なっていきます。

int TurnBlk(){
int i,j;

//ブロックを一時セーブ
for(i=0;i<4;i++){
for(j=0;j<4;j++){
blktmp[i,j]=blk[i,j];
}
}

//ブロックを回転させる
for(i=0;i<4;i++){
for(j=0;j<4;j++){
blk[i,j]=blktmp[3-j,i];
}
}

//重なりがあれば元に戻す
if(ChkBlk(x,y)==1){
for(i=0;i<4;i++){
for(j=0;j<4;j++){
blk[i,j]=blktmp[i,j];
}
}
return 1;
}

//ブロックを消して再描画
for(i=0;i<4;i++){
for(j=0;j<4;j++){
field[i+x,j+y]-=blktmp[i,j];
field[i+x,j+y]+=blk[i,j];
}
}
Render();
return 0;
}


f:id:koharuwest:20210131225206p:plain
次回は、ブロックを消してみたいと思います!

 

f:id:koharuwest:20210117110657p:plain


それではよきプログラミングライフを!
またね。