トップページ > 電子工作インデックス > テトリス > 2. テトリスのアルゴリズム
テトリスというのは、アレです。上からブロックが落ちてきて、コントローラーで 動かしたり回転させたりして積んでいって、うまく横一列並べるとブロックが消えて 点数が入る…というやつですね。私はコレ作るまでテトリスで遊んだことがほとんど なかったので、とりあえずルールの確認です。
ほとんどのテトリスは次に出るブロックの表示があるようですが、今回 のディスプレイは電光掲示板なので表示するスペースがありません。 よって単にゲーム画面だけを表示するものとします。 また、スコアはコントローラーに付いている液晶ディスプレイに 表示し、ハイスコアを記録してスコアとともに表示します。 (電源を切るとハイスコアは消えますが…)
テトリスで必要な処理は、まず画面出力関数は、電光掲示板用として作ったものを流用します。 テトリスの動作としては、まず上から降ってくるブロックをランダムで決定した後、それを 落下させます。落下の1ステップごとにブロックが画面最上部まで積み上がっているか、 1列そろっているかを確認します。 という処理のループです。もし入力が入ればブロックを移動させるなり、回転 させるなりします。
//********************************************************************
//メイン
void main(void)
{
ini(); //ポートの入出力設定です。
//変数eは、ゲームの1画面あたりの時間を決めます。
//これを小さくするとブロックが速く落ちます。
//最初はeの値を8にします。(だいたい並の速さ…)
e=8;
//ここを無限ループ
while(1);
{
//--------------------------------------------------------------------
//ポートBはコントローラー入力用につかっています。
//何かしら入力があれば処理関数を呼びます。(割り込み使ってない… 汗)
if(PB.DR.BYTE != 0x1f) controlblock();
//--------------------------------------------------------------------
//gameover変数は、ブロックが積み上がった場合に別な関数によって1にされます。
//show_game_over()関数はゲームオーバー画面を出す関数…そのまま
if(gameover == 1) show_game_over();
//--------------------------------------------------------------------
//カウントダウン
e--;
//--------------------------------------------------------------------
//時間経過していればブロックを落とす。
if(e==0) dropblock();
//まだ時間経過していなければ、画面を出して時間かせぎ。
else putout();
//--------------------------------------------------------------------
}
}
//********************************************************************