![]() |
Top > 授業 > Delphi プログラミング >Lesson 8a Lesson 8a(2004/09/30) |
![]() |
![]() |
![]() |
![]() 1.Lesson 8 では乱数を使ったアニメの練習をします。ランダムウォークもどきですが、正確にはランダムウォークではありません。ともかくいろいろプログラムに慣れてみる、というのが lesson 8 の趣旨です。 2.この Lesson 8 では4つのサンプルプログラム、P801〜P804 を用意します。P803 と P804 はP802 の練習問題の解答(例)になっています。まず Lesson 8a の提出用の課題を提出してください。 3.以下のサンプルプログラムはダウンロードしてください(クリック)。ダウンロードしたファイル(lesson8a.exe)はDelphi7\Source に置いてクリックして解凍してください。提出マーク[提出]のついた練習問題のプログラムを、前回同様、圧縮した上で高木までメールで送ってください。 |
![]() 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.画像を表示させる場所は変えることができることを試せ。 |
![]() 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 は割と簡単に作れるはずです。 |
![]() ・P802 の練習問題3の解答例です。 ・私が作った解答例は Lesson 8b で示します。 |
![]() ・P802 の練習問題4の解答例です。 ・私が作った解答例は Lesson 8b で示します。 |
![]() まず、P802 の練習問題3、4のプログラムを高木に送ってください。その後に、その練習問題の解答例にあたるプログラムを Lesson 8b の掲示でダウンロードできるようにします。 この2つの練習問題に答えるための材料は、P801とP802で与えられています。後はささいな工夫をするかどうかの問題です。 |