【はじめてのプチコン】サンプルゲームソースコード公開 | りょうのゲーム塾

りょうのゲーム塾

再開、準備中。



チェックポイント
今回は一括してソースコードを公開します。
転記ミスもあると思いますが、できるだけ早いうちに訂正したいと思います。
これを原型にしてゲームを作成します。
今回はゲームらしさを甘味したソースコードになっています。
ソースコード中の注釈は漢字にになっていますが英字やカナで入力するか、
実行には不必要なので入力しなくてもかまいません。

また、プチコンの特殊文字を表現するため全角文字を使用しています。
入力に際しては対応する文字を使用してください。


■プログラム
0001 '┏━━━━━━━━━━┓
0002 '┃ALIEN MAZE┃
0003 '┗━━━━━━━━━━┛
0004 'ゲーム初期化
0005 GOSUB @SYS_INIT
0006 GOSUB @GM_INIT
0007 'ゲームループ
0008 @GAMELOOP
0009 GOSUB @SYS_MAIN
0010 GOSUB @GM_TASK
0011 GOTO @GAMELOOP
0012 'システムの初期化
0013 @SYS_INIT
0014 CLEAR
0015 SYS_CNT=0
0016 SYS_KEY=BUTTON()
0017 RETURN
0018 'システムメイン
0019 @SYS_MAIN
0020 VSYNC 1
0021 SYS_CNT=(SYS_CNT+1)AND &H3FFFF
0022 RO=SYS_KEY
0023 SYS_KEY=BUTTON()
0024 R0=SYS_KEY XOR R0
0025 ON_KEY=R0 AND SYS_KEY
0026 OFF_KEY=RO AND(NOT SYS_KEY)
0027 RETURN
0028 'ゲームタスクの初期化
0029 @GM_INIT
0030 DIM MAP$(23)
0031 HISCORE=600
0032 GM_TF=0:RETURN
0033 'ゲームタスク
0034 @GM_TASK
0035 ON GM_TF GOTO @GM00,@GM01,@GM02,@GM03,@GM04,@GM05,@GM06,@GM07,@GM08,@GM09,@GM10
0036 RETURN
0037 'タイトルの表示
0038 @GM00
0039 CLS
0040 GOSUB @DISPSCR
0041 GOSUB @DISPCOK
0042 RESTORE @GM00
0043 COLOR 3
0044 FOR Y=5 TO 16
0045 READ S$
0046 LOCATE 2,Y:PRINT S$;
0047 NEXT Y
0048 COLOR 0
0049 BGMPLAY 1
0050 GM_TF=1:RETURN

□ は、スペースを表します。

0051 DATA"┏━━━━━━━━━━━━━━━━━┓"
0052 DATA"┃□┏┓□┳□□□┳┏━━┓┏┓□┳┃"
0053 DATA"┃┏┛┗┓┃□□□┃┃□□┻┃┃□┃┃"
0054 DATA"┃┃□□┃┃□□□┃┣━┫□┃┗┓┃┃"
0055 DATA"┃┣━━┫┃□□┳┃┃□□┳┃□┃┃┃"
0056 DATA"┃┻□□┻┗━━┛┻┗━━┛┻□┗┛┃"
0057 DATA"┃┏┓□┏┓□┏┓□┏━━┓┏━━┓┃"
0058 DATA"┃┃┃□┃┃┏┛┗┓┻□┏┛┃□□┻┃"
0059 DATA"┃┃┗━┛┃┃□□┃□┏┛□┣━┫□┃"
0060 DATA"┃┃□□□┃┣━━┫┏┛□┳┃□□┳┃"
0061 DATA"┃┻□□□┻┻□□┻┗━━┛┗━━┛┃"
0062 DATA"┗━━━━━━━━━━━━━━━━━┛"
0063 'ゲーム開始チェック
0064 @GM01
0065 LOCATE 5,20:PRINT"□□□□□□□□□□□□";
0066 IF SYS_CNT AND 8 GOTO @GM011
0067 LOCATE 5,20:PRINT"PUSH□ANY□KEY";
0068 @GM011
0069 IF ON_KEY==0 THEN RETURN
0070 STAGNUM=0
0071 EMYNUM=1
0072 SCORE=0
0073 EMYCNT=5
0074 PLYCNT=3
0075 '
0076 @STG_LOOP
0077 BGMPLAY 4
0078 GM_TF=2:RETURN
0079 'ステージ表示
0080 @GM02
0081 GOSUB @LOADSTG
0082 GOUSB @DISPSTG
0083 GOSUB @DISPINFO

