Top > 授業 > Delphi プログラミング >Lesson 8a
Lesson 8a
(2004/09/30)
問合せ メール 戻る

Lesson 8 について

1.Lesson 8 では乱数を使ったアニメの練習をします。ランダムウォークもどきですが、正確にはランダムウォークではありません。ともかくいろいろプログラムに慣れてみる、というのが lesson 8 の趣旨です。

2.この Lesson 8 では4つのサンプルプログラム、P801〜P804 を用意します。P803 と P804 はP802 の練習問題の解答(例)になっています。まず Lesson 8a の提出用の課題を提出してください。

3.以下のサンプルプログラムはダウンロードしてください(クリック)。ダウンロードしたファイル(lesson8a.exe)はDelphi7\Source に置いてクリックして解凍してください。提出マーク[提出]のついた練習問題のプログラムを、前回同様、圧縮した上で高木までメールで送ってください。
P801のポイント

a.このプログラムは画像ファイル(bmp)をデータとして読み込み、画面に表示させます。
・lesson8a.exe を解答すると18個の bmp ファイル(blue1〜6、green1〜、red1〜6.bmp)が出てきます。このファイルも Source のフォルダに入れてサンプルプログラムを使ってください。
・画像ファイルはホームページ用のアイコンを私がいじったものです(版権はないのだと思いますが)。元は1つのファイルでした(番号が2のファイル)。そのファイルを回転移動、線対称移動を施して6つにしました。
・P801を実行すると red1.bmp 〜 red6.bmp が PaintBox に表示されます。それ以上は何もしません。

b.画像ファイルを画面に表示させる。
・画像ファイルというのは結局、バイナリファイルです。どのドットをどの色で表示するかを指定するデータだと思います。ですから画像データはデータとして変数に格納し、画面上に出すことができます。
・プログラムで画像データをどう扱っているかを見てください。
・まず、画像データの読み込み。fish という変数を TBitmap というクラスの6個の配列として定義しています。次に、SetImagesという手続きで
  fish[i] := TBitmap.Create;
によって画像データを格納する変数 fish を初期化します。さらに次でデータをファイルから読み込んでいます。
 with fish[i] do begin
   LoadFromFile(ifile);
   Transparent := True;
   TransparentMode := tmAuto;
 end;
Transparent、TransparentMode についてはヘルプを参照してください。
・次は画像データの表示です。手続きStartBtnClick にあるように、Canvas.Draw(x, y, fish[i]) で、座標(x, y) に fish[i] に格納したデータを矩形の図形として表示します。座標(x, y) は、表示される矩形の図形の左上のはずです。
・この6種類の図形を使って、次以降のプログラムで、魚が動くような簡易のアニメを作ることにします。

練習問題
1.赤い魚の代わりに緑や青の魚を画面に表示させよ。
2.画像を表示させる場所は変えることができることを試せ。
P802のポイント

a.このプログラムは左向きの赤い魚を前方に動かしています
・このプログラムで行っているのは次のサイクルです。
 (1) 画像 red2.bmp を座標(x,y)に表示させる
 (2) 新しい座標を (x-凅, y) とする
 (3) 座標(x,y)の画像を消す
 (4) 座標 (x-凅, y)にred2.bmp を表示させる
・画像の魚を画面で動かす上で1つ厄介なことがありました。1種類の魚に6個の画像がある訳ですが、画像の大きさ(縦横のドット数)が、回転移動すると違ってしまうことです。そこで、魚の画像を消すときにはその矩形の画像を消すのですが、画像の大きさが画像の種類で異なるので、消す(地の色で塗る)領域も画像によって異なってしまいます。この点を処理するために、手続きDrawFish で定数xy を宣言しています。xyは6つの画像の横と縦のサイズを表しています。例えば2番目の画像の(16,10)は、画像の中心からx座標で±16ドットで横の端となり、±10ドットで縦の端になることを意味しています。P802 では2番目の画像だけを使っていますが。

練習問題
1.魚が右から左に移動するようにプログラムを書き換えよ。
2.魚を描く回数を増せば(手続きStartBtnClickにおける repeat の終了条件 until icnt >= 40 の40 を例えば倍の80にすれば、魚は右か左の端に入って消えてしまう。左(右)に行ったら右(左)から出てくるようにプログラムを書き換えよ。
3.[提出]ダウンロードしたファイルの中にある P803.exe と同じ動作をするプログラムを書け。
・P803 は1匹の魚が PaintBox の水槽の中を泳ぐようなアニメになっています。
・魚の最初の位置、および動き方は一様乱数で決めています。
・魚の動き方にはいろんな定義があると思います。とりあえず似たような動きになればよいです。各自で動かし方を考えてください。
4.[提出]ダウンロードしたファイルの中にある P804.exe と同じ動作をするプログラムを書け。
・P804 は15匹の魚が PaintBox の水槽の中を泳ぐようなアニメになっています。
・1匹の魚の動きの決め方は P803 と同じです。
・魚の色と位置はプログラムの起動時に乱数で決めています。
・P803 ができれば P804 は割と簡単に作れるはずです。
P803

・P802 の練習問題3の解答例です。
・私が作った解答例は Lesson 8b で示します。
P804

・P802 の練習問題4の解答例です。
・私が作った解答例は Lesson 8b で示します。
次回に向けて

まず、P802 の練習問題3、4のプログラムを高木に送ってください。その後に、その練習問題の解答例にあたるプログラムを Lesson 8b の掲示でダウンロードできるようにします。
 この2つの練習問題に答えるための材料は、P801とP802で与えられています。後はささいな工夫をするかどうかの問題です。