STAR BATTLER by もりちゃん

再生

 2画面を使った、2人対戦のシューティングゲームの登場だ。
 下画面タッチでゲームスタート(または終了)。タイトル画面に表示されている通り、前後左右とショットでそれぞれのプレイヤー機を操作する。一方向に押せば押すほどスピードが上がっていき、逆方向に押せば減速する、無重力の操作感にまず慣れておこう。
 相手と撃ち合って画面上部のダメージ率を100%にするのが目的だが、ときどき現われるスターを取るとある程度回復になる。
 ほかにもアイテムは、弾を画面内に何発まで撃てるか(赤色ゲージ)を変える「R」、敵に与えるダメージ量(黄色ゲージ)を変える「P」がある。アイテムが緑色ならゲージ上昇だが、赤色だとかえって低下してしまうので要注意。

私が作りました

もりちゃん

シューティングゲームを作っていたら、いつの間にか対戦ゲームになっていました。

De・バグ コーナー

(6月30日)下記のように訂正してください

491行目 LOCATE 21,21:PRINT "† FIRE";
(†=Rボタン記号)


 CHECK POiNT 

ワンパク
ウォオー! 右手と……左手が……あっちとこっちで……グァアー! シィィット!

インテリ
ワンパク君、2人用ゲームを1人で遊ぶのは無理がないかい。まあ、こういう遊び方もあるといえばあるかな。

博士
確かに、2人用だというだけでスルーするのはもったいない本格派じゃな。
ワシも拡大文字の処理にはビックリじゃ。手製のGPUTCHR拡張命令といったところかの。ラベル名が@SYMBOLというのはF-BASIC使いならニヤリとするところじゃろう。

神崎
BGを使った2重スクロールや、その下のグラフィック面で書いた流れ星みたいな細かい演出も雰囲気があっていいね。

ワンパク
そのへんのルーチンはラベルが始まってからRETURNで終わるまで全部カラにして打っても動作に問題ないんだぜ! 打ち込むにはてっとり早えんじゃねェか?

博士
ワンパク君が言うとハラハラするが、手軽に打ち込んでゲームを楽しんだり、ゲーム本体やルーチンごとに解析したりするにはそれもひとつの手段じゃな。ワシとしてはそれぞれの処理を楽しみながら打つのも一興じゃが。

