RACE GAME by Akueri

再生

 レースゲームタイプのアクションゲーム。5本のレーンを十字ボタン左右で行き来して、敵マシンを避けて進もう。
 トップいる赤いマシンを追い抜けば晴れてレベルアップだが、たちまち新しいグループ相手の戦いになるぞ。
 レベルにそってどんどんスピードアップするレースに挑戦だ!

私が作りました

Akueri

BASICはポケコン以来全く触った事が無く、C言語を少しやった位の知識でこのプログラムを懐かしいと思いながら作ってみました。ポケコンで初めてBASICを作っていた時よりも上達したプログラムが出来て良かったと思い、違う形式のプログラムにも挑戦してみたいです。


 CHECK POiNT 

博士
スクロールしてくる障害物を避けるタイプのゲームも数が増えてきたのう。やはり最初に作ってみたいゲームというのは皆おなじということかの?

神崎
それぞれ作り方にバリエーションがあって面白いね。

インテリ
一番ポイントになるのはスクロール方向かな。コンソール画面を使っていると障害物が上に向かってくる「正スクロール」が一番向いているけど、このプログラムだと上から障害物がくる「逆スクロール」形式だね。

ワンパク
敵を消してはその下に表示してるから、下に向かって動いて見えるってわけだな! ……オイ待てよ、この方法だと複雑な画面になった時ツラいんじゃねえか?

博士
意外にもいいところに気がついたのう。そういう場合、プチコンならBG面やスプライトを使うのがよかろう。コンソール画面に干渉せんし、BGを下に向けて動かすだけでわりとごまかせ……もとい、上に向かっているように見えるものじゃよ。

