烏賊先生のプログラミング道場

プチコン3号


参考資料

§ 基本アクション(スプライト移動) §

歩け、歩け!

ボタンの押し下げ状態

ボタンの押し下げ状態は、BUTTON関数で取得する事が出来ます。BUTTON関数の戻り値(関数の返す値)は、下記の通りです。

ボタン対象ビット2進数値10進数値
十字ボタン上bit000000000000000011
十字ボタン下bit100000000000000102
十字ボタン左bit200000000000001004
十字ボタン右bit300000000000010008
Aボタンbit4000000000001000016
Bボタンbit5000000000010000032
Xボタンbit6000000000100000064
Yボタンbit70000000010000000128
Lボタンbit80000000100000000256
Rボタンbit90000001000000000512
ZRボタンbit1100001000000000002048
ZLボタンbit1200010000000000004096

単独のボタンが押されて居るかを調べ度い時(例えば、十字ボタンの右が押されて居るかを調べ度い時)は、下記の様に記述します。

B=BUTTON(0)
IF B=8 THEN …

複数のボタンが押されて居るかを調べ度い時(例えば、Aボタンを押しながら十字ボタンの右が押されて居るかを調べ度い時)は、下記の様に記述します。

B=BUTTON(0)
IF B AND 8 THEN …
IF B AND 16 THEN …

此れは、Aボタンと十字ボタンの右が同時に押されて居る場合、BUTTON関数の戻り値は24と成るので、IF B=8 THEN も IF B=16 THEN も条件を満たさなく成るので。論理演算子ANDを使用して対象ビットが立って居るかを調べる必要が有るからです。

変数のインクリメントとデクリメント

変数に或る値を加えた値を元の変数に代入する事(インクリメントと謂う)や、変数に或る値を引いた値を元の変数に代入する事(デクリメントと謂う)は、プログラムでは頻繁に行われます。

例えば、変数Xに1を加えた値を変数Xに代入する時や、変数Yに1を引いた値を変数Yに代入する時は、下記の様に記述します(数学的に考えると有り得ない式です)。

X=X+1
Y=Y-1

Smile BASICでは、アセンブラ並みに、INC命令やDEC命令も使用する事が出来ます(但し、Visual BasicやVisual C#の様な X+=1 や Y-=1 は使用する事は出来ません)。

INC X,1
DEC Y,1

猶、加算や減算する値が 1 の場合は省略する事が出来ます(通常、省略します)。

アニメーション

スプライトを動きに合わせてアニメーションさせるには、SPANIMステートメントを使用するより、SPCHRステートメントで、其の都度スプライトの画像を変更します(動きが速過ぎない様にウェイトを入れる必要が有ります)。因みに、SPANIMステートメントは、常にアニメーションさせる場合に有効な手段です。

プログラムの説明

下記のプログラムでは、スプライトが、 ボタンで上下左右にアニメーションしながら動きます。

0000001OPTION STRICT
0000002ACLS
0000003BGFILL 0,0,0,24,14,105
0000004SPSET 0,600
0000005SPSCALE 0,2,2
0000006SPOFS 0,184,104
0000007DIM B,X=184,Y=104,C=0,N=0
0000008
0000009LOCATE 17,29:PRINT "PUSH A TO FINISH"
0000010
0000011WHILE TRUE
0000012  B=BUTTON(0)
0000013  IF B AND 16 THEN BREAK
0000014  IF B AND 1 THEN
0000015    DEC Y:SPCHR 0,608+N
0000016  ENDIF
0000017  IF B AND 2 THEN
0000018    INC Y:SPCHR 0,600+N
0000019  ENDIF
0000020  IF B AND 4 THEN
0000021    DEC X:SPCHR 0,604+N
0000022  ENDIF
0000023  IF B AND 8 THEN
0000024    INC X:SPCHR 0,596+N
0000025  ENDIF
0000026  INC C
0000027  IF (C DIV 10)==1 THEN
0000028    C=0:INC N:IF N>3 THEN N=0
0000029  ENDIF
0000030  SPOFS 0,X,Y
0000031  VSYNC 1
0000032WEND
0000033ACLS:END




ゲームプログラミング道場 ニンテンドー3DS Smile BASIC  Visual Basic,Visual C#

Copyright © King of Squid, All rights reserved.