流れ星

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
procedure star(x,y:integer;a:real);
var i:integer;
begin
Canvas.MoveTo(x-round(100*cos(a)),y-round(100*sin(a)));
for i:=1 to 5 do begin
Canvas.LineTo(x-round(100*cos(a+4*pi*i/5)),y-round(100*sin(a+4*pi*i/5)));
end
end;

var i,j,r,s,n:integer;
begin
randomize;
j:=random(9);
r:=random(600);
s:=random(400);
if r-200>=s
then n:= round((900-r)/4)
else n:= round((700-s)/4);
for i:=0 to n do begin
case j of
0 :Canvas.Pen.Color := clBlue;
1 :Canvas.Pen.Color := clRed;
2 :Canvas.Pen.Color := clLime;
3 :Canvas.Pen.Color := clYellow;
4 :Canvas.Pen.Color := clWhite;
5 :Canvas.Pen.Color := clGreen;
6 :Canvas.Pen.Color := clBlack;
7 :Canvas.Pen.Color := clPurple;
8 :Canvas.Pen.Color := clAqua;
9 :Canvas.Pen.Color := clFuchsia;
end;
star(r+i*4,s+i*4,i*4/100);
sleep(20);
Canvas.Pen.Color := clSilver;
star(r+i*4,s+i*4,i*4/100);
sleep(30);
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
button1.visible:=true;
button2.visible:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

end.

プログラムの説明

はじめ、2点間を結ぶ手続き、lineを作って…、と考えたが、今回作成した
五角形の星は一筆書きができることに気づき、lineは作らなくてもよいと判
断した。工夫した点は、いくつかの乱数を発生させることによって、星が最初
に発生する位置と、星の色を毎回変えるようにしたこと、それから、星をただ
動かすのではなく、回転しながら動くようにしたことである。


レポートを作成しての感想

回転しながら動く、というプログラムを考えるにあたってはずいぶん頭を悩ま
せた。が、グラフィックのプログラムを自分で作成できると、ずいぶんプログ
ラム作成が面白くなった。


講義の感想

中学校の技術家庭科で、basicをひとかじりしたことがあったので、比較的よ
く理解できたのではないかと思う。

もどる

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送