トップページ > 電子工作インデックス > テトリス > 5. 移動関数
ブロックの座標を移動させて、新しく表示しなおす関数です。処理そのものは 非常に単純…。この手の、画面にアニメーションを表示するものは、 画面に描画→消す→少しずらして描画…を高速で繰り返すことで実現されます。 ブロックだけを動かすのにゲーム画面全体を書き換えるのは時間の無駄なので、 ゲーム画面の配列のうち、ブロックの部分だけに変更を加えるようにしています。 モノによっては、「消す」の部分を省略できますが、いずれにせよゴースト対策になるので 消す処理を入れておくと安心です。電光掲示板で文字を流す処理でも同じことがいえます。
//********************************************************************
//ブロック移動
//2つの引数、new_xとnew_yは移動後のブロックの座標を示します。
void move_block(int new_x,int new_y)
{
int i,j;
//まず、今までのブロックを消します。
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
//ゲーム画面を扱う配列から、元の座標において、ブロックの形を引き算。
field[y+i][x+j] -= block[i][j];
}
}
//グローバル変数x,yに新い座標を代入して、ブロックの座標を更新
x=x2;
y=y2;
//新しい座標で、ゲーム画面にブロックの形を足し算。
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
field[y+i][x+j] += block[i][j];
}
}
//音を鳴らします。
voice1();
//画面表示をして、更新。
putout();
}
//********************************************************************