ごく普通の縦スクロールドライブゲームです。IchigoCake BASIC でもスプライトを全部使って表示すればこういうのができるんだという参考になればと思い作りました。PanCake C のバージョン 1.2 だとスプライトが正しい順番で表示されないので、1.2.1 にアップデートして下さい。
(2021/8/23)
車の左右移動の絵のパターンを追加しました。道路の車線の絵も変更しました。
【遊び方】
スタートすると画面が自動的にスクロールします。カーソルキーの左右で車を動かして下さい。道路からはみ出すか、木にぶつかるとゲームオーバーです。Enterキーで再スタートです。ゲームが進むにつれてレベルが上がりスピードアップします。スピードが上がると、車の左右の移動量も変わるので操作に気をつけて下さい。
【プログラムについて】
画面はスプライト32個使って表示していて、車とスコア用の数字以外の全てのスプライトをドット単位で下へ移動させて行くことで画面がスクロールしているように見せています。スピードは3段階ですが、スプライトの縦の移動量を増やすことで速くしています。縦の移動が速くなると車の左右移動もそれに対応できるように横の移動量を増やしています。なので、速くなるにつれて動きがだんだん粗くなってしまいますが、BASICプログラムでは(というか私の能力では)これが限界かなと思います。車の衝突判定は遊びやすいように少し甘めにしてあります。
<プログラム内容>
20-120行目 初期設定
200-270行目 初期画面
300行目 ここからメインループ
310-360行目 車のヒットチェック、移動
400-620行目 道のスクロール
700-810行目 家、芝、木のスクロール
910行目 メインループここまで
1000-1040行目 ゲームオーバー
1100-1120行目 BGMのテンポ変更
1200-1350行目 スプライトパターン設定
<スプライト番号>
00-15 道 16個 (2列*8行)
16-19 家 04個
20-25 芝 06個
26 木A 01個
27 木B 01個
28 車(爆発) 01個
29-31 スコア 03個
<スプライトパターン>
#F0 道・赤ライン左曲がり左側
#F1 道・赤ライン左曲がり右側
#F2 道・白ライン左曲がり左側
#F3 道・白ライン左曲がり右側
#F4 道・赤ライン直線左側
#F5 道・赤ライン直線右側
#F6 道・白ライン直線左側
#F7 道・白ライン直線右側
#F8 道・赤ライン右曲がり左側
#F9 道・赤ライン右曲がり右側
#FA 道・白ライン右曲がり左側
#FB 道・白ライン右曲がり右側
#FC 車・左曲がり
#FD 車・右曲がり
<変数>
A 汎用的代入用
B 汎用的代入用
C 汎用的代入用
D 汎用的代入用
E 汎用的代入用
F 汎用的代入用
G 車のパターン
I FORループ用
J FORループ用
L レベル
M コース変化用カウント
N 次のレベルアップスコア
P 車の横移動量
Q スクロール1回の縦移動量
S スコア
T 木の有無(0:なし、1:あり)
U 道の赤白カウント(0:赤、1:白)
V 次に出る道のx座標の増減(-1,0,+1)
W 1つ前の道のx座標の増減(-1,0,+1)
X 車のx座標
<配列>
[00]-[07] 道の処理順 08個 (#800-#80F)
[08]-[15] 処理順コピー用 08個 (#810-#81F)
[16]-[31] 道の座標 16個 (8個*2)
[32]-[39] 家の座標 08個 (4個*2)
[40]-[51] 芝の座標 12個 (6個*2)
[52]-[53] 木Aの座標 02個 (1個*2)
[54]-[55] 木Bの座標 02個 (1個*2)
[56]-[65] 家・芝のxプラス分 10個 (道のx座標を基準にしたプラス値)
[70]-[75] レベルデータ 06個 (縦移動量・ドット)
[80]-[85] レベルデータ 06個 (横移動量・ドット)
[90]-[95] レベルデータ 06個 (障害物有無・0:なし、1:あり)
[100]-[105] レベルデータ 06個 (BGM速度・テンポ)
[110]-[114] レベルデータ 05個 (レベルアップスコア・点)
10 'Normal_Drive 20 VIDEO0:CLV:PC.RESET:PC.SSTART #18 30 GSB1200 40 LET[32],16,0,56,16,16,32,56,48 50 LET[40],24,-8,8,8,64,8,48,24,8,40,64,40,-8,-8,-8,24 60 LET[56],64,24,64,24,72,56,32,16,56,32 70 LET[70],2,2,4,4,8,8 80 LET[80],1,1,2,2,4,4 90 LET[90],0,1,0,1,0,1 100 LET[100],#A2,#A2,#62,#62,#22,#22 110 LET[110],10,20,40,60,100 120 G=#10:X=36:M=4:U=1:Q=[70]:P=[80]:T=[90]:N=[110] 200 FORI=0TO7:[I]=I:[I*2+16]=32:[I*2+17]=I*8-8:FORJ=0TO1:PC.SMOVE I*2+J,32+J*8,I*8-8:PC.SCREATE I*2+J,#F4+A+J:NEXT:A=(A+2)%4:NEXT 210 FORI=0TO11:PC.SMOVE 16+I,[32+I*2],[32+I*2+1]:IF I<4 A=#46 ELSE IF I<10 A=#60 ELSE A=#5C 220 PC.SCREATE 16+I,A:NEXT 230 PC.SMOVE 28,X,32:PC.SCREATE 28,G 240 FORI=0TO2:PC.SMOVE 29+I,#38+I*8,0:NEXT 250 PC.MSCORE 1,0,#12,">>>A~B~" 260 PC.MSCORE 2,1,#A2,"E2E2E2>E8":WAIT180 270 GSB1100 300 ' 310 PC.SCREATE 29,#A6+S/100:PC.SCREATE 30,#A6+S/10%10:PC.SCREATE 31,#A6+S%10%10 320 PC.SMOVE 28,X,32:PC.SCREATE 28,G 330 A=[5]:B=[A*2+16]:IF(X<B-3)|(X>B+11) GOTO1000 340 C=[52]-X:D=[53]-30:IF C*C+D*D<16 GOTO1000 350 E=[54]-X:F=[55]-30:IF E*E+F*F<16 GOTO1000 360 IF BTN(28)=1 X=X-P:G=#FC ELSE IF BTN(29)=1 X=X+P:G=#FD ELSE G=#10 400 ' 410 FORI=0TO7 420 A=[I]*2+16:B=A+1:[B]=[B]+Q 430 IF[B]<56 GOTO600 440 ' 450 [B]=[B]-64:C=[0]*2+16:[A]=[C]+V+W:PC.SCREATE [I]*2,#F0+(V+1)*4+U*2:PC.SCREATE [I]*2+1,#F0+(V+1)*4+U*2+1:W=V:U=U^1 460 S=S+1:IF(S=N)&(L<5) L=L+1:Q=[70+L]:P=[80+L]:T=[90+L]:N=[110+L]:PC.MPLAY 1,1:GSB1100 470 M=M-1:IF M>0 GOTO500 480 M=RND(4)+2:D=RND(5):IF D=0 E=1 ELSE IF D<3 E=2 ELSE E=3 490 V=(V+E)%3-1 500 ' 510 IF([A]<2)&(V<0) V=0:M=1 520 IF([A]>62)&(V>0) V=0:M=1 530 COPY#810,#800,16:COPY#802,#810,14:COPY#800,#81E,2 600 ' 610 FORJ=0TO1:PC.SMOVE [I]*2+J,[A]+J*8,[B]:NEXT 620 NEXT 700 ' 710 FORI=0TO11 720 A=I*2+32:B=A+1:[B]=[B]+Q 730 IF[B]<56 GOTO800 740 [B]=[B]-64:C=[0]*2+16 750 IF I<10 [A]=([C]+[I+56])%80 ELSE IF T=1 [A]=[C]+RND(2)*8 ELSE [A]=-8 800 PC.SMOVE I+16,[A],[B] 810 NEXT 900 ' 910 GOTO300 1000 ' 1010 PC.SCREATE 28,#58 1020 PC.MSCORE 0,1,#12,"<GFEDC~~":VIDEO1:CLS 1030 ?"Game Over":?:?"Result:";S;"m":?:?"Push [Enter]" 1040 IF INKEY()=10 RUN ELSE CONT 1100 ' 1110 PC.MSCORE 0,1,[100+L],"$FFDCFFDCEEDCEEDC" 1120 RTN 1200 ' 1210 PC.SUSER #F0,8,"20CCCCC120CCCCC120CCCCC120CCCCCC820CCCCC820CCCCC820CCCCC820CCCCC" 1220 PC.SUSER #F1,8,"CCCCC028CCCCC028CCCCC0281CCCC0281CCCCC02CCCCCC02CCCCCC02CCCCCC02" 1230 PC.SUSER #F2,8,"10CCCCCC10CCCCCC10CCCCCC10CCCCCC810CCCCC810CCCCC810CCCCC810CCCCC" 1240 PC.SUSER #F3,8,"CCCCC018CCCCC018CCCCC018CCCCC018CCCCCC01CCCCCC01CCCCCC01CCCCCC01" 1250 PC.SUSER #F4,8,"820CCCCC820CCCCC820CCCCC820CCCCC820CCCCC820CCCCC820CCCCC820CCCCC" 1260 PC.SUSER #F5,8,"1CCCC0281CCCC0281CCCC0281CCCC028CCCCC028CCCCC028CCCCC028CCCCC028" 1270 PC.SUSER #F6,8,"810CCCCC810CCCCC810CCCCC810CCCCC810CCCCC810CCCCC810CCCCC810CCCCC" 1280 PC.SUSER #F7,8,"CCCCC018CCCCC018CCCCC018CCCCC018CCCCC018CCCCC018CCCCC018CCCCC018" 1290 PC.SUSER #F8,8,"820CCCCC820CCCCC820CCCCC820CCCC120CCCCC120CCCCCC20CCCCCC20CCCCCC" 1300 PC.SUSER #F9,8,"1CCCCC021CCCCC021CCCCC02CCCCCC02CCCCC028CCCCC028CCCCC028CCCCC028" 1310 PC.SUSER #FA,8,"810CCCCC810CCCCC810CCCCC810CCCCC10CCCCCC10CCCCCC10CCCCCC10CCCCCC" 1320 PC.SUSER #FB,8,"CCCCCC01CCCCCC01CCCCCC01CCCCCC01CCCCC018CCCCC018CCCCC018CCCCC018" 1330 PC.SUSER #FC,8,"8822588885222888822AA28888222288882222288882AA288882228888888888" 1340 PC.SUSER #FD,8,"8885228888822258882AA228882222888222228882AA28888822288888888888" 1350 RTN
すごくいいアニメーションですね。車の左右移動のパターンがとてもナイス! スピード感がかなり上がっているのではないでしょうか。カーブと障害物が同時にやってきたときの緊張感が好きです。はたして避けられるのか!