□ は、スペースを表します。

0084 LOCATE 6,10:?"┏━━━━━━━━━┓";
0085 LOCATE 6,11:?"┃STAGE□";STGNUM;"-";EMYNUM;"┃"
0086 LOCATE 6,12:?"┗━━━━━━━━━┛";
0087 GM_CNT=3*60
0088 GM_TF=3:RETURN
0089 'ステージ番号表示中
0090 @GM03
0091 GM_CNT=GM_CNT-1
0092 IF GM_CNT>=0 THEN RETURN
0093 GOSUB @DISPSTG
0094 GOSUB @PLY_INIT
0095 'ステージの初期化
0096 GOSUB @EMY_INIT
0097 BGMPLAY 2
0098 GM_TF=4:RETURN
0099 'ゲームの実行
0100 @GM04
0101 GOSUB @PLY_TASK
0102 GOSUB @EMY_TASK
0103 'ゲーム終了判定
0104 IF ON_KEY==0 THEN RETURN
0105 BGMSTOP
0106 IF ON_KEY AND 16 GOTO @GM_OVER
0107 IF ON_KEY AND 32 GOTO @GM_CLR
0108 'ステージクリア
0109 EMYNUM=EMYNUM+1
0110 IF EMYNUM<6 GOTO @STG_LOOP
0111 EMYNUM=1
0112 STGNUM=STGNUM+1
0113 IF STGNUM>4 GOTO @GM_CLR
0114 GOTO @STG_LOOP
0115 'ゲームオーバー
0116 @GM_OVER
0117 BGMPLAY 6
0118 GM_TF=5:RETURN
0119 'ゲームオーバー画面表示
0120 @GM05
0121 RESTORE @GM05
0122 COLOR 13
0123 FOR Y=5 TO 16
0124 READ S$:LOCATE 2,Y:PRINT S$;
0125 NEXT Y
0126 COLOR 0
0127 GM_CNT=6*60
0128 GM_TF=6:RETURN

□ は、スペースを表します。

0129 DATA"┏━━━━━━━━━━━━━━━━━┓
0130 DATA"┃┏━━┓□┏┓□┏┓□┏┓┏━━┓┃
0131 DATA"┃┃□□┻┏┛┗┓┃┃□┃┃┃□□┻┃
0132 DATA"┃┃┣━┓┃□□┃┃┗━┛┃┣━┫□┃
0133 DATA"┃┃□□┃┣━━┫┃□□□┃┃□□┳┃
0134 DATA"┃┗━━┛┻□□┻┻□□□┻┗━━┛┃
0135 DATA"┃┏━━┓┳□□□┳┏━━┓┏━━┓┃
0136 DATA"┃┃□□┃┃□□□┃┃□□┻┃□□┃┃
0137 DATA"┃┃□□┃┗┓□┏┛┣━┫□┣━┳┛┃
0138 DATA"┃┃□□┃□┃□┃□┃□□┳┃□┗┓┃
0139 DATA"┃┗━━┛□┗━┛□┗━━┛┻□□┻┃
0140 DATA"┗━━━━━━━━━━━━━━━━━┛
0141 'ゲームオーバー画面表示中
0142 @GM06
0143 GM_CNT=GM_CNT-1
0144 IF GM_CNT>=0 THEN RETURN
0145 BGMSTOP
0146 GM_TF=0:RETURN
0147 'ゲームクリア
0148 @GM_CLR
0149 GM_TF=7:RETURN
0150 'ゲームクリア画面表示
0151 @GM07
0152 RESTORE @GM07
0153 COLOR 4
0154 FOR Y=5 TO 16
0155 READ S$
0156 LOCATE 1,Y:PRINT S$;
0157 NEXT Y
0158 COLOR 0
0159 GM_CNT=6*60
0160 BGMPLAY 5
0161 GM_TF=8:RETURN

