スマイルブーム自家製プログラム特集 PART5 →PART6

ESCAPE3 by スマイルブーム

再生

 迷路を使ったゲームのひな型になるのが、このサンプルプログラムだ。
 起動後、迷路データの読み込みの確認があるが、最初は迷路を作成するY(Enter)を選んでおけばいいだろう。
 こうして作られた迷路内は十字ボタンで移動できる。Aボタンで周囲を明るくすることもできるぞ。
 このプログラム自体は特にゲームとしての目的はないので、プログラムの参考にするもよし、追加要素を加えてゲームにするのもいいだろう。


 CHECK POiNT 

博士
ひとつ前に説明した迷路作成プログラムの応用がこれじゃよ。
BGとスプライトを使うだけでぐっとゴージャスに見えるものじゃな。

ワンパク
……。

神崎
迷路を書くのに、ちょっと変わった方法を使っているね。

博士
さよう。まず見えないグラフィック面に迷路をドットで書いているんじゃな。そこからGSPOIT命令で点の色を読み取って、実際の迷路に反映しとるわけじゃ。ゲーム中でもカベにぶつかったかの判定にこのグラフィック面を使っておって、カンタンに当たり判定のかわりにしておるのう。

インテリ
ゲーム画面はグラフィック面の拡大図、のようなものとして使っているんだね。

博士
16×16ドット単位でしか移動しないようなRPGなどには、使えるひとつのアイデアかもしれんのう。
明かりの表現も工夫があるぞい。これはコンソールに「」と「」とキャラクターで書くことで表現しているんじゃな。

神崎
コンソール面がBGやスプライトより手前にあることを使っているんだね。キャラクターを書き換えればもっと自然になりそうだよ。

ワンパク
ファック! そういうコトは分かったがよォ! 下にあるメッセージ表示っぽいモンとかよォ! カギだのゴールドだのヒトダマだの、全部意味ねえじゃねーか! ゲームじゃねえだろコレ!

博士
う、ウム。さすがにムリがあったかの。サンプルとしていろいろ応用がききそうということでカンベンしてもらえんじゃろうか。次はちゃんと完成までやりとげ……ムニャムニャ、ゲームらしいゲームを紹介するぞい。

