コラム / テトリスぽいもの / 5



   TMapBlocks = Class(TObject)
   private
   public
       //変数定義
       Blocks:Array[0..19,0..9] of Boolean;
   end;
と書き換えてください。
Blocks変数を定義しました。
いえ、実は変数じゃないです。
配列です。
しかも、ただの配列じゃありません。
「 二 次 元 配 列 」
です。
こりゃ、しっかり説明しなきゃなりませんね。
まず、配列とは何か、ですが、
文字列リストの仕組みを覚えていますか?
文字列リストの実装は、文字列の配列でした。
そう、配列というのは、
同じ型の変数を、番号をつけて大量に並べたもの
です。

hai.png

アクセスするときは、
配列名[要素番号]とするんでしたね。
さて、では、二次元配列ってなんでしょう?
アニメキャラが入ってる配列じゃないっす。
悪いけど俺アニメは全然見ないし。
二次元 が 配列 なんじゃなくて
配列 が 二次元なんです。
つまり、番号をつけてまっすぐに並べる方法を進化させて、
●●-○○ という番号をつけて、
マス目状に並べるのです!

nji.png

アクセスするときは、
配列名[一次元目の要素番号,二次元目の要素番号]
というように書きます。
二次元配列がわかったら
定義のルールです。普通の配列の定義は
配列名:Array[最小値..最大値] of 型
と書きます。
二次元になると、
配列名:Array[最小値..最大値,最小値..最大値] of 型
となります。
さて、これで、 
       Blocks:Array[0..19,0..9] of Boolean;
が、
1次元目、0-19,二次元目0-9の、ブーリアン型の配列、ブロックスを定義せよ
だということになります。
ブーリアン型、今まで説明してませんでしたが、
論理型の事です。 真/偽 しか持ちません。
ということは、
Blocksというのは、
縦に20*横に10 の、合計200本のフラグ
ということなんです。

fl.png

これ、ブロックのつもり状態を定義するのに完璧だと思いません?w
けど、配列の、範囲外にアクセスすると、エラーが出るんです。
当たり前、っていえば当たり前ですが、
そうすると、
「はみ出るかどうか判定」
したいときに困ります。
次のページで、
[-1,5] つまり、0がフィールドの一番左の列ですから、
フィールドの外を調べても問題ない機能を作ります。