トップページ > 電子工作インデックス > テトリス > 5. 移動関数

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();

}
//********************************************************************


前へ   次へ