プログラムリスト

  1. ’┌──────────┐
  2. ’│タ゛ンシ゛ョンメイロ│
  3. ’│   v1.0   │
  4. ’└──────────┘
  5. CLEAR
  6. VISIBLE 1,1,0,0,0,0
  7. CLS:COLOR 0
  8. SPPAGE 0:SPCLR
  9. BGPAGE 0:PG=1:PR=1
  10. BGOFS 0,0,0
  11. BGOFS 1,0,0
  12. ’---
  13. OMAX=8
  14. DIM V(4,2),W(2,5),M$(3)
  15. DIM O(OMAX,4),B$(9)
  16. DATA 1,0,0,1,-1,0,0,-1
  17. FOR I=0 TO 3
  18.  READ V(I,0),V(I,1)
  19. NEXT
  20. DATA  9,&H2D1,&H2D2,&H2F1,&H2F2
  21. DATA  9,&H020,&H021,&H021,&H020
  22. FOR I=0 TO 1
  23.  FOR J=0 TO 4
  24.   READ W(I,J)
  25.  NEXT
  26. NEXT
  27. DATA ”┌”,”─”,”┐”
  28. DATA ”│”,” ”,”│”
  29. DATA ”└”,”─”,”┘”
  30. FOR I=0 TO 8
  31.  READ B$(I)
  32. NEXT
  33. M$(0)=”┿”
  34. M$(1)=”╂”
  35. M$(2)=” ”
  36. ’---
  37. X=6:Y=10:SX=19:SY=3
  38. OX=5:OY=1:T$=”initialize”
  39. GOSUB @PUTBOX
  40. ’---BGショキカ
  41. FOR P=1 TO 0 STEP -1
  42.  BGPAGE P
  43.  FOR Y=0 TO 63
  44.   FOR X=0 TO 63
  45.    BGPUT 0,X,Y,0,0,0,0
  46.    BGPUT 1,X,Y,0,0,0,0
  47.   NEXT
  48.  NEXT
  49. NEXT
  50. ’---
  51. PCG=0
  52. N=13:GOSUB @DEFSYS
  53. N=14:GOSUB @DEFSYS
  54. N=57:GOSUB @DEFSYS
  55. N=59:GOSUB @DEFSYS
  56. N=60:GOSUB @DEFSYS
  57. N=224:GOSUB @DEFSYS
  58. N=225:GOSUB @DEFSYS
  59. N=226:GOSUB @DEFSYS
  60. N=231:GOSUB @DEFSYS
  61. ’---
  62. @START
  63. FLOW=-1:REQ=1
  64. ’---
  65. @MLOOP
  66.  OLDB=B:B=BUTTON()
  67.  IF FLOW==REQ GOTO @MSKIP
  68.  FLOW=REQ:B=0:OLDB=0
  69.  ON FLOW GOSUB @GI,@TI
  70. @MSKIP
  71.  ON FLOW GOSUB @GM,@TM
  72.  VSYNC 1
  73. GOTO @MLOOP
  74. ’---
  75. @PUTBOX
  76. OX=OX+X:OY=OY+Y
  77. N=0:GOSUB @PUTLINE
  78. FOR J=0 TO SY-3
  79.  N=3:GOSUB @PUTLINE
  80. NEXT
  81. N=6:GOSUB @PUTLINE
  82. LOCATE OX,OY:PRINT T$
  83. RETURN
  84. ’---
  85. @PUTLINE
  86. LOCATE X,Y
  87. PRINT B$(N);
  88. N=N+1
  89. FOR I=0 TO SX-2
  90.  PRINT B$(N);
  91. NEXT
  92. PRINT B$(N+1);
  93. Y=Y+1
  94. RETURN
  95. ’┌───────┐
  96. ’│メイロサクセイ│
  97. ’└───────┘
  98. @MAZE
  99. GP=1:GPAGE GP:GCLS 0
  100. ’---
  101. CM=4
  102. CK=12
  103. CD=11
  104. C1=13
  105. C2=14
  106. ’---
  107. INPUT”Ж「メイロヲ、セイセイシマスカ」(Y/N)”;K$
  108. IF K$!=”Y” GOTO @MLOAD
  109. ’---アタラシクツクル
  110. @MNEW
  111. PRINT”Ж「メイロヲツクリマス」”
  112. INPUT”Ж「ヨコサイス゛」(16―256)”;MX
  113. INPUT”Ж「タテサイス゛」(12―192)”;MY
  114. IF MX<16  THEN MX=16
  115. IF MX>256 THEN MX=256
  116. IF MY<12  THEN MY=12
  117. IF MY>192 THEN MY=192
  118. ’---サイス゛ヲ3ケタス゛ツノモシ゛レツニヘンカン
  119. K$=”0”+STR$(MX):L=LEN(K$)
  120. MEM$=MID$(K$,L-3,3)
  121. K$=”0”+STR$(MY):L=LEN(K$)
  122. MEM$=MEM$+MID$(K$,L-3,3)
  123. ’---ホソ゛ンシテオク
  124. PRINT”Ж「チョットマッテテネ」”
  125. GOSUB @MKMZ
  126. PRINT”Ж「メイロヲホソ゛ンシマス」”
  127. SAVE”GRP1:MAP”
  128. SAVE”MEM:MAP”
  129. RETURN
  130. ’---カコノマッフ゜ヲヨミコム
  131. @MLOAD
  132. ’INPUT”Ж「メイロヲ、ヨミコミマスカ」(Y/N)”;K$
  133. ’IF K$!=”Y” THEN RETURN
  134. PRINT”Ж「メイロヲヨミコミマス」”
  135. LOAD”GRP1:MAP”,FALSE
  136. IF RESULT!=TRUE GOTO @MNEW
  137. LOAD”MEM:MAP”,FALSE
  138. IF RESULT!=TRUE GOTO @MNEW
  139. MX=VAL(MID$(MEM$,0,3))
  140. MY=VAL(MID$(MEM$,3,3))
  141. RETURN
  142. ’---オフ゛シ゛ェクトノハイチ
  143. @OBJSET
  144. ’PRINT”SIZE:”;MX;”,”;MY
  145. ’PRINT”Ж「イヘ゛ントヲハイチシマス」”
  146. IX=0
  147. ’--- カキ゛
  148. C=CK:SC=2:N=15
  149. GOSUB @SETPOS
  150. ’---
  151. C=CD:SC=2:N=31
  152. GOSUB @SETPOS
  153. ’---
  154. C=C1:SC=2:N=30
  155. GOSUB @SETPOS
  156. ’---
  157. C=C2:SC=2:N=63
  158. GOSUB @SETPOS
  159. ’---
  160. OBJSP=SP-16
  161. RETURN
  162. ’---セットイチヲカクニン
  163. @SETPOS
  164. X=RND(254)+1
  165. Y=RND(190)+1
  166. IF GSPOIT(X,Y)!=CM GOTO @SETPOS
  167. ’---
  168. GPSET X,Y,C
  169. O(IX,_X)=X*16+7
  170. O(IX,_Y)=Y*16+7
  171. O(IX,_N)=N
  172. O(IX,_S)=SC
  173. SPSET SP,N,SC,0,0,0
  174. SP=SP+1
  175. IX=IX+1
  176. RETURN
  177. ’┌────┐
  178. ’│ケ゛-ム│
  179. ’└────┘
  180. @GI
  181. CLS
  182. VISIBLE 1,1,0,0,0,0
  183. BGPAGE 0
  184. DX=26:DY=22
  185. BGCLIP 1,1,DX,DY
  186. ’---
  187. GOSUB @MAZE
  188. ’---
  189. _X=0:_Y=1:_N=2:_S=3
  190. SP=16
  191. GOSUB @OBJSET
  192. CLS
  193. GPAGE 0:GCLS 0
  194. ’---
  195. N=ASC(”В”)
  196. FOR X=0 TO 255 STEP 8
  197.  GPUTCHR X,0,”BGF”,N,14,1
  198.  GPUTCHR X,23*8,”BGF”,N,14,1
  199. NEXT
  200. FOR Y=1*8 TO 22*8 STEP 8
  201.  GPUTCHR 0,Y,”BGF”,N,14,1
  202.  GPUTCHR 27*8,Y,”BGF”,N,14,1
  203.  FOR X=28*8 TO 31*8 STEP 8
  204.   GPUTCHR X,Y,”BGF”,N,14,1
  205.  NEXT
  206. NEXT
  207. GPAGE GP
  208. ’---
  209. LS=3
  210. GOSUB @PUTMASK
  211. ’---
  212. OX=-5:OY=-4
  213. WX=OX*16-8:WY=OY*16-8
  214. VX=0:VY=0:VS=0
  215. BGOFS PG,WX,WY
  216. GOSUB @PUTBG
  217. ’---
  218. SPPAGE 1:SPCLR
  219. SPPAGE 0
  220. ’---PLAYER
  221. SPSET 0,128,2,0,0,PR
  222. SPOFS 0,13*8,11*8-8
  223. SPANIM 0,2,8,0
  224. SPSET 1,15,2,0,0,PR
  225. SPOFS 1,13*8,11*8
  226. ’---GOLD
  227. SPSET SP,13,3,0,0,PR
  228. SPOFS SP,28*8+2,1*8
  229. LOCATE 28,3:PRINT”000”
  230. SP=SP+1
  231. ’---KEY
  232. SPSET SP,14,3,0,0,PR
  233. SPOFS SP,28*8+2,5*8
  234. LOCATE 28,7:PRINT”000”
  235. SP=SP+1
  236. ’---
  237. KM=0:KW=0
  238. LOCATE 1,23:PRINT”Й:”;
  239. VISIBLE 1,1,0,1,1,1
  240. ’PNLTYPE ”OFF”
  241. RETURN
  242. ’┌───────┐
  243. ’│ケ゛-ムメイン│
  244. ’└───────┘
  245. @GM
  246. LOCATE 3+KM,23
  247. K$=”■”:IF KW>16 THEN K$=” ”
  248. PRINT K$;
  249. KW=KW+1:KW=KW AND 31
  250. ’---
  251. K$=INKEY$()
  252. IF K$==”” GOTO @KSKIP
  253. K=ASC(K$)
  254. IF K<ASC(” ”) GOTO @KSKIP
  255. IF K>ASC(”Z”) GOTO @KSKIP
  256. ’---
  257. IF KM<16 GOTO @KPUT
  258. LOCATE 3,23
  259. PRINT”                 ”;
  260. KM=0
  261. @KPUT
  262. LOCATE 3+KM,23
  263. PRINT K$;
  264. KM=KM+1
  265. ’---
  266. @KSKIP
  267. GOSUB @CTRL
  268. GOSUB @SCRL
  269. GOSUB @OBJECT
  270. RETURN
  271. ’┌────────┐
  272. ’│オフ゛シ゛ェクト│
  273. ’└────────┘
  274. @OBJECT
  275. FOR IX=0 TO OBJSP-1
  276.  X=O(IX,_X)-WX-7
  277.  Y=O(IX,_Y)-WY-7
  278.  SPOFS IX+16,X,Y
  279. NEXT
  280. RETURN
  281. ’┌─────┐
  282. ’│スクロ-ル│
  283. ’└─────┘
  284. @SCRL
  285. IF VS==0 THEN RETURN
  286. ’---
  287. ST=2
  288. VS=VS-ST
  289. WX=WX+VX*ST
  290. WY=WY+VY*ST
  291. BGOFS PG,WX,WY
  292. RETURN
  293. ’┌───┐
  294. ’│ソウサ│
  295. ’└───┘
  296. @CTRL
  297. IF VS!=0 THEN RETURN
  298. ’---
  299. ’IF OLDB!=0 GOTO @LSKIP
  300. IF B!=16 GOTO @LSKIP
  301. LS=LS+1:IF LS>18 THEN LS=3
  302. GOSUB @PUTMASK
  303. @LSKIP
  304. ’---
  305. D=-1:VS=0
  306. IF B AND 1 THEN D=3:BX=0:BY=0
  307. IF B AND 2 THEN D=1:BX=0:BY=11
  308. IF B AND 4 THEN D=2:BX=0:BY=0
  309. IF B AND 8 THEN D=0:BX=15:BY=0
  310. IF D==-1 THEN RETURN
  311. ’---ススムシ゛ュンヒ゛
  312. SPCHR 0,128+D*2
  313. VX=V(D,0):VY=V(D,1)
  314. ’---ススメルカ?
  315. X=OX+VX+5+1
  316. Y=OY+VY+4+1
  317. N=GSPOIT(X,Y)
  318. IF N==-1 THEN RETURN
  319. IF N==0 THEN RETURN
  320. ’---ホウコウコ゛トニヒョウシ゛
  321. VS=16
  322. IF D==1 OR D==3 GOTO @MV_V
  323. ’---
  324. OX=OX+VX
  325. FOR BY=0 TO 31
  326.  GOSUB @PUTBLK
  327. NEXT
  328. RETURN
  329. ’---
  330. @MV_V
  331. OY=OY+VY
  332. FOR BX=0 TO 31
  333.  GOSUB @PUTBLK
  334. NEXT
  335. RETURN
  336. ’┌─────────┐
  337. ’│ライトヒョウケ゛ン│
  338. ’└─────────┘
  339. @PUTMASK
  340. ’---ク゛ラフィックニカク
  341. GPAGE 0
  342. O=64
  343. GFILL 8,8,8+DX*8-1,8+DY*8-1,0
  344. X=FLOOR(DX/2)-1
  345. Y=FLOOR(DY/2)-1
  346. L=LS
  347. GCIRCLE O+X,O+Y,L,1
  348. IF LS<8 GOTO @PMSKIP
  349. GCIRCLE O+X,O+Y,L-1,1
  350. L=L-1
  351. @PMSKIP
  352. GCIRCLE O+X,O+Y,L-1,2
  353. GPAINT  O+X,O+Y,2
  354. ’---ク゛ラフィックカラセイセイ
  355. COLOR 1
  356. FOR Y=0 TO DY-1
  357.  FOR X=0 TO DX-1
  358.   C=GSPOIT(O+X,O+Y)
  359.   LOCATE X+1,Y+1
  360.   PRINT M$(C)
  361.  NEXT
  362. NEXT
  363. COLOR 0
  364. GPAGE GP
  365. RETURN
  366. ’┌────────┐
  367. ’│BGノヒョウシ゛│
  368. ’└────────┘
  369. @PUTBG
  370. FOR BY=0 TO 15
  371.  FOR BX=0 TO 15
  372.   GOSUB @PUTBLK
  373.  NEXT
  374. NEXT
  375. RETURN
  376. ’┌──────────────┐
  377. ’│2x2フ゛ロックノヒョウシ゛│
  378. ’└──────────────┘
  379. @PUTBLK
  380. X=BX+OX
  381. Y=BY+OY
  382. ’---カヘ゛
  383. N=0:C=15
  384. IF X<0 OR Y<0 GOTO @PBSKIP
  385. IF X>=MX OR Y>=MY GOTO @PBSKIP
  386. ’---
  387. G=GSPOIT(X,Y):C=9:N=1
  388. IF G==0 THEN N=0
  389. ’---
  390. @PBSKIP
  391. X=X*2:Y=Y*2
  392. X=X AND 63:Y=Y AND 63
  393. BGPUT PG,X,Y,W(N,1),C,0,0
  394. BGPUT PG,(X+1) AND 63,Y,W(N,2),C,0,0
  395. Y=Y+1:Y=Y AND 63
  396. BGPUT PG,X,Y,W(N,3),C,0,0
  397. BGPUT PG,(X+1) AND 63,Y,W(N,4),C,0,0
  398. RETURN
  399. ’┌───────┐
  400. ’│メイロサクセイ│
  401. ’└───────┘
  402. @MKMZ
  403. TX=1:TY=1
  404. GPSET TX,TY,CM
  405. PC=0:PR=100/(MX*MY)
  406. PRINT ”Р”;TIME$
  407. LY=CSRY
  408. ’---
  409. @LOOP
  410. X=TX:Y=TY
  411. LOCATE 0,LY
  412. PRINT PC;”%   ”
  413. V=RND(2)
  414. IF V==0 THEN V=-1
  415. ’---
  416. @MOVELOOP
  417. D=RND(4)
  418. C=4:PX=X:PY=Y
  419. ’---
  420. @DIRLOOP
  421. X=PX+V(D,0)
  422. Y=PY+V(D,1)
  423. IF X<1 OR X>MX-2 GOTO @DIRNEXT
  424. IF Y<1 OR Y>MY-2 GOTO @DIRNEXT
  425. ’---サユウ
  426. _X=X:_Y=Y
  427. O=1:GOSUB @WALL
  428. IF R GOTO @DIRNEXT
  429. O=-1:GOSUB @WALL
  430. IF R GOTO @DIRNEXT
  431. ’---マエ
  432. O=0:GOSUB @WALL
  433. IF R GOTO @DIRNEXT
  434. ’---マエノサユウ
  435. X=CX:Y=CY
  436. O=1:GOSUB @WALL
  437. IF R GOTO @DIRNEXT
  438. O=-1:GOSUB @WALL
  439. IF R GOTO @DIRNEXT
  440. ’---
  441. X=_X:Y=_Y
  442. GPSET X,Y,CM
  443. GOTO @MOVELOOP
  444. ’---
  445. @DIRNEXT
  446. C=C-1:IF C==0 GOTO @POSNEW
  447. D=D+V:D=D AND 3
  448. GOTO @DIRLOOP
  449. ’---
  450. @POSNEW
  451. PC=PC+PR
  452. TX=TX+1
  453. IF TX<MX-2 GOTO @POSCHK
  454. TX=1:TY=TY+1
  455. IF TY==MY-1 GOTO @POSEND
  456. @POSCHK
  457. CX=TX:CY=TY:GOSUB @WALL2
  458. IF R==FALSE GOTO @POSNEW
  459. GOTO @LOOP
  460. ’---
  461. @POSEND
  462. PRINT ”Р”;TIME$
  463. RETURN
  464. ’---
  465. @WALL
  466. I=D+O:I=I AND 3
  467. CX=X+V(I,0):CY=Y+V(I,1)
  468. ’---
  469. @WALL2
  470. R=FALSE
  471. IF CX<1 OR CX>MX-2 THEN RETURN
  472. IF CY<1 OR CY>MY-2 THEN RETURN
  473. IF GSPOIT(CX,CY)==0 THEN RETURN
  474. R=TRUE
  475. RETURN
  476. ’┌────┐
  477. ’│タイトル│
  478. ’└────┘
  479. @TI
  480. VISIBLE 1,1,0,0,0,1
  481. CLS:GPAGE 0:GCLS 0
  482. BGMSTOP
  483. LOCATE 0,6
  484. PRINT”     й  й  й  й  й  й    йй”
  485. PRINT”    и  и  и  и зи зи       з”
  486. PRINT”    и  и  и  и зи зи   ┓   з”
  487. PRINT”    ий ий и  и зи зи     ййз”
  488. PRINT”    и    зи  ижзиж иж      з”
  489. PRINT”    и    зи  и зи  и   ━   з”
  490. PRINT”    и    зи  и зи  и       з”
  491. PRINT”     ж  ж  ж        ж    жж”
  492. LOCATE 8,17
  493. PRINT”PUSH ANY BUTTON”
  494. LOCATE 3,22
  495. PRINT”(C)2011 SmileBoom Co.Ltd.”
  496. ’---
  497. _X=0:_Y=1:_R=2:_W=3
  498. ’---
  499. FOR I=0 TO OMAX-1
  500.  GOSUB @MKRING
  501. NEXT
  502. RETURN
  503. ’---
  504. @MKRING
  505. O(I,_X)=RND(200)+24
  506. O(I,_Y)=RND(150)+20
  507. O(I,_R)=0
  508. O(I,_W)=RND(60)
  509. RETURN
  510. ’---
  511. @TM
  512. FOR I=0 TO OMAX-1
  513.  ’---
  514.  IF O(I,_W)==0 GOTO @WDMOVE
  515.  O(I,_W)=O(I,_W)-1
  516.  GOTO @WDNEXT
  517.  ’---
  518. @WDMOVE
  519.  X=O(I,_X):Y=O(I,_Y)
  520.  R=O(I,_R)
  521.  GCIRCLE X,Y,R,0
  522.  R=R+4
  523.  IF R<100 GOTO @WDSKIP
  524.  GOSUB @MKRING
  525.  GOTO @WDNEXT
  526.  ’---
  527. @WDSKIP
  528.  O(I,_R)=R
  529.  GCIRCLE X,Y,R,5
  530.  ’---
  531. @WDNEXT
  532.  ’---
  533. NEXT
  534. ’---
  535. GOSUB @ANYBUT
  536. IF R==FALSE THEN RETURN
  537. ’---
  538. REQ=0
  539. RETURN
  540. @ANYBUT
  541. R=FALSE
  542. IF OLDB THEN RETURN
  543. IF B==0 THEN RETURN
  544. R=TRUE
  545. RETURN
  546. ’┌───────────────┐
  547. ’│システムスフ゜ライトノテイキ゛│
  548. ’└───────────────┘
  549. @DEFSYS
  550. SPPAGE 0
  551. N=N*4
  552. B=FLOOR(N/256)
  553. N=N AND 255
  554. K$=”SPU”+STR$(B)
  555. CHRREAD(K$,N),C1$
  556. CHRREAD(K$,N+1),C2$
  557. CHRREAD(K$,N+2),C3$
  558. CHRREAD(K$,N+3),C4$
  559. SPPAGE 1
  560. CHRSET ”SPS0”,PCG,C1$
  561. CHRSET ”SPS0”,PCG+1,C2$
  562. CHRSET ”SPS0”,PCG+2,C3$
  563. CHRSET ”SPS0”,PCG+3,C4$
  564. PCG=PCG+4
  565. SPPAGE 0
  566. RETURN