![]() |
Top > 授業 > Delphi プログラミング >Lesson 9b Lesson 9b(2004/10/11) |
![]() |
![]() |
![]() |
![]() 1.このLesson 9b では Lesson 9a の P903 の練習問題の解答例を示します。 2.まずサンプルプログラムはダウンロードしてください(クリック)。ダウンロードしたファイル(lesson9b.exe)はDelphi7\Source に置いてクリックして解凍してください。ただし解凍にはパスワードが必要であり、課題を提出した人にはパスワードを知らせます。 |
![]() a.このプログラムは、ライフゲームを実行してセル空間の状態をバイナリファイルに書き出し、ゲームが終了してからそのファイルを使ってゲームの展開をそのまま PaintBox のセル空間に再現する ・このプログラムはあくまで練習用である。実行結果をファイルに記録して結果を再現すること自体に意味はない。 ・この課題に解答するために必要なヒントはすべて、P901〜P903のプログラムの中に見出すことができる。したがって P905 を書くための新たな要素は存在しない。ただプログラムの流れをどう定義するかに頭を使う必要があるだろう。 ・特に正解がある訳ではない。私の解答例(ダウンロードしたファイル)が良い解答例かどうかは分からないけれど、私は次のようなプログラムを書いてみた(手続きStartBtnClickの主プログラム部分)。 begin Global_Init; for iRep := 1 to MaxiRep do begin Irep_Init(iRep); repeat Loop_Init; case iRep of 1: RedefineStatus; 2: ReadDataFile; end; { of case iRep of } DrawPlayerMap(Sender); If (iRep = 1) and CheckBox1.Checked then WriteDataFile; Judgment(iRep); until EndRepeat; iRepFinale(iRep); end; { of iRep Loop } Finale; end; ・まず、CheckBox1 を使って記録したファイルでリプレイするかどうかを選択する。CheckBox1 がチェックされればリプレイありで MaxiRep は2、その他の場合は1である。CheckBox1 がチェックされなければ、このプログラムは P901 と同じ動作をする。 ・CheckBox1 がチェックされたとき、for iRep ループを2度繰り返す。iRep := 1 のときは P901 同様にライフゲームを実行し、セル空間のデータを WriteDataFile でバイナリファイルに書き出す。iRep := 2 のときは、そのファイルのデータを ReadDataFile で読み出し、DrawPlayerMap でPaintBox に図を表示する。 練習問題:上の P905 のプログラムで、iRep := 1 のときの作業と iRep := 2 のときの作業を別の手続きとしてまとめたプログラムを書け。 |
![]() 既にアナウンスしたように、この Lesson 9 をもって Delphi Lesson を一応終わりにします。この Lesson で扱った事項ですべてではありませんが、主要な事項はカヴァーしていると思います。後は各自、自分で参考書やヘルプを参照しながら学習してください。ここまでの事項で、私が書く程度のシミュレーションプログラムは、ほぼ書けると思います。 練習量という点では足らないと思います。練習には、繰り返し行うべき「型の練習」のようなことと、「乱取り」のように、臨機応変に課題を設定して試みる練習があります。どちらも重要です。例えばアルゴリズム関係の本を見ながら、言語を翻訳して Delphi でプログラムを書いてみるとよいように思います。 ここから先はシミュレーションの試作に入ろうと思います。 |