HSPで適当に作ったプログラムを書いていきます。使えると思ったら使ってやってください。
アルゴリズムがよく分からない人向けです。上級者の人に役立つものはないと思います。
誤字脱字、何か不明な点や間違っている点がありましたら、x0o0r@yahoo.co.jpまでお願いします。誰も送信しないと思うけど。
適当に思いついたものを載せていきます。難しいのはないです。
使う画像。「number.gif」
celload "number.gif" a=0 repeat color 255,255,255 : boxf a++ : b=a repeat 9 pos 160-(20*cnt),0 : gcopy 1,(b\10)*20,20,20 b/=10 loop redraw 1 : redraw 0 : wait loop
その500回のループとは別に、200回のループ内で200個の●を表示するとする。
プログラム的には以下のようになる。
screen 0,500,500 repeat color 255,255,255 : boxf repeat 500 bx=rnd(550)-50 by=rnd(550)-50 bc=rnd(100) color bc,bc,bc : boxf bx,by,bx+rnd(50),by+rnd(50) loop repeat 200 cx=rnd(550)-50 cy=rnd(550)-50 cc=rnd(100) color bc,bc,bc : circle bx,by,bx+rnd(50),by+rnd(50) loop redraw 1 : redraw 0 : await loop
次に、500回のループの中に200回のループで行うはずの処理を入れ、条件判断で200回だけ●を表示する処理を行わせる。
screen 0,500,500 repeat color 255,255,255 : boxf repeat 500 bx=rnd(550)-50 by=rnd(550)-50 bc=rnd(100) color bc,bc,bc : boxf bx,by,bx+rnd(50),by+rnd(50) if cnt<200{ cx=rnd(550)-50 cy=rnd(550)-50 cc=rnd(100) color bc,bc,bc : circle bx,by,bx+rnd(50),by+rnd(50) } loop redraw 1 : redraw 0 : await loop
一見、一つのループの中にまとめているのだから軽くなるのかと思ったが、そうでもないようだ。
条件判断のせいで処理が増しているのかと思い、■と●を両方とも500にしてみる。
二つのループに分けたものだと、FPSは235、まとめたものでは215だった。
どうやら、ループはまとめるよりもこまめに分断したほうが処理は早いようだ。
他にもループの数を四つ八つと増やしてみたが、どれも結果は同じだった。
もしループを一つにまとめて処理を軽くした気になってる人がいたら、なるべく分けるように心がけよう。
以上。
repeat title ""+T if A != gettime(6) : A = gettime(6) : T ++ wait loop
解決方法として(ゲームなどで使用する場合)、Tの初期値を−2くらいに設定しておき、Tが0になるまでなんらかの方法で待機させる、など。
あまり精度を求めない状況で使うのが好ましい。
追記
学校の先輩が正確に秒数を計るアルゴリズムを教えてくれた。
start_time=double(gettime(0)*31536000) +double(gettime(1)*2592000) +double(gettime(3)*86400) +double(gettime(4)*3600) +double(gettime(5)*60) +double(gettime(6)) +double(gettime(7))/double(1000) repeat title ""+count_time now_time=double(gettime(0)*31536000) +double(gettime(1)*2592000) +double(gettime(3)*86400) +double(gettime(4)*3600) +double(gettime(5)*60) +double(gettime(6)) +double(gettime(7))/double(1000) count_time=double(now_time)-double(start_time) await 1 loop
このアルゴリズムの問題点は特になし。負荷もそれほどないので、精度を求めるならこっちらのほうが良い。
使う画像。「bg.jpg」、「object.bmp」
HAWKEN好きなんだようん。……世界観がね。
celload "bg.jpg" celload "object.bmp" repeat color 255,0,255 : boxf pos 170,105 : gmode 4,300,270,255 : gcopy 2 pget mousex,mousey if(ginfo_r!=255 && ginfo_g!=0 && ginfo_b!=255){ title "命中!" }else{ title "ハズレ!" } pos 0,0 : gcopy 1,0,0,640,480 color 255,0,255 pos 170,105 : gmode 4,300,270,255 : gcopy 2 redraw 1 : redraw 0 : await 10 loop
要は一回単色の背景の上に当たり対象物を置いて、色が違うかどうか判定して、その後もう一回描画し直してるだけ。
めっちゃ正確だけど、描画を二回行うので弾幕飛び交うSTGとかには不向き。そして分かっているとは思うが点座標の当たり判定しか行えない。
じゃあ何に使えるのか? 今後輩にこの手法を使ってイライラ棒ゲーム作らせてます。使い所は各自で考えて。使えない可能性も有。
以上。
#const n 30 for y,0,ginfo_winy/n,1 for x,0,ginfo_winx/(n*2)+1,1 boxf (x*2+(y\2))*n,y*n,(x*2+(y\2))*n+n,y*n+n next next
nは■の大きさ。式が少し複雑だけど、そこは各自でなんとかしてください(丸投げ)。
一応補足しておくと、(y¥2)には1か0が入る。yが偶数のときは一番左の四角が黒になって、奇数なら白になるようにしている。
以上。
・えんどうのホームページ
学校の先輩のウェブサイト。勝手にリンク。
・Machine language
2進数をいっぱい求めようというプロジェクト。無限に求めることが可能だが、ページが激重になるのでとりあえず1000乗までと、1万・10万・100万。
・Binary
Machine languageのために作ったソフト。2の累乗をPCのスペックが許す限り求め続ける。自分の環境では100万乗を求めるのに13秒、1000万乗なら20分で求められる。
・ccth
C言語ソースを色付きでhtml形式に変換するソフト。同じようなのが沢山あるけど、とりあえず自分が納得する形に仕上げただけ。
相互リンクこないと思うけど募集してます。リンクはフリーです。誰もしないと思うけど。