テトリスもどき

  1. テトリスもどき


    1. テトリスゲーム

      8*8 のLEDアレイを利用して「テトリス」もどきのゲーム機を作成します。この「テトリス」は3種のコマが落下します。このコマを左右移動、回転をさせ、横方向に隙間なく重なるとその行が消去されます。消去されずに残ったコマで新しいコマが落下できなくなるとゲームオーバーです。ゲームオーバーまでに、消去できた行の数で得点を競います。これは、H306015 犬飼 浩一君 の作品です。

    2. 操作

      左のボタンで開始、右の左右ボタンで左右に移動、下ボタンで高速落下をします。
      下図は、半田付け配線をした回路です。PIC は PIC用プログラムライタで書き込み、基板にICソケットに差し込んでいます。


  2. 回路


    1. 8*8LEDとドライバ

      8*8 のLEDマトリックスを利用しています。8個のLEDをダイナミック点灯します。瞬間的に60mA程度の電流が流れますから、電流増幅用のドライバICを組み込んでいます。詳細はこちらを参照してください。

    2. スイッチ回路とPIC

      5個の押しボタンスイッチを組み込んでいます。このゲームでは上ボタンは利用していません。PIC は16F873A(4kワード)ではコード領域が不足したため、16F876Aを利用しています(8kワード)。

    3. 電池駆動

       この回路は電池駆動可能です。単4電池2本で約3Vボルトになります。PICは 2V 以上で動作します。変更点は、8*8 のLEDの抵抗です。抵抗が高いと消費電力は減りますが明るい場所では見にくくなります。PIC の電流は 20MHz のクロックで電源 3V の場合 3mA 程度ですから LED 1個より低電力です。
       また、注意すべきは、プログラムの #Fuse で NOBROWNOUT を設定することです。BROWNOUTは低電圧の検出機能で、これを設定すると、電圧が 3.5V 以下になるとリセットがかかります。

    4. 回路図

      全体の回路図です。端子の対応は、プログラムのソースリストをご覧ください。スイッチにはチャタリング防止回路は付加していませんが、スイッチによっては必要になるかもしれません。

    5. パッチ配線

      下図がパッチ配線をした回路です。左から、通信用のRS232Cのレベル変換、16F876APIC回路、8*8表示器用の抵抗回路、8*8表示器よドライバ回路、スイッチ回路です。これを、半田付け配線し電池駆動にしたものが、I のBの回路です。


  3. プログラム


    1. フィールドの構成

      ゲームの「場」の状態を保持するため、配列 matrix[ ] を利用します。
       int matrix[8][11];
      ここに、1を設定すると、対応する点(LED)が点灯します。実際の表示は int matrix[8][8]; で、matrix[8][9~11]; は次に登場するコマを設定する領域です。

    2. コマの表現

      コマは以下の3種です。
            ■
      ■■    ■      ■
      ■■   ■    ■■
       最初の四角を、フィールドの上部(表示されませんが)に配置するには、以下のようになります。line が上下方向の番号、row が左右方向になります。lineの8,9、rowの3,4 を1にして、コマを配置します。
            row=3;
            line=8;
            matrix[row][line]=1;
            matrix[row+1][line]=1;
            matrix[row][line+1]=1;
            matrix[row+1][line+1]=1;
      左下が、line=0、row=0、になります。


    3. 得点の表示

      得点を表示するため、配列 number[10][3] を利用します。5*3 のパターンで数字を表現します。数字の各列を左詰めしたビットで表現します。
         ■■■
         ■ ■
         ■ ■
         ■ ■
         ■■■
       数字0の場合、以下のようにパターンを記録します。
         number[0][0]=0b11111000;
         number[0][1]=0b10001000;
         number[0][2]=0b11111000;

    4. ソース

       全体のソースはこちらにあります。