Lesson07 花火 解説
001:<HTML>
002:<HEAD>
003:<TITLE>lesson07 花火</TITLE>
004:<STYLE type="text/css">
005:<!--
006:FONT { font-size:15pt }
007:B { font-size:20pt }
008:-->
009:</STYLE>
010:<SCRIPT LANGUAGE="VBScript>
011:<!--
012:Option Explicit '変数の宣言を強制する リファレンス Option Explicit 参照
013:Const e=2.7182818 '定数の宣言 e は自然対数の底値 リファレンス Const 参照
014:Const pi=3.1416 '定数の宣言 piは円周率の値
015:Const g=0.5 '定数の宣言 gは重力加速度に相当する値(大きくすると落下速度が速くなる)
016:Const k=0.05 '定数の宣言 kは空気の抵抗に相当する値(大きくすると移動速度が遅くなる)
017:Const tminterval=50 '定数の宣言 Sub tmプロシジャーのタイマーSetTimeOutの時間間隔を 10(ms) に設定
018:Dim vx(30) '配列変数宣言 30ヶの花火の水平方向の初速
019:Dim vy(30) '配列変数宣言 30ヶの花火の垂直方向の初速
020:Dim a(30) '配列変数宣言 30ヶの花火の軌道計算式を簡略化する計算途中の値
021:Dim t '変数宣言 時間に相当するカウント値 このプログラムでは0から69まで値を繰り返す
022:Dim ww, wh '変数宣言 ww:ウインドウの水平方向サイズ wh:ウインドウの垂直方向サイズ
023:Dim x1, y1 '変数宣言 x1:花火が発生する水平方向位置 y1:花火が発生する垂直方向位置
024:init '起動時に Sub initプロシジャーコール
025:Sub init()
026:Dim i, j
027:Dim c, cl
028: Randomize 'Randomize:乱数ジェネレータを初期化する リファレンス Randomize 参照
029: For i=1 to 30
030: cl=""
031: For j=1 to 3 '乱数で16進6桁のカラーコード作成
032: c=Right("0" & Hex(Int(256*Rnd)), 2) 'リファレンス Right Hex Int Rnd 参照
033: cl=cl & c
034: Next
035: '次の行のDocument.Writeにより★の文字を30ヶ書き込む
036: Document.Write "<Div id=""h" & i & """ Style=""Position:Absolute;Left:0;Top:0""><Font COLOR=""#" & cl & """>★</Font></Div>"
037: Next
038: tm 'Sub tm プロシジャーコール
039:End Sub
040:Sub tm()
041:Dim i
042:Dim v, d, r
043: If t=0 Then
044: ww=Document.Body.OffsetWidth 'wwにウインドウの水平方向サイズ(pixel値)を代入
045: wh=Document.Body.OffsetHeight 'whにウインドウの垂直方向サイズ(pixel値)を代入
046: r=Rnd-0.5
047: x1=ww * (0.5 + 0.35*Sgn(r)) 'x1に花火発生水平位置代入 r:正の時右側 負の時左側 リファランス Sgn 参照
048: y1=wh * (0.1 + 0.4*Rnd) 'y1に花火発生垂直位置代入
049: For i=1 to 30
050: v=1+6*Rnd 'v:花火の初速
051: d=2*pi*Rnd 'd:花火の方向
052: vy(i)=v*Sin(d)-10 '花火初速の垂直方向値 リファレンス Sin 参照
053: vx(i)=v*Cos(d) '花火初速の水平方向値 リファレンス Cos 参照
054: a(i)=g / (k*k) -vy(i) / k '花火軌跡計算の途中値
055: Next
056: End If
057: If t<50 Then
058: '花火の水平方向の動き
059: h1.Style.PixelLeft=vx(1)/k*(1-1/e^(k*t))+x1
060: h2.Style.PixelLeft=vx(2)/k*(1-1/e^(k*t))+x1
061: h3.Style.PixelLeft=vx(3)/k*(1-1/e^(k*t))+x1
062: h4.Style.PixelLeft=vx(4)/k*(1-1/e^(k*t))+x1
063: h5.Style.PixelLeft=vx(5)/k*(1-1/e^(k*t))+x1
064: h6.Style.PixelLeft=vx(6)/k*(1-1/e^(k*t))+x1
065: h7.Style.PixelLeft=vx(7)/k*(1-1/e^(k*t))+x1
066: h8.Style.PixelLeft=vx(8)/k*(1-1/e^(k*t))+x1
067: h9.Style.PixelLeft=vx(9)/k*(1-1/e^(k*t))+x1
068: h10.Style.PixelLeft=vx(10)/k*(1-1/e^(k*t))+x1
069: h11.Style.PixelLeft=vx(11)/k*(1-1/e^(k*t))+x1
070: h12.Style.PixelLeft=vx(12)/k*(1-1/e^(k*t))+x1
071: h13.Style.PixelLeft=vx(13)/k*(1-1/e^(k*t))+x1
072: h14.Style.PixelLeft=vx(14)/k*(1-1/e^(k*t))+x1
073: h15.Style.PixelLeft=vx(15)/k*(1-1/e^(k*t))+x1
074: h16.Style.PixelLeft=vx(16)/k*(1-1/e^(k*t))+x1
075: h17.Style.PixelLeft=vx(17)/k*(1-1/e^(k*t))+x1
076: h18.Style.PixelLeft=vx(18)/k*(1-1/e^(k*t))+x1
077: h19.Style.PixelLeft=vx(19)/k*(1-1/e^(k*t))+x1
078: h20.Style.PixelLeft=vx(20)/k*(1-1/e^(k*t))+x1
079: h21.Style.PixelLeft=vx(21)/k*(1-1/e^(k*t))+x1
080: h22.Style.PixelLeft=vx(22)/k*(1-1/e^(k*t))+x1
081: h23.Style.PixelLeft=vx(23)/k*(1-1/e^(k*t))+x1
082: h24.Style.PixelLeft=vx(24)/k*(1-1/e^(k*t))+x1
083: h25.Style.PixelLeft=vx(25)/k*(1-1/e^(k*t))+x1
084: h26.Style.PixelLeft=vx(26)/k*(1-1/e^(k*t))+x1
085: h27.Style.PixelLeft=vx(27)/k*(1-1/e^(k*t))+x1
086: h28.Style.PixelLeft=vx(28)/k*(1-1/e^(k*t))+x1
087: h29.Style.PixelLeft=vx(29)/k*(1-1/e^(k*t))+x1
088: h30.Style.PixelLeft=vx(30)/k*(1-1/e^(k*t))+x1
089: '花火の垂直方向の動き
090: h1.Style.PixelTop =a(1)/e^(k*t)+g/k*t-a(1)+y1
091: h2.Style.PixelTop =a(2)/e^(k*t)+g/k*t-a(2)+y1
092: h3.Style.PixelTop =a(3)/e^(k*t)+g/k*t-a(3)+y1
093: h4.Style.PixelTop =a(4)/e^(k*t)+g/k*t-a(4)+y1
094: h5.Style.PixelTop =a(5)/e^(k*t)+g/k*t-a(5)+y1
095: h6.Style.PixelTop =a(6)/e^(k*t)+g/k*t-a(6)+y1
096: h7.Style.PixelTop =a(7)/e^(k*t)+g/k*t-a(7)+y1
097: h8.Style.PixelTop =a(8)/e^(k*t)+g/k*t-a(8)+y1
098: h9.Style.PixelTop =a(9)/e^(k*t)+g/k*t-a(9)+y1
099: h10.Style.PixelTop =a(10)/e^(k*t)+g/k*t-a(10)+y1
100: h11.Style.PixelTop =a(11)/e^(k*t)+g/k*t-a(11)+y1
101: h12.Style.PixelTop =a(12)/e^(k*t)+g/k*t-a(12)+y1
102: h13.Style.PixelTop =a(13)/e^(k*t)+g/k*t-a(13)+y1
103: h14.Style.PixelTop =a(14)/e^(k*t)+g/k*t-a(14)+y1
104: h15.Style.PixelTop =a(15)/e^(k*t)+g/k*t-a(15)+y1
105: h16.Style.PixelTop =a(16)/e^(k*t)+g/k*t-a(16)+y1
106: h17.Style.PixelTop =a(17)/e^(k*t)+g/k*t-a(17)+y1
107: h18.Style.PixelTop =a(18)/e^(k*t)+g/k*t-a(18)+y1
108: h19.Style.PixelTop =a(19)/e^(k*t)+g/k*t-a(19)+y1
109: h20.Style.PixelTop =a(20)/e^(k*t)+g/k*t-a(20)+y1
110: h21.Style.PixelTop =a(21)/e^(k*t)+g/k*t-a(21)+y1
111: h22.Style.PixelTop =a(22)/e^(k*t)+g/k*t-a(22)+y1
112: h23.Style.PixelTop =a(23)/e^(k*t)+g/k*t-a(23)+y1
113: h24.Style.PixelTop =a(24)/e^(k*t)+g/k*t-a(24)+y1
114: h25.Style.PixelTop =a(25)/e^(k*t)+g/k*t-a(25)+y1
115: h26.Style.PixelTop =a(26)/e^(k*t)+g/k*t-a(26)+y1
116: h27.Style.PixelTop =a(27)/e^(k*t)+g/k*t-a(27)+y1
117: h28.Style.PixelTop =a(28)/e^(k*t)+g/k*t-a(28)+y1
118: h29.Style.PixelTop =a(29)/e^(k*t)+g/k*t-a(29)+y1
119: h30.Style.PixelTop =a(30)/e^(k*t)+g/k*t-a(30)+y1
120: ElseIf t= 50 Then
121: '花火を隠す
122: h1.Style.PixelTop=-100
123: h2.Style.PixelTop=-100
124: h3.Style.PixelTop=-100
125: h4.Style.PixelTop=-100
126: h5.Style.PixelTop=-100
127: h6.Style.PixelTop=-100
128: h7.Style.PixelTop=-100
129: h8.Style.PixelTop=-100
130: h9.Style.PixelTop=-100
131: h10.Style.PixelTop=-100
132: h11.Style.PixelTop=-100
133: h12.Style.PixelTop=-100
134: h13.Style.PixelTop=-100
135: h14.Style.PixelTop=-100
136: h15.Style.PixelTop=-100
137: h16.Style.PixelTop=-100
138: h17.Style.PixelTop=-100
139: h18.Style.PixelTop=-100
140: h19.Style.PixelTop=-100
141: h20.Style.PixelTop=-100
142: h21.Style.PixelTop=-100
143: h22.Style.PixelTop=-100
144: h23.Style.PixelTop=-100
145: h24.Style.PixelTop=-100
146: h25.Style.PixelTop=-100
147: h26.Style.PixelTop=-100
148: h27.Style.PixelTop=-100
149: h28.Style.PixelTop=-100
150: h29.Style.PixelTop=-100
151: h30.Style.PixelTop=-100
152: End If
153: t=(t+1) Mod 70 'tは0から1ずつ増加、tが69の次の時、t+1の値70の剰余0がtに代入される Mod
154: SetTimeOut "tm", tminterval
155:End Sub
156:-->
157:</SCRIPT>
158:</HEAD>
159:<BODY BGCOLOR="mistyrose">
160:<BR><BR><BR><BR>
161:<TABLE align="center"><TR><TD>
162: <FONT color="blue"><B>左がタマ屋</B><br>
163: <FONT color="magenta"><B>右がハナ屋</B></FONT><BR><BR>
164: <B>どっちが多く上がる?</B></FONT>
165:</TD></TR></TABLE>
166:<!--Copyright(c) 2002 Animation studio nezus QQQ All rights reserved.-->
167:</BODY>
168:</HTML>
Lesson07 解説 終わり