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

プチコン3号


参考資料

§ 回転罠1(トラップ) §

スプライトのSPANIMステートメントで回転のアニメーションを設定する事が出来ます。併し、16×48のスプライトを回転させても、スプライト同士の衝突判定を行う範囲は、回転と共に移動する事は無く、思う様な結果は得られません。其処で、3個の16×16のスプライトをSPLINKステートメントで連結する必要が有ります。

下記のプログラムでは、回転する罠(トラップ)を実現して居ます。キャラクタは、 ボタンで上下左右に動き(上下は衝突位置確認用)、 ボタンでジャンプし、 ボタンでダッシュします。 ボタンで何度でも挑戦出来ます。終了するには、キーボード画面の STOP をタップして下さい。

0000001OPTION  STRICT
0000002ACLS
0000003DIM  I,J,B,X,Y,N,A1,A2,A3
0000004
0000005GFILL  0,0,399,239,RGB(0,0,128)
0000006
0000007FOR  I=0  TO  24
0000008  BGPUT  0,I,13,614
0000009  BGPUT  0,I,14,646
0000010NEXT
0000011FOR  I=6  TO  18  STEP  6
0000012  FOR  J=0  TO  10
0000013    NGPUT  0,I,J,491
0000014  NEXT
0000015NEXT
0000016
0000017SPSET  0,496
0000018SPOFS  0,0,192
0000019
0000020SPSET  1,1247
0000021SPOFS  1,104,160
0000022SPSET  2,1248
0000023SPOFS  2,16,0
0000024SPSET  3,1249
0000025SPOFS  3,32,0
0000026SPLINK  2,1
0000027SPLINK  3,1
0000028
0000029SPSET  4,1247
0000030SPOFS  4,200,160
0000031SPSET  5,1248
0000032SPOFS  5,16,0
0000033SPSET  6,1249
0000034SPOFS  6,32,0
0000035SPLINK  5,4
0000036SPLINK  6,4
0000037
0000038SPSET  7,1247
0000039SPOFS  7,296,160
0000040SPSET  8,1248
0000041SPOFS  8,16,0
0000042SPSET  9,1249
0000043SPOFS  9,32,0
0000044SPLINK  8,7
0000045SPLINK  9,7
0000046
0000047SPCOL  0
0000048SPCOL  1 : SPCOL  2 : SPCOL  3
0000049SPCOL  4 : SPCOL  5 : SPCOL  6
0000050SPCOL  7 : SPCOL  8 : SPCOL  9
0000051
0000052@START
0000053X=0 : Y=192 : A1=0 : A2=90 : A3=180 : D=1 : N=0
0000054WHILE  TRUE
0000055  B=BUTTON(0)
0000056  IF  B  AND  64  THEN  BREAK
0000057  IF  B  AND  32  THEN
0000058    D=D*1.2 : IF  D>5  THEN  D=5
0000059  ELSE
0000060    D=1
0000061  ENDIF
0000062  IF  B  AND  4  THEN
0000063    DEC  X,D : IF  X<0  THEN  X=0
0000064    SPCHR  0,504+(N  DIV  10)
0000065  END IF
0000066  IF  B  AND  8  THEN
0000067    INC  X,D : IF  X>383  THEN  X=383
0000068    SPCHR  0,496+(N  DIV  10)
0000069  ENDIF
0000070  
0000071  IF  B  AND  1  THEN  DEC  Y
0000072  IF  B  AND  2  THEN  INC  Y
0000073  
0000074  INC  A1 : IF  A1>359  THEN  A1=0
0000075  INC  A2 : IF  A2>359  THEN  A2=0
0000076  INC  A3 : IF  A3>359  THEN  A3=0
0000077  SPROT  1,A1
0000078  SPROT  2,A1
0000079  SPROT  3,A1
0000080  SPROT  4,A2
0000081  SPROT  5,A2
0000082  SPROT  6,A2
0000083  SPROT  7,A3
0000084  SPROT  8,A3
0000085  SPROT  9,A3
0000086  
0000087  SPOFS  0,X,Y
0000088  
0000089  IF  SPHITSP(0)>0  THEN  BREAK
0000090  INC  N : IF  N>30  THEN  N=0
0000091  VSYNC  1
0000092WEND
0000093LOCATE  18,10 : PRINT  "PUSH A BUTTON!"
0000094REPEAT
0000095  B=BUTTON(0)
0000096UNTIL  (B  AND  16)>0
0000097CLS : GOTO  @START

猶、下記では、衝突判定範囲が移動しない。

0000001OPTION  STRICT
0000002ACLS
0000003DIM  I,J,B,X,Y,N,A1,A2,A3
0000004
0000005GFILL  0,0,399,239,RGB(0,0,128)
0000006
0000007FOR  I=0  TO  24
0000008  BGPUT  0,I,13,614
0000009  BGPUT  0,I,14,646
0000010NEXT
0000011FOR  I=6  TO  18  STEP  6
0000012  FOR  J=0  TO  10
0000013    NGPUT  0,I,J,491
0000014  NEXT
0000015NEXT
0000016
0000017SPSET  0,496
0000018SPOFS  0,0,192
0000019
0000020SPSET  1,1250
0000021SPHOME  1,1,4
0000022SPOFS  1,104,160
0000023SPSET  2,1250
0000024SPHOME  2,1,4
0000025SPOFS  2,200,160
0000026SPSET  3,1250
0000027SPHOME  3,1,4
0000028SPOFS  3,296,160
0000029
0000030SPCOL  0,TRUE : SPCOL  1,TRUE
0000031SPCOL  2,TRUE : SPCOL  3,TRUE
0000032
0000033@START
0000034X=0 : Y=192 : A1=0 : A2=90 : A3=180 : D=1 : N=0
0000035WHILE  TRUE
0000036  B=BUTTON(0)
0000037  IF  B  AND  64  THEN  BREAK
0000038  IF  B  AND  32  THEN
0000039    D=D*1.2 : IF  D>5  THEN  D=5
0000040  ELSE
0000041    D=1
0000042  ENDIF
0000043  IF  B  AND  4  THEN
0000044    DEC  X,D : IF  X<0  THEN  X=0
0000045    SPCHR  0,504+(N  DIV  10)
0000046  END IF
0000047  IF  B  AND  8  THEN
0000048    INC  X,D : IF  X>383  THEN  X=383
0000049    SPCHR  0,496+(N  DIV  10)
0000050  ENDIF
0000051  
0000052  IF  B  AND  1  THEN  DEC  Y
0000053  IF  B  AND  2  THEN  INC  Y
0000054  
0000055  INC  A1 : IF  A1>359  THEN  A1=0
0000056  INC  A2 : IF  A2>359  THEN  A2=0
0000057  INC  A3 : IF  A3>359  THEN  A3=0
0000058  SPROT  1,A1
0000059  SPROT  2,A2
0000060  SPROT  3,A3
0000061  SPOFS  0,X,Y
0000062  IF  SPHITSP(0)>0  THEN  BREAK
0000063  INC  N : IF  N>30  THEN  N=0
0000064  VSYNC  1
0000065WEND
0000066LOCATE  18,10 : PRINT  "PUSH A BUTTON!"
0000067REPEAT
0000068  B=BUTTON(0)
0000069UNTIL  (B  AND  16)>0
0000070CLS : GOTO  @START



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

Copyright © King of Squid, All rights reserved.