□ は、スペースを表します。

0162 DATA"┏━━━━━━━━━━━━━━━━━━━┓"
0163 DATA"┃□┏━━┓□┏┓□┏┓□┏┓┏━━┓□┃"
0164 DATA"┃□┃□□┻┏┛┗┓┃┃□┃┃┃□□┻□┃"
0165 DATA"┃□┃┣━┓┃□□┃┃┗━┛┃┣━┫□□┃"
0166 DATA"┃□┃□□┃┣━━┫┃□□□┃┃□□┳□┃"
0167 DATA"┃□┗━━┛┻□□┻┻□□□┻┗━━┛□┃"
0168 DATA"┃┏━━┓┳□□┏━━┓□┏┓□┏━━┓┃"
0169 DATA"┃┃□□┻┃□□┃□□┻┏┛┗┓┃□□┃┃"
0170 DATA"┃┃□□□┃□□┣━┫□┃□□┃┣━┳┛┃"
0171 DATA"┃┃□□┳┃□┳┃□□┳┣━━┫┃□┗┓┃"
0172 DATA"┃┗━━┛┗━┛┗━━┛┻□□┻┻□□┻┃"
0173 DATA"┗━━━━━━━━━━━━━━━━━━━┛"
0174 'ゲームクリア画面表示中
0175 @GM08
0176 GM_CNT=GM_CNT-1
0177 IF GM_CNT>=0 THEN RETURN
0178 'スタッフスクロール準備
0179 BGMPLAY 10
0180 Y=23
0181 GM_TF=9:RETURN
0182 'スタッフスクロール表示
0183 @GM09
0184 CLS
0185 LOCATE 7,Y
0186 PRINT"Programmer:RYO";
0187 LOCATE 8,Y+1
0188 PRINT"Supporter:YUKI";
0189 LOCATE 18,Y+2
0190 PRINT"KOJI";
0191 Y=Y-0.01
0192 IF Y>=10 THEN RETURN
0193 GM_TF=10:RETURN
0194 '終了チェック
0195 @GM10
0196 IF ON_KEY==0 THEN RETURN
0197 BGMSTOP
0198 GM_TF=0:RETURN
0199 'スクリーン表示
0200 @DISPSCR
0201 COLOR 8
0202 FOR Y=0 TO 22
0203 LOCATE 0,Y

■ は、ブロックを表します。
□ は、スペースを表します。

0204 PRINT"■■■■■■■■■■■■■■■■■■■■■■■";
0205 NEXT Y
0206 COLOR 0
0207 RETURN
0208 'コックピット表示
0209 @DISPCOK
0210 COLOR 0
0211 FPR Y=0 TO 22
0212 READ S$
0213 LOCATE 23,Y
0214 PRINT"■■■■■■■■■";
0215 NEXT Y
0216 COLOR 0
0217 LOCATE 24, 1:?"┏━━━━━┓";
0218 LOCATE 24, 2:?"┃ALIEN┃";
0219 LOCATE 24, 3:?"┃MAZE★┃";
0220 LOCATE 24, 4:?"┗━━━━━┛";
0221 LOCATE 24, 6:?"HISCORE";
0222 LOCATE 24, 7:?"□□□□□□□";
0223 LOCATE 24, 9:?"□□SCORE";
0224 LOCATE 24,10:?"□□□□□□□";
0225 LOCATE 24,12:?"□□STAGE";
0226 LOCATE 24,13:?"□□□□□□□";
0227 LOCATE 24,15:?"□PLAYER";
0228 LOCATE 24,16:?"□□□□□□□";
0229 LOCATE 24,18:?"□□ENEMY";
0230 LOCATE 24,19:?"□□□□□□□";
0231 LOCATE 24,21:?"RYO";
0232 RETURN
0233 'コックピット情報表示
0234 @DISPINFO
0235 GOSUB @DISPPN
0236 GOSUB @DISPEN
0237 GOSUB @DISPHS
0238 GOSUB @DISPSC
0239 'ステージ番号表示
0240 @DISPSN
0241 LOCATE 28,23
0242 ?STGNUM+1;"-";EMYNUM;
0243 RETURN
0244 'プレーヤ数表示
0245 @DISPPN
0246 LOCATE 24,16

