にしのクエスト2

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

20221224103753

Unityで学ぶプログラミング  テトリス的を作る(5)ブロックを落下させる

こんにちは!

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

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

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

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


今回はブロックを落下させていきます
長くなって、わかりにくくなってます・・・
ごめんなさい。

//ブロックの位置(初期値)

int x=5;
int y=0;
//時間
public float delta;
 
//間隔
float span=1.2f;

変数の部分には、時間の設定をしておきます。
また、ブロックの位置を記憶する変数も用意します。

 
void MoveBlk(int x2,int y2){
int i,j;

//ブロックをいったん消して
for(i=0;i<4;i++){
for(j=0;j<4;j++){
field[x+i,y+j]-=blk[i,j];
}
}

//座標を更新
x=x2;
y=y2;

//ブロック入れ替え
for(i=0;i<4;i++){
for(j=0;j<4;j++){
field[x+i,y+j]+=blk[i,j];
}
}
}
ここが、ブロックを動かす部分です。
ブロックを全部消して、座標を入れ替えてから
再度ブロックを書き換えます。
 

void Update()
{
//時間の加算
delta += Time.deltaTime;
 
//時間経過後
if(delta>=span){
//重なってないなら移動
MoveBlk(x,y+1);
delta=0;
}
}

アップデートですが、spanを取らないと、高速で落ちて
何が起こったかわからないので、こうしておきましょう。

座標に1を加えて、それをspan間隔で行います。


f:id:koharuwest:20210117110724p:plain

ブロックは落ちていきますが、下の壁を突き抜けて
エラーを発生させ、終了してしまいます。

次回は、ブロックを停止させてみます。
(そこまでいったら、まとめてプログラムを紹介しますね)

f:id:koharuwest:20210117110657p:plain
それではよきプログラミングライフを!
またね。