計算式と条件式(その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」ってのを忘れてて、一回撃ったら次から二度と撃てないなんていうマヌケなことやっちゃうのを防ぐこともできるし(そういうのやるの俺だけ?^^;)

前のページへ戻る 奮闘記のメニューへ戻る 次のページへ進む