トップページ > 電子工作インデックス > テトリス > 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(); } //********************************************************************