ここまでに、フォーム上の全てのコンポーネントが、同等の機能をもつ変数や関数・手続きになりました。すでにフォーム上には何も残っていません。
と言うことは…
type TFormInvader = class(TForm) private { Private 宣言 } X: Integer; Y: Integer; Speed: Integer; Alive: Boolean; protected procedure Draw; virtual; procedure Erase; virtual; procedure SetSpeed(S: Integer); virtual; function GetSpeed: Integer; virtual; function GetX: Integer; virtual; function GetY: Integer; virtual; procedure GoHorizontal; virtual; procedure GoDown; virtual; procedure HitCheck; virtual; public { Public 宣言 } procedure Move; virtual; procedure Construct; virtual; procedure Destruct; virtual; end;
という機能さえ実現できていれば、フォームがなくても良いことになります。実はフォームも、(それと同等の機能をもつ)「クラス」というものにすることができます (フォームはクラスの一種だったのです)。
プログラムを書き換えましょう。まずは、フォームではなくするため「class」の後の「(TForm)」を「(TObject)」にしてください。(「(TObject)」という記述を完全に削除してしまっても構いませんが、ここでは「(TObject)」という記述を残すことにします。)
type TFormInvader = class(TObject) private { Private 宣言 } X: Integer; Y: Integer; Speed: Integer; Alive: Boolean; protected procedure Draw; virtual; procedure Erase; virtual; procedure SetSpeed(S: Integer); virtual; function GetSpeed: Integer; virtual; function GetX: Integer; virtual; function GetY: Integer; virtual; procedure GoHorizontal; virtual; procedure GoDown; virtual; procedure HitCheck; virtual; public { Public 宣言 } procedure Move; virtual; procedure Construct; virtual; procedure Destruct; virtual; end;
もう1ヶ所、プロジェクトファイルを修正する必要があります。まずは「表示」→「プロジェクトマネージャ」を選び、「invader_game.exe」(これがプロジェクトです) の上で右クリックし、「ソース表示」を選びます。
すると、9-5 で見たようなプロジェクトファイル (プロジェクトを管理するファイル) が表示されます。その中の FormInvader1 〜 FormInvader4 及び FormInvaderBoss に関する部分を次のように変更します。
begin Application.Initialize; Application.CreateForm(TFormControl, FormControl); Application.CreateForm(TFormDisplay, FormDisplay); FormInvader1 := TFormInvader.Create; FormInvader2 := TFormInvader.Create; FormInvader3 := TFormInvader.Create; FormInvader4 := TFormInvader.Create; Application.CreateForm(TFormBullet, FormBullet); FormInvaderBoss := TFormInvaderBoss.Create; Application.Run; end.
これで、invader ユニットはフォームのないユニットになりました。同時に、これを継承している invader_boss ユニットもフォームのないユニットになりました。実行して、インベーダーフォームが作られないこと、そしてそれにもかかわらずプログラムがこれまで同様にきちんと動作することを確認しましょう。
弾フォーム (bullet フォーム) を単なるクラスにしてください。(変数アクセス用の関数・手続きを新たに作る必要があります。)