ネコの継承
プログラムにおいて、白ネコは黒ネコを継承しています。
これは第一章で学んだ項目を使用しました。
白ネコの中身(ソース)には必要最小限のことを記述し、残りは黒ネコと同様の作業を行うというものです。
本 Web ページでは、
3-4 がその項目に相当します。
override に関しての記述をもう一度よく読んでみましょう。
ちょっとだけでも『あー、なるほど』と感じたのなら、ここの項目は終了です。
オブジェクトを複数生成する
黒ネコは2匹出てきます。
これは第二章で学んだ内容の復習です。
2-3 を見てみましょう。
3-5 と同じようなプログラム構成(アルゴリズム)になっていることが分かります。
ここで黒ネコというオブジェクトを二つ用意し、
プログラム作成時(3-2)、
ネコの数を元にオブジェクトの起動数を決定しているのです。
//ネコの数を元にオブジェクトの起動数を決定
case CATS
of
0: ButtonStopClick(Sender);
1: CatWork1.Start;
2:
begin CatWork1.Start;
CatWork2.Start;
end;
3:
begin CatWork1.Start;
CatWork2.Start;
CatWork3.Start;
end;
4:
begin CatWork1.Start;
CatWork2.Start;
CatWork3.Start;
WhiteCatWork.Start;
end;
end;
プログラムを見て下さい。
CATS は、ネコの数を表しています。
それぞれが選択され、クリックされた際の数値を
case 文で振り分け、
1なら一匹、2なら二匹、というふうに、数値に見合ったオブジェクト(ネコ)を動かし、
4の場合のみ白いネコも動かします。
機動処理
それではこのプログラムの起動時に関する流れ図を以下に示します。
かなり簡略化して記述していますが、全体的な流れとしてプログラムを捉えて下さい。
これまでと同様、各ポイントにリンクを設置していますので、ジャンプしてプログラムを確認してみることが肝要です。
ネコの数が0以上ならば、『動ネコ』ボタンの Enabled を True にする
↓
起動するネコの数を読み取り、Object(ネコ)の Start へ進む。
↓
Start では Object の visible を True にし、CATMOVE、SETCAT へと進む。
(CATMOVE、SETCAT は Start のすぐ下に記述)
↓
CATMOVE では出現場所を、
SETCAT ではネコを連打されない為の処理、読み込んだ画像の処理を行う
↓
残り時間が経過する、もしくは残りクリック数がなくなるまで処理を繰り返す。
クリック時の処理 : Object
機動処理に引き続き、ネコをクリックした時の処理の流れ図を示します。
クリックすればゲージを増やし、連打されたらゲージを減少させるといった基本的なものから終了処理への移行など、
意外に沢山の処理をこなしています。
Object(ネコ)の Click イベントを
override する
↓
1:ネコをクリックした際にゲージを一つ上げるが、3分の1の確立でネコのゲージを下げる
2:同時にサウンドを使用し、ネコを鳴かせる
3:連打された場合にはゲージを下げる
↓
残りクリック回数が無くなった場合には終了処理(GAMEOVER)へ
↓
ゲージが最大(ネコの機嫌)になった場合、各処理を遂行させる
↓
最後にネコを連打されないようにする為の処理をする
(COMBO を False にする)
クリック時の処理 : 背景
次は背景をクリックされた際の処理です。
これもゲームの終了処理へとイベントが進む可能性を含んでいる個所です。
ゲーム進行中、背景(Image)を Click するとイベントを発生
↓
機嫌ゲージを減らす
↓
もしもクリックによって残りクリック数が0になった場合、ゲームの終了処理へと進む
終了処理
ゲームを終了させる為の処理は、以下の2パターン5個所から派生します。
パターンA
1:ネコの機嫌を最大にし、ゲームをクリアした場合
2:ネコをクリックし、残りクリック数が0になった場合
3:背景をクリックし、残りクリック数が0になった場合
4:残り時間が0になった場合
パターンB
5:『終了』ボタンをクリックした場合
以上の場合から終了処理をスタートさせます。
パターンBの場合は Close メソッドを行うだけですが、
パターンAについては若干の処理を必要とします。
パターンAの場合、MainUnit の StopGame を呼び出す
↓
1:Timer 1、2を止める
2:『動ネコ』『止ネコ』両ボタンの Enabled を切り替える
↓
画面に表示させる『GameClear』or『GameOver』 の文字を決定する。
↓
MainUnit の SETDLG を呼び出す
↓
1:画面に表示させる文字の Enabled を True にする
2:サウンドを止める
↓
『もう一回?』というメッセージを表示させる : Yes or No
(変数 MD はメッセージダイアログを一度だけ表示させる為に使用)
↓
1:『Yes』の場合、すべての Object(ネコ)の Visible を False にする
2:『NO』の場合にはアプリケーションを Close させる
↓
1:各 Timer を切り替え、機嫌ゲージを初期化
2:その際、『動ネコ』『止ネコ』ボタンの Enabled を切り替える
TTimer の役割
プログラム内では3つの Timer を使用しています。
以下にそれぞれの Timer の役割を示していますので、
リンク
へジャンプしてその効果を確かめてみて下さい。
Timer1
全ての Object(ネコ)の
CatMove メソッドを呼び出す
Timer2
1:画面に表示する『GAMEOVER』or『GAMECLEAR』の Enabled を False に
2:残り時間を『00』に設定
3:残りクリック回数を『00』に設定
Timer3
1:残り時間から -1 し、カウントダウンを行う
2:残り時間が0になった場合、終了処理へと進む
最後に
ここまで呼んで頂き、本当にありがとうございます。
最後にこのページの作成者よりご挨拶を。
まず、
プログラムは技術ではありません。
プログラムはアイディアです。
事実、私は技術に関してはまだまだといった感じです。
やりたいことがあるけど自分の技術ではできない。
なんでこんなのが分からないんだコンチクショー!
そんな経験は山ほどあって、枚挙に暇がありません。
ですが、アイディアさえあれば技術は後から着いて来ます。
そういうもんです。
例えば Delphi で Microsoft Word のような凄えフリーソフトを作ったとします。
でも、そんなのは Word を使えば良い話で、おそらく作ったとしてもあまり役には立たないでしょう。
Word なら Microsoft 社の他の製品と互換性もあり、フリーソフトに比べて動作も安定しているので安心です。
まねっこはいけません。
きっと、オリジナルのソフトを作成する場合、 Word には無い特殊な機能をつけた物の方が喜ばれるのだと思います。
大抵のフリーソフトウエアはそういうコンセプトの物が多いようです。
一撃必殺です。
足りない技術はアイディアが補ってくれることもあります。
プログラミングに必要なのはアイディアです。
それが私の持論です。
これでオブジェクト指向プログラミングに関する資料はひとまず終了ですが、
これからも良いプログラムの作成を目指し、みなさんがんばって下さい!