HSP | ●の周りを点がぐるぐる回るサンプル (東方地霊殿風)

HSP | ●の周りを点がぐるぐる回るサンプル (東方地霊殿風)

最近くだらないサンプル多いな…でもまあ昔よりはましということで書きます。

a_pos=320,440
a_angle=0.0,M_PI/2,M_PI,M_PI*3/2
*main
redraw 0
color 255,255,255 : boxf
stick key,15
if key&1 : a_pos(0)-4 : if a_pos(0)<20 : a_pos(0)=20
if key&2 : a_pos(1)-4 : if a_pos(1)<20 : a_pos(1)=20
if key&4 : a_pos(0)+4 : if a_pos(0)>620 : a_pos(0)=620
if key&8 : a_pos(1)+4 : if a_pos(1)>460 : a_pos(1)=460
a_angle(0)+0.07
a_angle(1)+0.07
a_angle(2)+0.07
a_angle(3)+0.07
color 255 : circle a_pos(0)-15,a_pos(1)-15,a_pos(0)+15,a_pos(1)+15
color ,,255
repeat 4
circle (a_pos(0)+sin(a_angle(cnt))*50+640)\640-5,a_pos(1)+cos(a_angle(cnt))*50-5,(a_pos(0)+sin(a_angle(cnt))*50+640)\640+5,a_pos(1)+cos(a_angle(cnt))*50+5
loop
redraw
await 15
goto *main

カーソルキーで赤い●を操作。青い小さな● (点) はその周りを勝手に回ってます。
本当はcircle命令で結構CPU使うのでbufferにやってgcopyしたほうが処理速くなるんですが…まあとりあえず作ってみただけなので。このままにしときます。
たった22行…。まあこのなかで頑張ったといえば画面の端まで行ったときにもう片側に表示されるようにしたところ?ぐらいですかねえ。
といっても、「\」使って、kの演算子マイナスに対応してないみたいだから画面のサイズ足してからやって、やっているだけという…。
でもまあ昔の私にはできなかったわけだからこんなミジカイサンプルでも自分としてはうれしいです。
(回っている点を画面のすれすれのところにするとちょっとバグりますが…)

追加

title "操作方法 カーソルキ-:自機移動 Z,Xキー:点の個数を減らしたり増やしたり"
// 初期設定
a_pos=320,440
a_angle=0.0
a_mode=0
key_enable=0,0
// メインループ
*main
redraw 0
color 255,255,255 : boxf
color 200,200,200
pos 160,120 : font "MS Pゴシック",200 : mes ""+a_mode+"個"
// キーをチェックして自機移動
stick key,15
if key&1 : a_pos(0)-4 : if a_pos(0)<20 : a_pos(0)=20
if key&2 : a_pos(1)-4 : if a_pos(1)<20 : a_pos(1)=20
if key&4 : a_pos(0)+4 : if a_pos(0)>620 : a_pos(0)=620
if key&8 : a_pos(1)+4 : if a_pos(1)>460 : a_pos(1)=460
// 回転させる
repeat a_mode
a_angle(cnt)+0.07
loop
// 自機と周りの点移動
color 255 : circle a_pos(0)-15,a_pos(1)-15,a_pos(0)+15,a_pos(1)+15
color ,,255
repeat a_mode
circle (a_pos(0)+sin(a_angle(cnt))*50+640)\640-5,a_pos(1)+cos(a_angle(cnt))*50-5,(a_pos(0)+sin(a_angle(cnt))*50+640)\640+5,a_pos(1)+cos(a_angle(cnt))*50+5
loop
// Z,X keyで点の個数切り替え。押しっぱなしでも1つづつしか増減しない
getkey g_key,'Z'
if g_key=1 {
if key_enable(0)=0 {
a_mode-
if a_mode<0 : a_mode=0
gosub *mode_shift
}
key_enable(0)=1
} else {
key_enable(0)=0
}
getkey g_key,'X'
if g_key=1 {
if key_enable(1)=0 {
a_mode+
gosub *mode_shift
}
key_enable(1)=1
} else {
key_enable(1)=0
}
redraw
await 15
goto *main
// 個数変更時に点の配置変更
*mode_shift
repeat a_mode
a_angle(cnt)=M_PI*2*cnt/a_mode
loop
return

個数変更できるようにしてみました。ついでに説明も少し足しました。


「HSP | ●の周りを点がぐるぐる回るサンプル (東方地霊殿風)」への7件のフィードバック

  1. 東方地霊殿風ってそういうことかww
    実行してみて納得しましたww

  2. いいですね!sinとcosの例としても良いサンプルです。
    ¥はマイナスにすると変な答えになってしまうので^^;
    そうです、法の数だけ足してやればOKです。

  3. >Cookiesさん
    ありがとうございます!
    さらに地霊殿ぽく (?) 個数変更できるようにしました!
    >フェルミウム湾さん
    昔の私はsin,cosがよくわかっていなかったので回転どうやるんだろうとか思っていました!sin,cos使うと一発ですね!
    「負の数\数」とやると「-(絶対値\数)」になっちゃうみたいです…。でもまあそもそも負の数の割り算のあまりなんてやったことないし、あるとしても定義しだいになるからしようがないですね…。
    >橙さん
    橙さんもHSPやりましょうよ!英語だけどC言語とかのコンパイラの面倒くさい処理とかは勝手にやってくれるので楽ですよ!

  4. 負の数であまりを出すのは意外とややこしく、
    間違って書かれている文書もあるので注意が必要です。
    Windowsの電卓でも間違ってる(?)みたいなので驚きましたが……
    例えば-11÷3を計算するとき、
    -3あまり-2とするのは間違いです。
    あまりというのはあまった数のことなので、負になっちゃだめなんです。
    よって、-11÷3=-4あまり1となります。
    商を減らしてあまりは正にしなければならないのです。
    このことで演算結果がおかしくなっちゃうんだと思います。

  5. >>フェルミウム湾さん
    へー。そうだったんですか。
    一つ賢くなれました!ww

  6. さすが数学のフェルミウム湾さん!
    たしかにそういうことになりますね。
    割られる数=a商+あまり
    0≦あまり<割られる数
    はふのかずでも成り立つんですね!一瞬気が付きませんでした!(一瞬だけ…)

コメントは受け付けていません。