{Ver1.3の変更点 1)ひまわりのバージョンによってエラーとなるのを修正。 2)うずまき状の描画ルーチンを追加。 3)描画パターンを10種類に追加。 4)描画個数など、変更パラメータを増やした。 }
{---プログラム掲示板投稿フォーム--- 【ソフト名】3Dスーパーグラデーションボール (バージョン 1.3) 【作 成 者】北神 陽太 (連絡先:y-kitagami@nifty.ne.jp) http://homepage1.nifty.com/kitagami/index.htm 【種 別】フリーソフトウェア 【ひまわりのバージョン】ver.1.20 【転 件】可(転載条件:ご連絡があると喜びます) 【ひまわり本体への梱包】可 【実行時に利用作成するファイル】無 【コメント】 ・超美麗なボールを描き、グラデーションしながら移動します。 ・画面のある1点を中心(奥行き)とし、3Dのように描画。 ・移動アルゴリズムは、簡単な計算で10種類用意。 ・画面をクリックすると、別の描画を始めます。 ・パラメータを調整したり、新しい移動ルーチンを追加するのも簡単。 ・スクリーンセーバーへの応用もできるでしょう。 ---投稿フォームここまで---}
'システム定数 机幅=デスクトップの幅 '*0.3 '描画が遅い人は<*0.3>を、コメントを、はずし、 机高=デスクトップの高さ'*0.3 '小さなウィンドでお楽しみください
調整パターン数=10'●移動調整サブの数 バータイトル=「3DスーパーグラデーションボールVer1.3 By Y.KITAGAMI 2002(C)」 RAD=3.1415926/180
'初期設定 母艦の、サイズは、(0,0,机幅,机高)。その、背景色は、黒色。 その、タイトルは、バータイトル。 その、イベントは、母艦クリック。 母艦を、中央へ移動。
グラデーション間隔=10 ' 1以上。次の色に変わるまでに描画する玉の個数 描画個数=グラデーション間隔 '描画した玉のカウンタ スパイラル描画回数=0
-1で、乱数初期化。 机幅の、乱数。x=それ。 机高の、乱数。y=それ。 xc=x。yc=y。'スパイラル用
x移動方向=1 y移動方向=1 ペン太さ=5
カラー作成を、呼ぶ。 RF=R。GF=G。BF=B。 '最初の色を設定 母艦クリックを、呼ぶ。
*メイン グラデーション計算を、呼ぶ。 '移動番号=6'移動ルーチンデバッグ用 もし、移動番号=0なら 移動0を、呼ぶ。'移動調整サブの数だけ記述します もし、移動番号=1なら 移動1を、呼ぶ。 もし、移動番号=2なら 移動2を、呼ぶ。 もし、移動番号=3なら 移動3を、呼ぶ。 もし、移動番号=4なら 移動4を、呼ぶ。 もし、移動番号=5なら 移動5を、呼ぶ。 もし、移動番号=6なら 移動6を、呼ぶ。 もし、移動番号=7なら 移動7を、呼ぶ。 もし、移動番号=8なら 移動8を、呼ぶ。 もし、移動番号=9なら 移動9を、呼ぶ。 玉描画を、呼ぶ。 メインへ、飛ぶ。
*母艦クリック '描画するパターンをランダムに選択 黒で、画面クリア。 x中心=INT(RND*机幅)'3Dの奥(中心)となる座標 y中心=INT(RND*机高) 移動番号=INT(RND*(調整パターン数)) 描画個数=0'グラデーション間隔 '描画した玉のカウンタ 母艦の、タイトルは、「{バータイトル} : パターン={移動番号} 」 戻る。
*玉描画 玉サイズ回( '玉の大きさと色をグラデーションさせます。 明度=回数/玉サイズ。 ペン色=RGB(R*明度,G*明度,B*明度)。 '塗り色=RGB(R*明度,G*明度,B*明度)。'使用しないほうが速いです
'4つの座標を計算 x1=x。y1=y。'ノーマル座標 x2=INT(y*(机幅/机高))。y2=INT(x*(机高/机幅))。'x-y入れ替え座標 x3=ABS(x-机幅)。y3=ABS(y-机高) 'ノーマル シンメトリー用 x4=ABS(x2-机幅)。y4=ABS(y2-机高)'x-y入れ替え シンメトリー
zx=x1。zy=y1。zz=回数。奥行き計算を、呼ぶ。 (x1-z,y1-z)から、(x1+z,y1+z)へ、円形。 もし、描画数=1なら、玉描画完了へ、飛ぶ。 zx=x2。zy=y2。zz=回数。奥行き計算を、呼ぶ。 (x2-z,y2-z)から、(x2+z,y2+z)へ、円形。 もし、描画数=2なら、玉描画完了へ、飛ぶ。 zx=x3。zy=y3。zz=回数。奥行き計算を、呼ぶ。 (x3-z,y3-z)から、(x3+z,y3+z)へ、円形。 もし、描画数=3なら、玉描画完了へ、飛ぶ。 zx=x4。zy=y4。zz=回数。奥行き計算を、呼ぶ。 (x4-z,y4-z)から、(x4+z,y4+z)へ、円形。 もし、描画数=4なら、玉描画完了へ、飛ぶ。 *玉描画完了 )
描画処理反映。 描画個数=描画個数+1 戻る。
*奥行き計算 '中心からの距離によって3D化(玉の大きさを決定) z=玉サイズ-zz'回数 もし、奥行=オンなら、( 倍率=(玉サイズ/机幅)*0.1 距離=ABS(x中心 - zx) + ABS(y中心 - zy) 距離=距離*倍率 z=INT(距離 * z) ) 戻る。
*グラデーション計算 'グラデーション間隔までの色を計算します
'次の色を設定 もし、グラデーション間隔=描画個数なら ( 'カラーのFrom-Toを更新 RF=RT。GF=GT。BF=BT。 カラー作成を、呼ぶ。 RT=R。GT=G。BT=B。'To R=RF。G=GF。B=BF。'From 'グラデーションのステップ値 RS=(RT-RF)/グラデーション間隔 GS=(GT-GF)/グラデーション間隔 BS=(BT-BF)/グラデーション間隔 描画個数=0 )
R=R+RS G=G+GS B=B+BS '範囲外チェック もし、R<0なら R=0 もし、G<0なら G=0 もし、B<0なら B=0 もし、R>255なら R=255 もし、G>255なら G=255 もし、B>255なら B=255
戻る。
*カラー作成 'はっきりした色調で作成します 3の、乱数。R=INT(それ)*127 3の、乱数。G=INT(それ)*127 3の、乱数。B=INT(それ)*127 もし、(R=0 かつ G=0 かつ B=0)なら カラー作成へ、飛ぶ。 戻る。
*反射移動処理 x=x+((移動距離+INT(移動調整x))*x移動方向) y=y+((移動距離+INT(移動調整y))*y移動方向) '衝突判定 もし、x>机幅-玉サイズなら x移動方向=-1 もし、y>机高-玉サイズなら y移動方向=-1 もし、x<玉サイズなら x移動方向=1 もし、y<玉サイズなら y移動方向=1 戻る。
*スパイラル移動処理
スパイラル描画回数=スパイラル描画回数+ステップ '描画カウンタ判定 もし、スパイラル描画回数>=回転数なら、( スパイラル描画回数=0。 x中心=INT(RND*机幅)。'中心となる座標 y中心=INT(RND*机高)。 ) x=x中心+INT(SIN(スパイラル描画回数*RAD)*スパイラル描画回数/ステップ)) y=y中心+INT(COS(スパイラル描画回数*RAD)*スパイラル描画回数/ステップ)) 戻る。
'●基本移動アルゴリズムをここでいじくります。 '追加した場合、システム定数の「調整パターン数」を増やし、 'メインに呼び出す行を追加してください。
*移動0 'ノーマルタイプの反射型移動 描画数=4 玉サイズ=20 グラデーション間隔=10 ' 1以上。次の色に変わるまでに描画する玉の個数 移動距離=5 移動調整x=5 移動調整y=5 奥行=オン 反射移動処理を、呼ぶ。 戻る。
*移動1 'うずまきタイプ「アンモナイト」を描きます 描画数=1 玉サイズ=20 グラデーション間隔=50 ' 1以上。次の色に変わるまでに描画する玉の個数 ステップ=20 回転数=1800 奥行=オフ スパイラル移動処理を、呼ぶ。 戻る。
*移動2 '反射型、タンジェントを使って予想外の描画 描画数=4 玉サイズ=20 グラデーション間隔=10 ' 1以上。次の色に変わるまでに描画する玉の個数 移動距離=1 移動調整x=ABS(COS(x)*10) 移動調整y=ABS(TAN(y)*10) 奥行=オン 反射移動処理を、呼ぶ。 戻る。
*移動3 'SQRTを使って飛び跳ねるように反射 描画数=1 玉サイズ=20 グラデーション間隔=10 ' 1以上。次の色に変わるまでに描画する玉の個数 移動距離=1 移動調整x=ABS(SIN(x *RAD)*20) 移動調整y=ABS(SQRT(ABS(y) *RAD)*20) 奥行=オフ 反射移動処理を、呼ぶ。 戻る。
*移動4 'SINとCOSによる干渉 描画数=4 玉サイズ=20 グラデーション間隔=10 ' 1以上。次の色に変わるまでに描画する玉の個数 移動距離=1 移動調整x=ABS(SIN(x *RAD)*20) 移動調整y=ABS(COS(y *RAD)*20) 奥行=オン 反射移動処理を、呼ぶ。 戻る。
*移動5 'うずまきタイプ「にょろ」を描きます 描画数=1 玉サイズ=15 グラデーション間隔=10 ' 1以上。次の色に変わるまでに描画する玉の個数 ステップ=40 回転数=500 奥行=オフ スパイラル移動処理を、呼ぶ。 戻る。
*移動6 'うずまきタイプ「花火」を描きます 描画数=1 玉サイズ=22 グラデーション間隔=10 ' 1以上。次の色に変わるまでに描画する玉の個数 ステップ=36 回転数=1800 奥行=オン スパイラル移動処理を、呼ぶ。 戻る。
*移動7 '反射と、うずまきタイプ「?」を描きます 描画数=1 玉サイズ=20 グラデーション間隔=10 ' 1以上。次の色に変わるまでに描画する玉の個数 ステップ=40 回転数=1800 奥行=オフ 移動距離=1 x中心=x+INT(ABS(COS(x *RAD)*20)) y中心=y+INT(ABS(SIN(y *RAD)*20)) スパイラル移動処理を、呼ぶ。 移動調整x=ABS(SIN(x *RAD)*20) 移動調整y=ABS(COS(y *RAD)*20) 反射移動処理を、呼ぶ。 戻る。
*移動8 'うずまきタイプ「サクラ」を描きます 描画数=1 玉サイズ=10 グラデーション間隔=10 ' 1以上。次の色に変わるまでに描画する玉の個数 ステップ=70 回転数=1440 奥行=オフ スパイラル移動処理を、呼ぶ。 戻る。
*移動9 'うずまきタイプ「ひとで」を描きます 描画数=1 玉サイズ=10 グラデーション間隔=40 ' 1以上。次の色に変わるまでに描画する玉の個数 ステップ=40 回転数=1800 奥行=オフ x中心=x+INT(ABS(SIN(x *RAD)*2)) y中心=y+INT(ABS(COS(y *RAD)*2)) スパイラル移動処理を、呼ぶ。 戻る。
|