プログラム解説

はじめに

 こんなことをするのはなかなかないと思います。

 しかし、誰かに教えてもらわないと分からないときって言うのは

よくあります!

 そんなときの手助けに少しでもなれれば、と思いすることにしました。

Super Race

  10 DATA 307CAEBBA3C15937,3C428DB1B18D423C,7CBA096959CA7434,

    039DAA6666AA9D03,00FC030A630A03FC,0060676B32020400,

  20 DATA C14B6F3F0A04,ソニック,4,2.2,0.1,1,1,0066D94BB604,ピクゴン,

    2,1.8,0,5,2,B2FF5B7FDA02,マリオ,5,2.2,0,3,2,

    1091A57E3400,カンガルー,3,1.8,0.2,4,2,587B6EFB901C,サボテンダー,0,1,-0.1,2,3,

    1008303E0204,オト,3,2.5,0.1,6,0,082A08770822,ヒカリ,2,5,-2,6,0

ここはデータです。10がキャラの顔で、20が走る時のキャラ、名前、、敵の進める確率、

一回に進むマスの数、敵の場合どれくらいのスピードを引くか、技番号、特殊能力の増える数

となっています。

  30 CLS :CLEAR :RANDOMIZE :RESTORE 10:DIM A(1),B(1),C(1),D(1),

    EE$(1),F$(1),G$(6),L(1),M(1),N(1),

    O(1),P(1),R(1):B(0)=49:B(1)=49:D(0)=1.5:D(1)=1

画面の掃除、値のクリア、DIMで、変数を増やしています。

  40 LOCATE 6,1:PRINT "============":LOCATE 6,3:PRINT "============":LOCATE 8,4:

    PRINT "2P BATTLE":LOCATE 8,5:PRINT "CP BATTLE":LOCATE 7,2:

    PRINT "Super Race":S=1

オープニングを作ります。

  50 LOCATE 7,S+3:PRINT " ":T$= INKEY$ :S=S-(T$="2")+(T$="8"):

    S=S*(S>0)*(S<2)-(S<=0)-(S>=2)*2:

    IF T$="5" THEN CLS :GOTO 60 ELSE LOCATE 7,S+3:PRINT "・":GOTO 50

選択の"・"をつくり、移動させたりします。5をおしたら60,それ以外だと50に行きます。

  60 FOR I=0 TO 5:READ G$(I):GCURSOR (I*24+8,24):GPRINT G$(I):

    NEXT I:LOCATE 4,0:PRINT "Select Caracter":H=0:FOR J=1 TO 2:RESTORE 20

キャラの顔を読み取り、表示する。セレクト画面を作っています。

  70 LINE (7+24*H,16)-(16+24*H,25),R,B:H=H-( INKEY$ ="6")+( INKEY$ ="4"):

    H=H*(H<6)*(H>=0)-6*(H>5)

  80 LINE (7+24*h,16)-(16+24*H,25),S,B

70は□を反転させます。そして移動もできます。条件演算ですね。

80は□を作ります。

  90 IF INKEY$ <>"5" GOTO 70

5を押していなかったら70に戻ります。

  100 FOR I=0 TO H:READ EE$(J-1),KK$,C(J-1),D(J-1),L(J-1),M(J-1),N(J-1):NEXT I

左から0として数えた数だけループして読み取ることでその

キャラのデータを入れることができます。

  110 LOCATE 13*(J-1),4:PRINT J;"P ";KK$:NEXT J

選択したキャラの名前を表示します。

  120 FOR I=0 TO 500:LOCATE 11,5:PRINT "wait":NEXT I

二人目も選択したらここに来ます。ここはwaitを作って息を整えてもらいます。

  130 CLS :GCURSOR (A(0),25):GPRINT EE$(0):GCURSOR (A(1),35):

    GPRINT EE$(1):R(1)=D(1):R(0)=D(0)

二人のキャラを表示します。RはDの控えだと思ってください。

  140 LINE (135,0)-(135,47):PRINT "ヨーイ・・・";:FOR Y=0 TO 500:IF INKEY$ <>""

    THEN PRINT "!ファール!":GOTO 10 ELSE NEXT Y:PRINT "ドン!"