□ は、スペースを表します。
人 は、人間を表します。
敵 は、インベーダを表します。

0247 ?MID$("□□□□□□□人人人人人人人",PLYCNT,7);
0248 RETURN
0249 '敵数表示
0250 @DISPEN
0251 LOCATE 24,19
0252 ?MID$("□□□□□□□敵敵敵敵敵敵敵",EMYCNT,7);
0253 RETURN
0254 'ハイスコア表示
0255 @DISPHS
0256 LOCATE 24,7
0257 N=HISCORE
0258 GOTO @DISPN
0259 'スコア表示
0260 @DISPSC
0261 LOCATE 24,10
0262 N=SCORE
0263 'スコア文字列表示
0264 @DISPN
0265 N$=STR$(N)
0266 S$=MID$("00000"+N$+"0",LEN(N$)-1,7)
0267 PRINT S$;
0268 RETURN
0269 'ステージデータのロード
0270 @LOADSTG
0271 ON STGNUM GOTO @LS0,@LS1,@LS2,@LS3,@LS4
0272 @LS0
0273 RESTORE @DS3:GOTO @LS5
0274 @LS1
0275 RESTORE @DS2:GOTO @LS5
0276 @LS2
0277 RESTORE @DS1:GOTO @LS5
0278 @LS3
0279 RESTORE @DS0:GOTO @LS5
0280 @LS4
0281 RESTORE @DS4
0282 @LS5
0283 FOR I=0 TO 22
0284 READ MAP$(I)
0285 NEXT I
0286 RETURN
0287 'ステージデータの表示
0288 @DISPSTG
0289 COLOR 7
0290 FOR Y=0 TO 22
0291 LOCATE 0,Y:PRINT MAP$(Y);
0292 NEXT Y
0293 COLOR 0
0294 RETURN
0295 'ステージデータ
0296 @DS0

■ は、ブロックを表します。
□ は、スペースを表します。