プログラムリスト

  1. ’┌────────────┐
  2. ’│STAR BATTLER│
  3. ’└────────────┘
  4. ’ショキセッテイ
  5. VISIBLE 1,1,0,0,1,1
  6. COLOR 15:CLS:BGMSTOP
  7. FOR P=0 TO 1
  8. GPAGE P:SPPAGE P:BGPAGE P
  9. FOR I=0 TO 255
  10. COLINIT ”GRP”,I
  11. COLINIT ”BG”,I
  12. NEXT I
  13. GCOLOR 0:GCLS:SPCLR
  14. BGCLIP 0,0,31,23
  15. BGOFS 0,0,0:BGOFS 1,0,0
  16. NEXT P
  17. GPAGE 0:SPPAGE 0:BGPAGE 0
  18. PNLTYPE ”OFF”
  19. CLEAR:XYMAX=16:NN=10
  20. DIM B1(2,4),BCNT(2,4)
  21. DIM XB(2,4),YB(2,4),YS(2)
  22. DIM A1(2),XX(2),YY(2),REN(2)
  23. DIM DM(2),PW(2),RF(2),TA(2)
  24. DIM C$(3,256),KEYNO(2,5)
  25. DIM XN(NN),YN(NN),CN(NN)
  26. ’キ-No.トウロク
  27. FOR I=0 TO 1
  28. FOR J=0 TO 4
  29. READ NO
  30. KEYNO(I,J)=NO
  31. NEXT J
  32. NEXT I
  33. DATA   1,  2,  4,  8,256
  34. DATA  64, 32,128, 16,512
  35. ’BG(ホシソ゛ラ)セッテイ
  36. C$=”00000000”
  37. C$=C$+C$+C$+C$+C$+C$+C$+C$
  38. FOR I=0 TO 2
  39. FOR J=0 TO 255
  40. C$(I,J)=C$
  41. NEXT J
  42. NEXT I
  43. FOR I=1 TO 200
  44. C1=RND(3) :C2=RND(256)
  45. C3=RND(64):C4=RND(16)
  46. CB$=C$(C1,C2)
  47. C$(C1,C2)=MID$(CB$,0,C3)+HEX$(C4)+MID$(CB$,C3+1,63-C3)
  48. NEXT I
  49. FOR P=0 TO 1
  50. BGPAGE P
  51. FOR I=0 TO 2
  52. I$=”BGU”+STR$(I)
  53. FOR J=0 TO 255
  54. CHRSET I$,J,C$(I,J)
  55. NEXT J
  56. NEXT I
  57. FOR I=0 TO 47
  58. FOR J=0 TO 31
  59. BGPUT 0,   J,   I,(I % 24)*32+J,0,0,0
  60. BGPUT 1,31-J,47-I,(I % 24)*32+J,0,0,0
  61. NEXT J
  62. NEXT I
  63. NEXT P
  64. FOR I=0 TO NN-1
  65. XN(I)=-1
  66. NEXT I
  67. ’スフ゜ライトセッテイ
  68. ’0-3:シ゛キ 4-7:タマ 8-11:ハ゛クハツ
  69. ’12:ハ゜ワ-アッフ゜ 13:レンシャアッフ゜
  70. ’14:ハ゜ワ-タ゛ウン 15:レンシャタ゛ウン
  71. ’16-19:ライフアッフ゜
  72. CHRINIT ”SPU0”
  73. CHRINIT ”SPU2”
  74. CHRINIT ”SPU3”
  75. FOR I=0 TO 19
  76. READ NO1,NO2
  77. FOR J=0 TO 3
  78. SPPAGE 0
  79. CHRREAD(”SPU”+STR$(NO1),NO2*4+J),S$
  80. CHRSET ”SPU0”,I*4+J,S$
  81. SPPAGE 1
  82. CHRSET ”SPS0”,I*4+J,S$
  83. NEXT J
  84. NEXT I
  85. DATA 2, 8,2, 9,2,10,2,11
  86. DATA 0,40,0,42,0,44,0,46
  87. DATA 3,56,3,57,3,58,3,59
  88. DATA 3,41,3,43,3,40,3,42
  89. DATA 2,28,2,29,2,30,2,31
  90. ’[B]→[R]ヘンカン
  91. FOR I=0 TO 2 STEP 2
  92. SPPAGE 0
  93. CHRREAD(”SPU0”,(13+I)*4+3),S$
  94. SR$=MID$(S$,0,16)
  95. SR$=SR$+MID$(S$,8,3)
  96. SR$=SR$+MID$(S$,19,64-19)
  97. CHRSET ”SPU0”,(13+I)*4+3,SR$
  98. SPPAGE 1
  99. CHRSET ”SPS0”,(13+I)*4+3,SR$
  100. NEXT I
  101. FOR P=0 TO 1
  102. SPPAGE P
  103. FOR I=0 TO 3
  104. SPSET I   ,0,0,0,0,0
  105. SPOFS I   ,-16,-16
  106. SPSET I+10,0,2,0,0,0
  107. SPOFS I+10,-16,-16
  108. SPSET I+30,0,2,0,0,0
  109. SPOFS I+30,-16,-16
  110. SPSET I+40,0,0,0,0,0
  111. SPOFS I+40,-16,-16
  112. NEXT I
  113. SPSET 50,12,4,0,0,0
  114. SPOFS 50,-16,-16
  115. SPSET 51,13,4,0,0,0
  116. SPOFS 51,-16,-16
  117. SPSET 52,14,2,0,0,0
  118. SPOFS 52,-16,-16
  119. SPSET 53,15,2,0,0,0
  120. SPOFS 53,-16,-16
  121. SPSET 54,16,3,0,0,0
  122. SPOFS 54,-16,-16
  123. SPANIM 54,4,10,0
  124. NEXT P
  125. @START
  126. GOSUB @TITLE
  127. IF ED THEN VISIBLE 1,1,0,0,1,1:END
  128. ’シ゛ョウタイクリア
  129. SPPAGE 0
  130. FOR I=0 TO 1
  131. X(I)=20+I*200:Y(I)=20+I*330
  132. A1(I)=I*2+1:REN(I)=0:TA(I)=0
  133. DM(I)=0:PW(I)=2:RF(I)=2
  134. XX(I)=0:YY(I)=0:YS(I)=0
  135. FOR J=0 TO 3
  136. B1(I,J)=0:BCNT(I,J)=0
  137. NEXT J
  138. SPPAGE (Y(I)>191)
  139. SPCHR I*30,A1(I)
  140. SPOFS I*30,X(I),Y(I)
  141. NEXT I
  142. BKCNT=0:BK=-1:YID=0
  143. GOSUB @INFO
  144. ’メインル-チン
  145. @MAIN
  146. BTN=0:M=0
  147. FOR I=0 TO 4
  148. VSYNC 1
  149. BTN1=BUTTON()
  150. IF BTN1 THEN BTN=BTN1
  151. FOR J=0 TO 1
  152. IF (BTN AND KEYNO(J,4))==0 THEN REN(J)=0
  153. NEXT J
  154. NEXT I
  155. @LOOP
  156. MA=M*30:MB=MA+10
  157. IF BKCNT>0 AND M==BK THEN BKCNT=BKCNT+1:GOTO @LNEXT1
  158. IF BTN AND KEYNO(M,0) THEN YY(M)=YY(M)-2:A1(M)=3
  159. IF BTN AND KEYNO(M,1) THEN YY(M)=YY(M)+2:A1(M)=1
  160. IF BTN AND KEYNO(M,2) THEN XX(M)=XX(M)-2:A1(M)=2
  161. IF BTN AND KEYNO(M,3) THEN XX(M)=XX(M)+2:A1(M)=0
  162. IF XX(M)<-XYMAX THEN XX(M)=-XYMAX
  163. IF XX(M)> XYMAX THEN XX(M)= XYMAX
  164. IF YY(M)<-XYMAX THEN YY(M)=-XYMAX
  165. IF YY(M)> XYMAX THEN YY(M)= XYMAX
  166. X(M)=X(M)+XX(M):Y(M)=Y(M)+YY(M)
  167. IF X(M)<=-16 THEN X(M)=X(M)+256
  168. IF X(M)>=256 THEN X(M)=X(M)-256
  169. IF Y(M)<=-16 THEN Y(M)=Y(M)+384
  170. IF Y(M)>=384 THEN Y(M)=Y(M)-384
  171. PG=(Y(M)>191)
  172. Y2=Y(M)-192*PG
  173. SPPAGE PG
  174. SPCHR MA,A1(M)
  175. SPOFS MA,X(M),Y2
  176. SPPAGE 1-PG
  177. SPOFS MA,-16,-16
  178. XA=0:YA=0
  179. IF X(M)<0   THEN XA= 256
  180. IF X(M)>239 THEN XA=-256
  181. IF Y(M)<0   THEN YA= 192
  182. IF Y(M)>367 THEN YA=-192
  183. IF Y(M)>175 AND Y(M)<192 THEN YA=-192
  184. FOR P=0 TO 1
  185. SPPAGE P
  186. SPOFS MA+1,-16,-16:SPOFS MA+2,-16,-16:SPOFS MA+3,-16,-16
  187. NEXT P
  188. SPPAGE PG
  189. IF XA        THEN SPCHR MA+1,A1(M):SPOFS MA+1,X(M)+XA,Y2
  190. SPPAGE 1-PG
  191. IF YA        THEN SPCHR MA+2,A1(M):SPOFS MA+2,X(M)   ,Y2+YA
  192. IF XA AND YA THEN SPCHR MA+3,A1(M):SPOFS MA+3,X(M)+XA,Y2+YA
  193. IF BTN AND KEYNO(M,4) THEN I=0:GOSUB @FIRE
  194. XC=X(1-M):YC=Y(1-M)
  195. IF XC<8 THEN XC=XC+256
  196. IF YC<8 THEN YC=YC+384
  197. @LNEXT1
  198. FOR I=0 TO 3
  199. IF BCNT(M,I)>0 THEN GOSUB @TAMA
  200. NEXT I
  201. IF M==0 THEN M=1:GOTO @LOOP
  202. IF YID==0 AND RND(30)==0 THEN GOSUB @ITEMSET
  203. IF YID THEN GOSUB @ITEMSCR
  204. IF BKCNT==0 THEN BEEP 21,(ABS(XX(0))+ABS(YY(0))+ABS(YY(1)))*125
  205. GOSUB @SCROLL
  206. GOSUB @SHOOTING
  207. IF BKCNT>=40 THEN @GAMEOVER
  208. GOTO @MAIN
  209. ’ホシソ゛ラスクロ-ル
  210. @SCROLL
  211. FOR P=0 TO 1
  212. BGPAGE P
  213. FOR I=0 TO 1
  214. YS(I)=YS(I)+I+1
  215. IF YS(I)>191 THEN YS(I)=0
  216. BGOFS I,0,YS(I)
  217. NEXT I
  218. NEXT P
  219. RETURN
  220. ’ナカ゛レホ゛シ
  221. @SHOOTING
  222. FOR I=0 TO NN-1
  223. IF XN(I)<0 THEN @SHTNEXT1
  224. GP=(YN(I)>191)
  225. GPAGE GP
  226. GLINE XN(I),YN(I)-192*GP,XN(I)+3,YN(I)-3-192*GP,0
  227. XN(I)=XN(I)-4:YN(I)=YN(I)+4
  228. IF XN(I)<0 OR YN(I)>383 THEN XN(I)=-1:GOTO @SHTNEXT1
  229. GP=(YN(I)>191)
  230. GPAGE GP
  231. GLINE XN(I),YN(I)-192*GP,XN(I)+3,YN(I)-3-192*GP,CN(I)
  232. @SHTNEXT1
  233. NEXT I
  234. @SHTSET
  235. FOR I=0 TO NN-1
  236. IF XN(I)>=0 THEN @SHTNEXT2
  237. XN(I)=RND(256)
  238. YN(I)=RND(94)*4+8
  239. CN(I)=RND(255)+1
  240. I=NN
  241. @SHTNEXT2
  242. NEXT I
  243. RETURN
  244. ’タマハッシャ
  245. @FIRE
  246. IF REN(M) OR TA(M)>=RF(M) THEN RETURN
  247. IF BCNT(M,I)<=0 THEN @FIRESET
  248. I=I+1
  249. GOTO @FIRE
  250. @FIRESET
  251. B1(M,I)=A1(M):XB(M,I)=X(M):YB(M,I)=Y(M)
  252. BCNT(M,I)=10:REN(M)=1:TA(M)=TA(M)+1
  253. PG=(YB(M,I)>191)
  254. SPPAGE PG
  255. SPCHR MB+I,B1(M,I)+4
  256. SPOFS MB+I,XB(M,I),YB(M,I)-192*PG
  257. IF BKCNT==0 THEN BEEP 10,M*2000
  258. RETURN
  259. ’タマイト゛ウ
  260. @TAMA
  261. IF B1(M,I)==0 THEN XB(M,I)=XB(M,I)+16
  262. IF B1(M,I)==1 THEN YB(M,I)=YB(M,I)+16
  263. IF B1(M,I)==2 THEN XB(M,I)=XB(M,I)-16
  264. IF B1(M,I)==3 THEN YB(M,I)=YB(M,I)-16
  265. IF XB(M,I)<= -8 THEN XB(M,I)=XB(M,I)+256
  266. IF XB(M,I)>=248 THEN XB(M,I)=XB(M,I)-256
  267. IF YB(M,I)<= -8 THEN YB(M,I)=YB(M,I)+384
  268. IF YB(M,I)>=376 THEN YB(M,I)=YB(M,I)-384
  269. PG=(YB(M,I)>191)
  270. SPPAGE PG
  271. SPCHR MB+I,B1(M,I)+4
  272. SPOFS MB+I,XB(M,I),YB(M,I)-192*PG
  273. SPPAGE 1-PG
  274. SPOFS MB+I,-16,-16
  275. GOSUB @CHECK
  276. BCNT(M,I)=BCNT(M,I)-1
  277. IF CK THEN BCNT(M,I)=0
  278. IF BCNT(M,I)<=0 THEN SPPAGE PG:SPOFS MB+I,-16,-16:TA(M)=TA(M)-1
  279. IF CK THEN GOSUB @DAMAGE
  280. RETURN
  281. ’アタリハンテイ
  282. @CHECK
  283. CK=0
  284. IF BKCNT>0 THEN RETURN
  285. XZ=ABS(X(1-M)-XB(M,I))
  286. YZ=ABS(Y(1-M)-YB(M,I))
  287. IF (XZ<=8 OR XZ>=248)AND YZ<=8 OR YZ>=376 THEN CK=1
  288. RETURN
  289. ’タ゛メ-シ゛
  290. @DAMAGE
  291. DM(1-M)=DM(1-M)+PW(M)*5+5
  292. IF DM(1-M)>100 THEN DM(1-M)=100
  293. GOSUB @INFO
  294. IF DM(1-M)>=100 THEN GOSUB @BAKUHATU:RETURN
  295. BEEP 11,(1-M)*2000
  296. RETURN
  297. ’アイテムセット
  298. @ITEMSET
  299. XI=RND(240):YID=RND(2)*2-1
  300. YI=-YID*200+184:IT=RND(5)
  301. IF BKCNT==0 THEN BEEP 12
  302. RETURN
  303. ’アイテムスクロ-ル
  304. @ITEMSCR
  305. YI=YI+YID*4
  306. SPPAGE 0:SPOFS IT+50,XI,YI
  307. SPPAGE 1:SPOFS IT+50,XI,YI-192
  308. IF YI<-15 OR YI>383 THEN YID=0:RETURN
  309. GOSUB @ITEMCHK
  310. IF CK<0 THEN RETURN
  311. BP=0
  312. ON IT GOSUB @POWERUP,@RAPIDUP,@POWERDN,@RAPIDDN,@LIFEUP
  313. FOR P=0 TO 1
  314. SPPAGE P:SPOFS IT+50,-16,-16
  315. NEXT P
  316. GOSUB @INFO
  317. IF BKCNT==0 THEN BEEP BP,CK*2000
  318. YID=0
  319. RETURN
  320. ’ハ゜ワ-アッフ゜
  321. @POWERUP
  322. BP=8:PW(CK)=PW(CK)+1
  323. IF PW(CK)>4 THEN PW(CK)=4
  324. RETURN
  325. ’レンシャアッフ゜
  326. @RAPIDUP
  327. BP=8:RF(CK)=RF(CK)+1
  328. IF RF(CK)>4 THEN RF(CK)=4
  329. RETURN
  330. ’ハ゜ワ-タ゛ウン
  331. @POWERDN
  332. BP=4:PW(CK)=PW(CK)-1
  333. IF PW(CK)<1 THEN PW(CK)=1
  334. RETURN
  335. ’レンシャタ゛ウン
  336. @RAPIDDN
  337. BP=4:RF(CK)=RF(CK)-1
  338. IF RF(CK)<1 THEN RF(CK)=1
  339. RETURN
  340. ’ライフアッフ゜
  341. @LIFEUP
  342. BP=32:DM(CK)=DM(CK)-20
  343. IF DM(CK)<0 THEN DM(CK)=0
  344. RETURN
  345. ’アイテムケ゛ットチェック
  346. @ITEMCHK
  347. CK=-1
  348. FOR I=0 TO 1
  349. XZ=ABS(X(I)-XI)
  350. YZ=ABS(Y(I)-YI)
  351. IF (XZ<=8 OR XZ>=248) AND YZ<=8 OR YZ>=376 THEN CK=I:I=1
  352. NEXT I
  353. RETURN
  354. ’シ゛ョウホウヒョウシ゛
  355. @INFO
  356. GPAGE 0
  357. FOR I=0 TO 1
  358. COLOR I*2+11:LOCATE I*14+5,0
  359. PRINT ”   ”;
  360. LOCATE I*14+8-LEN(STR$(DM(I))),0
  361. PRINT DM(I);”%”;
  362. FOR J=0 TO 3
  363. XG=I*112+J*8
  364. GBOX XG+72,1,XG+77,2,2*(PW(I)>J)
  365. GBOX XG+72,4,XG+77,5,12*(RF(I)>J)
  366. NEXT J
  367. NEXT I
  368. RETURN
  369. ’ハ゛クハツ
  370. @BAKUHATU
  371. BKCNT=1:BK=1-M:MA=BK*30
  372. FOR P=0 TO 1
  373. SPPAGE P
  374. FOR J=0 TO 3
  375. SPCHR MA+J,8
  376. SPANIM MA+J,4,10,0
  377. NEXT J
  378. NEXT P
  379. BEEP 13,BK*2000
  380. RETURN
  381. ’ケ゛-ムオ-ハ゛-
  382. @GAMEOVER
  383. BGMPLAY 6:_M=8:_O=&H10:_Y=64
  384. FOR I=1 TO 22
  385. GPAGE 0:GCOLOR 0:GCLS
  386. _Z$=STR$(2-BK)
  387. _X=256-I*32+6*64
  388. GCOLOR BK*2+2
  389. GOSUB @SYMBOL
  390. FOR J=0 TO 5
  391. GPUTCHR 256-I*32+J*64,64,”BGF0”,ASC(MID$(”PLAYER”,J,1)),13-BK*2,8
  392. NEXT J
  393. GPAGE 1:GCOLOR 0:GCLS
  394. FOR J=0 TO 4
  395. GPUTCHR 256-I*32+(J+2)*64,64,”BGF0”,ASC(MID$(”WIN!!”,J,1)),4,8
  396. NEXT J
  397. VSYNC 11
  398. NEXT I
  399. @OVERWAIT
  400. IF BGMCHK()==TRUE THEN @OVERWAIT
  401. FOR P=0 TO 1
  402. GPAGE P:GCOLOR 0:CLS
  403. SPPAGE P
  404. FOR I=0 TO 1
  405. SPOFS IT+50,-16,-16
  406. FOR J=0 TO 3
  407. SPANIM I*30+J,1,0,0
  408. SPOFS I*30+J,-16,-16
  409. SPOFS I*30+J+10,-16,-16
  410. NEXT J
  411. NEXT I
  412. NEXT P
  413. GOTO @START
  414. ’タイトル
  415. @TITLE
  416. VISIBLE 1,1,0,0,1,0
  417. CLS:GPAGE 0
  418. _M=6:_O=&H00:_Z$=”STAR”
  419. FOR I=5 TO 1 STEP -1
  420. GCOLOR &H3E-I
  421. _X=I*4-6:_Y=I*2
  422. GOSUB @SYMBOL
  423. NEXT I
  424. GCOLOR 11
  425. _X=-6:_Y=0
  426. GOSUB @SYMBOL
  427. _M=4:_Z$=”BATTLER”
  428. FOR I=5 TO 1 STEP -1
  429. GCOLOR &HE5+I
  430. _X=I*4+18:_Y=I*2+48
  431. GOSUB @SYMBOL
  432. NEXT I
  433. GCOLOR 12
  434. _X=18:_Y=48
  435. GOSUB @SYMBOL
  436. GPAGE 1
  437. XT1=8:XT2=136:YT=104
  438. XTW=111:YTW=79
  439. GFILL XT1,YT,XT1+XTW,YT+YTW,4
  440. GBOX  XT1,YT,XT1+XTW,YT+YTW,15
  441. GFILL XT2,YT,XT2+XTW,YT+YTW,2
  442. GBOX  XT2,YT,XT2+XTW,YT+YTW,15
  443. GCOLOR 15
  444. _X=24:_Y=136:_M=2:_Z$=”START”
  445. GOSUB @SYMBOL
  446. _X=168:_Z$=”END”
  447. GOSUB @SYMBOL
  448. COLOR 15
  449. LOCATE  5,13:PRINT ”PLAYER 1”;
  450. LOCATE  8,15:PRINT ”↑”;
  451. LOCATE  5,17:PRINT ”←”;
  452. LOCATE 11,17:PRINT ”→”;
  453. LOCATE  8,19:PRINT ”↓”;
  454. LOCATE  6,21:PRINT ”К FIRE”;
  455. LOCATE 20,13:PRINT ”PLAYER 2”;
  456. LOCATE 23,15:PRINT ”Ф”;
  457. LOCATE 20,17:PRINT ”Х”;
  458. LOCATE 26,17:PRINT ”А”;
  459. LOCATE 23,19:PRINT ”Б”;
  460. LOCATE 21,21:PRINT ”н FIRE”;
  461. SPPAGE 0
  462. SPCHR  0,3:SPOFS  0,60,132
  463. SPCHR 30,3:SPOFS 30,180,132
  464. PNLSTR  5,3,”POWER UP”  ,15
  465. PNLSTR  5,9,”RAPID UP”  ,15
  466. PNLSTR 20,3,”POWER DOWN”,15
  467. PNLSTR 20,9,”RAPID DOWN”,15
  468. PNLSTR 13,6,”LIFE UP”   ,15
  469. SPPAGE 1
  470. SPOFS 50, 20,20
  471. SPOFS 51, 20,68
  472. SPOFS 52,140,20
  473. SPOFS 53,140,68
  474. SPOFS 54, 84,44
  475. VISIBLE 1,1,1,1,1,1
  476. BGMPLAY 15:ED=0
  477. @TCHWAIT
  478. GOSUB @SCROLL
  479. VSYNC 4
  480. IF TCHST==FALSE THEN @TCHWAIT
  481. XT0=TCHX:YT0=TCHY
  482. IF XT0<XT1 OR XT0>XT2+XTW OR YT0<YT OR YT0>YT+YTW THEN @TCHWAIT
  483. IF XT0>XT1+XTW AND XT0<XT2 THEN @TCHWAIT
  484. IF XT0>=XT2 THEN ED=1
  485. FOR P=0 TO 1
  486. GPAGE P:GCOLOR 0:GCLS
  487. NEXT P
  488. FOR I=0 TO 4
  489. SPOFS I+50,-16,-16
  490. NEXT I
  491. SPPAGE 0
  492. SPOFS 0,-16,-16
  493. SPOFS 30,-16,-16
  494. CLS:BGMSTOP
  495. RETURN
  496. ’モシ゛カクタ゛イ
  497. @SYMBOL
  498. _O1=(_O AND &H0F)
  499. _O2=(_O AND &HF0)
  500. IF _O1==0 THEN _X1=_X:_Y1=_Y
  501. _LEN=LEN(_Z$)
  502. FOR _I=0 TO _LEN-1
  503. CHRREAD(”BGF0”,ASC(MID$(_Z$,_I,1))),_C$
  504. FOR _J=0 TO 7
  505. _Y2=_Y1+_M-1
  506. FOR _K=0 TO 7
  507. _X2=_X1+_M-1
  508. _A$=MID$(_C$,_J*8+_K,1)
  509. IF _A$==”0” THEN @_NEXT4
  510. IF _O==0 THEN GFILL _X1,_Y1,_X2,_Y2:GOTO @_NEXT4
  511. GPSET _X1,_Y1:GPSET _X1,_Y2
  512. GPSET _X2,_Y1:GPSET _X2,_Y2
  513. IF _J!=0 THEN IF MID$(_C$,(_J-1)*8+_K,1)!=”0” THEN @_NEXT1
  514. GLINE _X1,_Y1,_X2,_Y1
  515. @_NEXT1
  516. IF _J!=7 THEN IF MID$(_C$,(_J+1)*8+_K,1)!=”0” THEN @_NEXT2
  517. GLINE _X1,_Y2,_X2,_Y2
  518. @_NEXT2
  519. IF _K!=0 THEN IF MID$(_C$,_J*8+(_K-1),1)!=”0” THEN @_NEXT3
  520. GLINE _X1,_Y1,_X1,_Y2
  521. @_NEXT3
  522. IF _K!=7 THEN IF MID$(_C$,_J*8+(_K+1),1)!=”0” THEN @_NEXT4
  523. GLINE _X2,_Y1,_X2,_Y2
  524. @_NEXT4
  525. _X1=_X1+_M
  526. NEXT _K
  527. _X1=_X1-_M*8:_Y1=_Y1+_M
  528. NEXT _J
  529. _X1=_X1+_M*8:_Y1=_Y1-_M*8
  530. NEXT _I
  531. RETURN