« [奮闘記]ちゃんと自機がカーソルに従って動いた理由の解析 | トップページ | [奮闘記]実はそんなに難しいことではなかった、カーソルで動くわけ »

[奮闘記]計算式と条件式(その1)

しばらく更新が停滞してたけど、手をつけてなかったわけじゃないです。結構思ったとおりにいろんなことができるようになったんで、製作に熱中してたのだ^^;

っつーわけで(どういうわけだ?)、今回のお題は「条件式と計算式」。数学嫌い~(T-T)などと言ってるわけにもいかないのだ。もちろん今までのプログラムでも、計算式とか条件式は使ってきた。でも、ちょっとした工夫で、式を短くしたり複雑なことができるようになるのだ。

例えば「変数Aに1づつ加えていき、Aが20になったら0に戻す、ということを繰り返す」てのを普通に書くとこんな感じになる。


*TEST
A=A+1
IF A=20 : A=0

GOTO *TEST

この2行、ちょっと工夫すれば1行で書けるのだ。嘘ではない。本当である。下を見てみなさい。


*TEST
A=A+1 : IF A=20 : A=0
GOTO *TEST

うーん・・・確かに1行になってる・・・ってをい(-_-;

これは単なる冗談。本当は、こういうふうに書く。


*TEST
A=(A+1)\20
GOTO *TEST

以前「よく使い方がわからん」って言ってた『』。そう、これは 割り算の余りを算出する記号だ。要するに20で割り切れる場合ってのは、余りが0なわけだよな。一番最初、Aが0の場合から順番に考えてみんさい。0に1 足して20で割った余りがAに代入されるから、A=1になるでしょ?次には1に1足して20で割るから余りは2。次には2に1足して20で割るから余りは 3、、、、、。嘘だと思ったら、この行の次に「PRINT A」って追加してみな。0~19の数字が順番に並ぶから。

え?これをどう使うかって?そりゃーあんた、考えてみなって(なんか偉そう^^;)。例えばあるループ中で、数回に一回だけ処理したいことがあったとしよ う。例えば「自機に弾を撃たせる条件」なんかを考えてみるとわかりやすいかな?あんまり連射ができないようにしたいなら、3~4回に一回だけ弾を撃たせる ようにすれば良いわけだ。そういう場合、今までだったらこういう感じに書いてたと思う。


*JIKI
STICK PAT,15
T=T+1 : IF T=4 :  SHOT=1 : T=0
XV=(PAT>>2&1)-(PAT&1)
YV=(PAT>>3&1)-(PAT>>1&1)
MX=XV*MOVE+MX : MY=YV*MOVE+MY
IF MX<0   : MX=O
IF MX>566 : MX=566
IF MY<0   : MY=0
IF MY>364 : MY=364
POS MX,MY : GMODE 2 : GCOPY 2,0,0,32,32
RETURN

んで、「SHOT=1」の場合だけ弾を撃たせるようにすればいいわけだ。でもこれを『¥』を使って書くとこうなる。


*JIKI
STICK PAT,15
T=(T+1)\4 : IF T=0 : SHOT=1
XV=(PAT>>2&1)-(PAT&1)
YV=(PAT>>3&1)-(PAT>>1&1)
MX=XV*MOVE+MX : MY=YV*MOVE+MY
IF MX<0   : MX=O
IF MX>566 : MX=566
IF MY<0   : MY=0
IF MY>364 : MY=364
POS MX,MY : GMODE 2 : GCOPY 2,0,0,32,32
RETURN

まぁあんまり短くなってないけど、Tを0に戻す手間は省けてるよね。これがもっと複雑なことになってくると、重宝するような気がしない?「T=0」っての を忘れてて、一回撃ったら次から二度と撃てないなんていうマヌケなことやっちゃうのを防ぐこともできるし(そういうのやるの俺だけ?^^;)

« [奮闘記]ちゃんと自機がカーソルに従って動いた理由の解析 | トップページ | [奮闘記]実はそんなに難しいことではなかった、カーソルで動くわけ »

1.奮闘記」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/67538/57445601

この記事へのトラックバック一覧です: [奮闘記]計算式と条件式(その1):

« [奮闘記]ちゃんと自機がカーソルに従って動いた理由の解析 | トップページ | [奮闘記]実はそんなに難しいことではなかった、カーソルで動くわけ »