プログラムリスト

  1. @START
  2. CLS:CLEAR
  3. BGMSTOP
  4. DEBUG=0
  5. PX=11:PY=13
  6. ENE_MAX=5
  7. ENE_NUM = ENE_MAX*6+1
  8. DIM ENE_RNG(ENE_MAX)
  9. DIM EX(ENE_MAX),EY(ENE_MAX)
  10. ENE_YMAX=22
  11. LIMIT_L=7:LIMIT_R=15
  12. ST_POS=2:ST_FPS=11
  13. PJUNI = ENE_NUM:JUNI = ENE_NUM:LV=1:TEN=0
  14. LOCATE 6,0:PRINT”RACE GAME!!”
  15. FOR I = ST_POS TO 22 STEP 1
  16. LOCATE 6,I:PRINT”│ │ │ │ │ │”
  17. NEXT
  18. GOSUB @ENE_INIT
  19. GOSUB @PARM
  20. @MAIN
  21. IF DEBUG == 1 THEN GOSUB @DEBUG
  22. BOTAN = BUTTON()
  23. IF BOTAN AND 4 THEN GOSUB @MOV_L
  24. IF BOTAN AND 8 THEN GOSUB @MOV_R
  25. GOSUB @CHR_PRI
  26. FPS = ST_FPS - LV
  27. IF FPS < 1 THEN FPS = 1
  28. VSYNC FPS
  29. GOSUB @OVER_CHK
  30. GOSUB @PARM
  31. GOSUB @MOV_ENE
  32. GOTO @MAIN
  33. END
  34. @PARM
  35. COLOR 0
  36. LOCATE 20,1:PRINT”LEVEL  ”;LV;
  37. LOCATE 21,10:PRINT”      ”
  38. LOCATE 21,10:PRINT ;PJUNI;”/”;JUNI;
  39. LOCATE 27,10:PRINT”イ”
  40. LOCATE 21,20:PRINT ;TEN;
  41. LOCATE 25,20:PRINT” テン”
  42. RETURN
  43. @MOV_L
  44. LOCATE PX,PY:PRINT” ”
  45. PX=PX-2
  46. IF PX < LIMIT_L THEN PX = LIMIT_L
  47. BEEP 8
  48. RETURN
  49. @MOV_R
  50. LOCATE PX,PY:PRINT” ”
  51. PX=PX+2
  52. IF PX > LIMIT_R THEN PX = LIMIT_R
  53. BEEP 8
  54. RETURN
  55. @MOV_ENE
  56. LOCATE EX(0),EY(0):PRINT” ”
  57. FOR I = 0 TO ENE_MAX-2
  58. IF EY(I) > ENE_RNG(I) THEN LOCATE EX(I+1),EY(I+1):PRINT” ”
  59. NEXT
  60. BEEP 11
  61. IF EY(0) < ENE_YMAX THEN EY(0)=EY(0)+1
  62. FOR I = 0 TO ENE_MAX-2
  63. IF EY(I) > ENE_RNG(I) AND EY(I+1) < ENE_YMAX THEN EY(I+1)=EY(I+1)+1
  64. NEXT
  65. IF EY(ENE_MAX-1) == ENE_YMAX THEN GOSUB @ENE_INIT
  66. RETURN
  67. @CHR_PRI
  68. RED_FLG=0
  69. COLOR 0
  70. LOCATE PX,PY:PRINT”Ы”
  71. IF EY(0) < ENE_YMAX THEN LOCATE EX(0),EY(0):PRINT”Ы”
  72. FOR I = 0 TO ENE_MAX-2
  73. IF EY(I) > ENE_RNG(I) AND EY(I+1) < ENE_YMAX THEN LOCATE EX(I+1),EY(I+1):PRINT”Ы”
  74. NEXT
  75. IF PJUNI <= ENE_MAX AND EY(ENE_MAX-2) > ENE_RNG(ENE_MAX-2) THEN RED_FLG=1
  76. IF RED_FLG == 1 THEN COLOR 13:LOCATE EX(ENE_MAX-1),EY(ENE_MAX-1):PRINT”Ы”
  77. RETURN
  78. @ENE_INIT
  79. EQ_FLG=0
  80. FOR I = 0 TO ENE_MAX-1
  81. EX(I) = RND(PX) + LIMIT_L
  82. EY(I) = ST_POS
  83. IF EX(I) % 2 == 0 THEN EX(I)=EX(I)+1
  84. IF EX(I) > LIMIT_R THEN EX(I) = LIMIT_R
  85. ENE_RNG(I) = RND(4)+5
  86. NEXT
  87. FOR I = 0 TO ENE_MAX-2
  88. IF EX(I) == EX(I+1) THEN EQ_FLG=1
  89. NEXT
  90. IF EX(0) == EX(ENE_MAX-1) THEN EQ_FLG=1
  91. IF EQ_FLG == 1 THEN GOTO @ENE_INIT
  92. RETURN
  93. @OVER_CHK
  94. FOR I = 0 TO ENE_MAX-1
  95. IF PX == EX(I) AND PY == EY(I) THEN GOTO @GE_OVER
  96. IF PY == EY(I) AND EY(I) < ENE_YMAX THEN PJUNI=PJUNI-1:TEN=TEN+10
  97. NEXT
  98. IF PJUNI == 1 AND FPS != 1 AND EY(ENE_MAX-1) == ENE_YMAX-1 THEN LV=LV+1:PJUNI = ENE_NUM
  99. RETURN
  100. @GE_OVER
  101. CLS:COLOR 0
  102. LOCATE 7,9:PRINT”--- GAME OVER ---”
  103. LOCATE 8,15:PRINT”YOUR SCORE: ”;TEN;” テン”
  104. LOCATE 10,20:PRINT”PUSH A BOTAN”
  105. BGMPLAY 6
  106. @GE_LOOP
  107. BOTAN = BUTTON()
  108. IF BOTAN AND 16 GOTO @START
  109. GOTO @GE_LOOP
  110. @DEBUG
  111. LOCATE 20,ST_POS+10:PRINT”STA: ”;EX(ENE_MAX-1);
  112. RETURN