ヨーイドン!をします。フライングをすると10に行きます。

  150 FOR I=0 TO 1:F$= INKEY$ :IF (P(I-(I=0)+(I=1))>0)*(M(I-(I=0)+(I=1))=5)

     GOTO 180 ELSE IF S=1 GOTO 170 ELSE IF (I=1)*( RND (8)=5) THEN F$="5":

    GOTO 190 ELSE IF I=1 THEN A(I)=A(I)-(D(i)+L(I))*( RND (8)>C(I)):GOTO 180

ピクごんの能力が使われているときは180に行き、そうでないときはもし二人対戦なら170にいき、

敵のときでランダムが5なら特殊能力発動のため190にいき、

そうでないならもし移動できないとでたら180に行く

  160 A(I)=A(I)+D(I)*(F$="1")*(B(I)=49)+D(I)*(F$="2")*(B(I)=51):

    IF (F$="1")*(B(I)=49)+(F$="2")*(B(I)=51)>0 THEN B(I)=100-B(I):GOTO 180

ここはCP対戦の部分です。条件演算によりキャラを進めます。

  170 OUT &H11,2:U= INP &H10:A(I)-(D(I)+L(I))*(U=8^(I+1))-(D(I)+L(I))*(U=72)

ここは2P対戦の部分です。同時押し判定しています。

  180 IF A(I)>=130 THEN LOCATE 7,1:PRINT I+1;"P WIN!":END ELSE IF S=1 GOTO 220

130マス目まで進んでいたら〜P WIN!と表示して終わる、そうでないとき、

2P対戦のときは220に行くようになっています。2P対戦には特殊能力機能がないからです。

  190 IF (F$="5") AND (O(I)>60) THEN GOTO 210

もし5を押して、かつ、メーターが60までいっていたら210にいきなさいという意味です。

  200 O(I)=O(I)+N(I):LOCATE 0+I*20,5:PRINT 0(I):P(I)=P(I)+(P(I)>0):

    IF (P(I)=0)*(M(I)=1) THEN D(I)=R(I):GOTO 220 ELSE IF (P(I)=0)*(M(I)=3)

    THEN D(I)=R(I):GOTO 220 ELSE IF (P(I)=0)*(M(I)=2) THEN D(I)=R(I):

    GOTO 220 ELSE GOTO 220

メーターを増やし、特殊能力のターンをへらし、もし特殊能力のターンが終了してるならば、

元のスピードに戻し、220にいくという部分です。

DをRに戻すことで元のスピードに戻るというわけです。

  210 O(I)=0:IF M(I)=1 THEN D(I)=D(I)+2.5:P(I)=30 ELSE IF M(I)=2 THEN A(I)=A(I)+12:

    D(I)=D(I)+4:P(I)=8 ELSE IF M(I)=3THEN D(I)=D(I)+3.5:P(I)=10 ELSE IF M(I)=4

    THEN A(I)=A(I)+15 ELSE IF M(I)=5 THEN P(I)=15

各キャラの特殊能力発動場所です。

  220 GCURSOR (A(I),25+I*10):GPRINT EE$(I):GCURSOR (A(I)-25,25+I*10):

    GPRINT "000000000000000000000000000000000000000000000000000

    000":NEXT I:GOTO 150

キャラの移動です。GPRINT"00000…はキャラの残像を消しています。

 

 

こんな感じですね。変数に関してです。

 A(I):キャラのX軸の値、130になるとゴール

 B(I):1を押すべきか、2を押すべきかです。49のときは1、51のときは2を押さなくてはいけません。

 C(I):敵が進める確率の基準。これが大きいとなかなか敵は進めなくなる。

 D(I):一回に進めるマスの数。値が大きいほど早い。

 EE$(I):走るキャラの姿。

 F$(I):INKEY$に使います。

 G$(I):キャラの顔を入れときます。

 H:キャラ選択で左から何番目かを示します。

 KK$(I):選択したキャラの名前

 L(I):敵のときそのキャラからどれくらいスピードを減らすかです。

 M(I):特殊能力の番号です

 N(I):特殊能力メーターが一回に増える量です。

 O(I):特殊能力メーターです。60以上になると使えるようになります。

 P(I):特殊能力の残ターンです。0になると特殊能力がおわり、元に戻ります

 R(I):元のスピードです。(予備)元に戻すときに使います。

 I,J:ループに使います。

どうでしたか?分からない箇所があれば意見場で質問してください。

また、改造した、や工夫したなどがあればそちらも意見場で披露してください。

改良して頂く分には構いません。ただし、他サイトで発表される場合は参考:ピクごんの間とつけてください。

戻る