0297 DATA"■■■■■■■■■■■■■■■■■■■■■■■"
0298 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0299 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0300 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0301 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0302 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0303 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0304 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0305 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0306 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0307 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0308 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0309 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0310 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0311 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0312 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0313 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0314 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0315 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0316 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0317 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0318 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0319 DATA"■■■■■■■■■■■■■■■■■■■■■■■"
0320 @DS1
0321 DATA"■■■■■■■■■■■■■■■■■■■■■■■"
0322 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0323 DATA"■□■■■■■■■■■□■■■■■■■■■□■"
0324 DATA"■□■■■■■■■■■□■■■■■■■■■□■"
0325 DATA"■□■■■■■■■■■□■■■■■■■■■□■"
0326 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0327 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0328 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0329 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0330 DATA"■□■■■□□□□□□□□□□□□□■■■□■"
0331 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0332 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0333 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0334 DATA"■□■■■□□□□□□□□□□□□□■■■□■"
0335 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0336 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0337 DATA"■□■■■□■■■□■■■□■■■□■■■□■"
0338 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0339 DATA"■□■■■■■■■■■□■■■■■■■■■□■"
0340 DATA"■□■■■■■■■■■□■■■■■■■■■□■"
0341 DATA"■□■■■■■■■■■□■■■■■■■■■□■"
0342 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0343 DATA"■■■■■■■■■■■■■■■■■■■■■■■"
0344 @DS2
0345 DATA"■■■■■■■■■■■■■■■■■■■■■■■"
0346 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0347 DATA"■□■■■■■■□■■■■■□■■■■■■□■"
0348 DATA"■□■■■■■■□■■■■■□■■■■■■□■"
0349 DATA"■□■■■■■■□■■■■■□■■■■■■□■"
0350 DATA"■□■■□□□□□□□■■■□■■□□□□□■"
0351 DATA"■□■■□■■■■■□■■■□■■□■■■□■"
0352 DATA"■□■■□■■■■■□■■■□■■□■■■□■"
0353 DATA"■□□□□□■■■■□□□□□□□□■■■□■"
0354 DATA"■□■■■□■■■■□■■■■■■□■■■□■"
0355 DATA"■□■■■□■■■■□■■■■■■□■■■□■"
0356 DATA"■□■■■□■■■■□■■■■■■□■■■□■"
0357 DATA"■□■■■□■■■■□■■■■■■□■■■□■"
0358 DATA"■□■■■□■■■■□■■■■■■□■■■□■"
0359 DATA"■□■■■□□□□□□□□□□■■□□□□□■"
0360 DATA"■□■■■□■■■■□■■■□■■■■■■□■"
0361 DATA"■□■■■□■■■■□■■■□■■■■■■□■"
0362 DATA"■□■■■□■■■■□■■■□■■■■■■□■"
0363 DATA"■□■■■□□□□□□■■■□■■■□□□□■"
0364 DATA"■□■■■□■■■■■■■■□■■■□■■□■"
0365 DATA"■□■■■□■■■■■■■■□■■■□■■□■"
0366 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0367 DATA"■■■■■■■■■■■■■■■■■■■■■■■"
0368 @DS3
0369 DATA"■■■■■■■■■■■■■■■■■■■■■■■"
0370 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0371 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0372 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0373 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0374 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0375 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0376 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0377 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0378 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0379 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0380 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0381 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0382 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0383 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0384 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0385 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0386 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0387 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0388 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0389 DATA"■□■■■■■□■■■■■■■□■■■■■□■"
0390 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0391 DATA"■■■■■■■■■■■■■■■■■■■■■■■"
0392 @DS4
0393 DATA"■■■■■■■■■■■■■■■■■■■■■■■"
0394 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0395 DATA"■□■□■□■□■□■□■□■□■□■□■□■"
0396 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0397 DATA"■□■□■□■□■□■□■□■□■□■□■□■"
0398 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0399 DATA"■□■□■□■□■□■□■□■□■□■□■□■"
0400 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0401 DATA"■□■□■□■□■□■□■□■□■□■□■□■"
0402 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0403 DATA"■□■□■□■□■□■□■□■□■□■□■□■"
0404 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0405 DATA"■□■□■□■□■□■□■□■□■□■□■□■"
0406 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0407 DATA"■□■□■□■□■□■□■□■□■□■□■□■"
0408 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0409 DATA"■□■□■□■□■□■□■□■□■□■□■□■"
0410 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0411 DATA"■□■□■□■□■□■□■□■□■□■□■□■"
0412 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0413 DATA"■□■□■□■□■□■□■□■□■□■□■□■"
0414 DATA"■□□□□□□□□□□□□□□□□□□□□□■"
0415 DATA"■■■■■■■■■■■■■■■■■■■■■■■"
0416 'プレイヤタスクの初期化
0417 @PLY_INIT
0418 RETURN
0419 'プレイヤタスク
0420 @PLY_TASK
0421 RETURN
0422 '敵タスクの初期化
0423 @EMY_INIT
0424 RETURN
0425 '敵タスク
0426 @EMY_TASK
0427 RETURN