SKULL MADNESS by たけぽん

再生

 本格的なルールのアクションゲームの登場だ。
 主人公は魔法使い。まずは十字ボタンで移動・Aボタンのショットを使って、無限に現われるガイコツ(スカル)をかわしつつ、マップのどこかにある3つのオーブ(宝玉)を探そう。
 取ったオーブは、画面右のステータスに追加される。3色すべて集めれば「封印」の条件が整うぞ。マップ最上段にある扉にショットを撃って封印しよう。
 扉を封印すると、スカルはこれ以上出てこない。マップ上のスカルを全滅させて、平和な土地に変えてしまおう!

私が作りました

たけぽん

ほぼ2日で作ってます。BASICは気楽に書いていけるのでやはりいいですね。

De・バグ コーナー

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

79行目 WM=0:GX=WX:GY=WY:GJ=0
325行目 FE=0:RETURN
491行目 IF B!=0 THEN @PAUSE
494行目 IF B AND 1024 THEN @PA2


 CHECK POiNT 

インテリ
攻防のメリハリがついた、シンプルだけど面白いルールのアクションゲームだね。

ワンパク
なかなか遊べるじゃねェか。だがよォ、敵味方がゴチャゴチャして「突然死」になった時はムカつくぜ。シット!

神崎
敵の数が多いこともこのゲームの面白さだから、難しいところだね。

博士
そこはせっかくのスプライトキャラじゃしナメラカに動かすと……とも思うが、スピード感とのかねあいもありそうじゃな。
表示にナカナカ凝っておるので、各自で解析してスムーズ移動に改造するのも面白そうじゃが。

インテリ
敵を180度回頭させずに、90度限定でしか向きを変えないようにすると、動きの予測がしやすくなるかもね。直進するか回頭するかに、確率で変化を付けるのも動きが人間的になっていいと思うよ。

博士
ワシとしては完全にランダム移動というのも、古きよきアクションRPGの香りがして好きなのじゃが……。

プログラムリスト

  1. ’SKULL MADNESS И by タケホ゜ン И
  2. CLS:CLEAR:VISIBLE 1,1,0,1,1,0
  3. BGPAGE 0:BGCLIP 0,0,23,23
  4. SPPAGE 0:HI=0
  5. DIM FL(6,25),F(32,32),ORB(4)
  6. GOSUB @FLPAT
  7. DIM FK(5),FJ(5),FX(5),FY(5)
  8. DIM FD(5),SF(32,32)
  9. DIM SK(61),SX(61),SY(61)
  10. DIM SJ(61),SD(61),SE(61)
  11. FOR K=1 TO 4
  12. SPSET K,52,11,0,0,2
  13. SPANIM K,4,5,0:SPOFS K,0,-32
  14. FJ(K)=0:NEXT
  15. FOR K=11 TO 60
  16. SPSET K,128,5,0,0,1
  17. SPANIM K,2,10,0:SPOFS K,0,-32
  18. NEXT
  19. @START1
  20. SC=0:RO=1:WI=4:BGMSTOP
  21. @START2
  22. GOSUB @BGCL:QP=0:Q=0:SN=30
  23. SPSET 0,108,5,0,0,1
  24. SPANIM 0,4,10,0:SPOFS 0,88,88
  25. BGOFS 1,200,392
  26. WE=(11-RO)*5:GOSUB @FMAKE
  27. FOR K=1 TO 3:ORB(K)=0:NEXT
  28. @START3
  29. WK=0:WX=18:WY=30:WD=3:WC=1
  30. WS=0:BB1=0:BB2=0
  31. SPSET 0,108,5,0,0,1
  32. SPANIM 0,4,10,0:SPOFS 0,88,88
  33. BGOFS 1,200,392
  34. FOR K=1 TO 4
  35. SPOFS K,0,-32:NEXT
  36. FOR K=11 TO 40
  37. SPOFS K,0,-32:NEXT
  38. FS=0:DIE=0:FE=0:SA=11
  39. FOR K=0 TO 31
  40. FOR J=0 TO 31
  41. SF(J,K)=0:NEXT
  42. NEXT:J=SN
  43. FOR K=11 TO 40
  44. IF J<1 THEN @SKP1
  45. J=J-1
  46. @SKPUT
  47. I=RND(30)+1:U=RND(22)+6
  48. IF F(I,U)!=0 THEN @SKPUT
  49. SK(K)=0:SJ(K)=1:SX(K)=I
  50. SY(K)=U:SD(K)=RND(4):SE(K)=0
  51. SF(I,U)=K
  52. @SKP1
  53. NEXT
  54. CLS:GOSUB @SKDRAW
  55. GOSUB @ORBDRAW
  56. COLOR 10:LOCATE 26,0:?”SKULL”
  57. LOCATE 25,1:?”MADNESS”
  58. COLOR 0:LOCATE 26,3:?”STAGE”
  59. LOCATE 28,4:? RO
  60. LOCATE 26,7:?”SCORE”
  61. LOCATE 27,15:?”ORB”
  62. GOSUB @DRAWSC:COLOR 4
  63. LOCATE 26,22:?”ノコリ ”;WI;
  64. GOSUB @SKLAST
  65. GOSUB @INFO
  66. VSYNC 30:BGMPLAY 22
  67. IF QP==1 THEN BGMPLAY 29
  68. @MAIN
  69. GOSUB @KEYIN
  70. WK=WK+1:IF WK<12 THEN @MAIN2
  71. WK=0:GOSUB @WMOVE
  72. GOSUB @WDR1
  73. K=(WX-5)*16-8:J=(WY-5)*16-8
  74. BGOFS 1,K,J
  75. IF WM<1 OR WM>3 THEN @MAIN2
  76. F(WX,WY)=0:ORB(WM)=1:BEEP 8
  77. WM=0:GX=WX:GY=WY:GJ=0
  78. GOSUB @BGDRAW
  79. GOSUB @ORBDRAW
  80. @MAIN2
  81. GOSUB @FSTART
  82. GOSUB @FMOVE
  83. GOSUB @FDRAW
  84. GOSUB @SKMOVE
  85. GOSUB @SKDRAW
  86. IF DIE==1 THEN @DIE
  87. WS=0:BB1=0:BB2=0
  88. FOR K=0 TO WE:NEXT
  89. GOTO @MAIN
  90. @BGCL
  91. CLS:FOR K=0 TO 63
  92. FOR J=0 TO 63
  93. BGPUT 1,J,K,0,0,0,0:NEXT
  94. NEXT:RETURN
  95. @FLDRAW
  96. GOSUB @FPAT
  97. GOSUB @FMAKE
  98. FOR KK=0 TO 15
  99. FOR JJ=0 TO 15
  100. GX=JJ:GY=KK:GJ=F(JJ,KK)
  101. GOSUB @BGDRAW
  102. NEXT
  103. NEXT:RETURN
  104. @BGDRAW
  105. IF GJ<1 THEN @BG0
  106. IF GJ<4 THEN @BG1
  107. IF GJ<6 THEN @BG4
  108. BGPUT 1,GX*2,GY*2,684,3,0,0
  109. BGPUT 1,GX*2+1,GY*2,686,3,0,0
  110. BGPUT 1,GX*2,GY*2+1,748,3,0,0
  111. TT=GX*2+1
  112. BGPUT 1,TT,GY*2+1,750,3,0,0
  113. RETURN
  114. @BG0
  115. FOR K=0 TO 1
  116. FOR J=0 TO 1
  117. BGPUT 1,GX*2+J,GY*2+K,0,0,0,0
  118. NEXT
  119. NEXT:RETURN
  120. @BG1
  121. K=GX*2:J=GY*2
  122. BGPUT 1,K,J,837,GJ+10,0,0
  123. BGPUT 1,K+1,J,838,GJ+10,0,0
  124. BGPUT 1,K,J+1,869,GJ+10,0,0
  125. BGPUT 1,K+1,J+1,870,GJ+10,0,0
  126. RETURN
  127. @BG4
  128. K=GX*2:J=GY*2:I=(GJ-4)*2
  129. BGPUT 1,K,J,700,I,0,0
  130. BGPUT 1,K+1,J,701,I,0,0
  131. BGPUT 1,K,J+1,732,I,0,0
  132. BGPUT 1,K+1,J+1,733,I,0,0
  133. RETURN
  134. DATA ”00000”,”00000”,”00000”
  135. DATA ”00000”,”06660”,”06660”
  136. DATA ”66066”,”66066”,”00000”
  137. DATA ”66066”,”60006”,”00000”
  138. DATA ”00060”,”66060”,”00000”
  139. DATA ”06000”,”00006”,”00000”
  140. @FLPAT
  141. FOR K=0 TO 5
  142. FOR J=0 TO 2:READ A$
  143. FOR I=0 TO 4
  144. A=VAL(MID$(A$,I,1))
  145. FL(K,J*5+1)=A:NEXT
  146. NEXT
  147. FOR J=3 TO 4
  148. FOR I=0 TO 4
  149. FL(K,J*5+I)=FL(K,(4-J)*5+4-I)
  150. NEXT
  151. NEXT
  152. NEXT:RETURN
  153. @FMAKE
  154. FOR KK=0 TO 31
  155. FOR JJ=0 TO 31
  156. F(JJ,KK)=6:GX=JJ:GY=KK:GJ=6
  157. NEXT
  158. NEXT
  159. FOR KK=0 TO 5
  160. FOR JJ=0 TO 5:A=RND(6)
  161. IF JJ==2 AND KK==0 THEN A=0
  162. FOR IK=0 TO 4
  163. FOR IJ=0 TO 4
  164. GX=JJ*5+IJ+1:GY=KK*5+IK+1
  165. GJ=FL(A,IK*5+IJ):F(GX,GY)=GJ
  166. NEXT
  167. NEXT
  168. NEXT
  169. NEXT:F(13,0)=4
  170. FOR K=1 TO 3
  171. @FM1
  172. J=RND(30)+1:I=RND(23)+7
  173. IF F(J,I)!=0 THEN @FM1
  174. F(J,I)=K:NEXT
  175. FOR KK=0 TO 31
  176. FOR JJ=0 TO 31
  177. GX=JJ:GY=KK:GJ=F(JJ,KK)
  178. GOSUB @BGDRAW
  179. NEXT
  180. NEXT
  181. RETURN
  182. @WDR1
  183. IF WC==0 THEN RETURN
  184. @WDR2
  185. SPCHR 0,96+WD*4:K=(WX-5)*16-8
  186. BGOFS 1,K,(WY-5)*16-8
  187. RETURN
  188. @KEYIN
  189. B=BUTTON():BF=0
  190. IF B AND 8 THEN BB1=1
  191. IF B AND 2 THEN BB2=1
  192. IF B AND 4 THEN BB1=-1
  193. IF B AND 1 THEN BB2=-1
  194. IF B AND 16 THEN BF=1
  195. IF B AND 1024 THEN @PAUSE
  196. RETURN
  197. @WMOVE
  198. IF WD==0 OR WD==2 THEN @K2
  199. WS=0:IF BB1!=1 THEN @K1
  200. WD=0:K=F(WX+1,WY)
  201. IF K>3 THEN @K2
  202. WX=WX+1:WM=K:WS=1:GOTO @K0
  203. @K1
  204. IF BB1!=-1 THEN @K2
  205. WD=2:K=F(WX-1,WY)
  206. IF K>3 THEN @K2
  207. WX=WX-1:WM=K:WS=1
  208. @K0
  209. IF WS==1 THEN RETURN
  210. @K2
  211. IF BB2!=1 THEN @K3
  212. WD=1:K=F(WX,WY+1)
  213. IF K>3 THEN @K5
  214. WY=WY+1:WM=K:WS=2:GOTO @K4
  215. @K3
  216. IF BB2!=-1 THEN @K5
  217. WD=3:K=F(WX,WY-1)
  218. IF K>3 THEN @K5
  219. WY=WY-1:WM=K:WS=2
  220. @K4
  221. IF WS==2 THEN RETURN
  222. @K5
  223. IF BB1!=1 THEN @K6
  224. WD=0:K=F(WX+1,WY)
  225. IF K>3 THEN RETURN
  226. WX=WX+1:WM=K:WS=1:RETURN
  227. @K6
  228. IF BB1!=-1 THEN RETURN
  229. WD=2:K=F(WX-1,WY)
  230. IF K>3 THEN RETURN
  231. WX=WX-1:WM=K:WS=1
  232. RETURN
  233. @FSTART
  234. FS=FS-1:IF FS<0 THEN FS=0
  235. IF FS>0 THEN RETURN
  236. IF BF==0 THEN RETURN
  237. K=1
  238. @FS1
  239. IF FJ(K)==0 THEN @FS2
  240. K=K+1:IF K>4 THEN RETURN
  241. GOTO @FS1
  242. @FS2
  243. FS=23:FJ(K)=1:FX(K)=WX
  244. FY(K)=WY:FD(K)=WD:FK(K)=0
  245. BEEP 37,0,30,64:RETURN
  246. @FMOVE
  247. UK=1
  248. @FM8
  249. IF FJ(UK)==0 THEN @FM7
  250. FK(UK)=FK(UK)+1
  251. IF FK(UK)<6 THEN @FM7
  252. FK(UK)=0
  253. IF FD(UK)==1 THEN @FM3
  254. IF FD(UK)==2 THEN @FM4
  255. IF FD(UK)==3 THEN @FM5
  256. FX(UK)=FX(UK)+1:GOTO @FM6
  257. @FM3
  258. FY(UK)=FY(UK)+1:GOTO @FM6
  259. @FM4
  260. FX(UK)=FX(UK)-1:GOTO @FM6
  261. @FM5
  262. FY(UK)=FY(UK)-1
  263. @FM6
  264. UJ=F(FX(UK),FY(UK))
  265. IF UJ==4 THEN @FUUIN
  266. @FM9
  267. IF UJ>=4 THEN @FM11
  268. UJ=SF(FX(UK),FY(UK))
  269. IF UJ==0 THEN @FM7
  270. IF SJ(UJ)==0 THEN @FM7
  271. @SKDIE
  272. SF(FX(UK),FY(UK))=0:BEEP 12
  273. SC=SC+10:GOSUB @DRAWSC
  274. IF Q==1 THEN @SKDIE2
  275. @FM10
  276. SK(UJ)=0:SX(UJ)=13:SY(UJ)=1
  277. SD(UJ)=1:SF(13,1)=UJ
  278. SPOFS UJ,0,-32:GOTO @FM7
  279. @FM11
  280. FJ(UK)=0:SPOFS UK,0,-32
  281. GOTO @FM7
  282. @SKDIE2
  283. SJ(UJ)=0:SPOFS UJ,0,-32
  284. SN=SN-1:GOSUB @SKLAST
  285. IF SN<1 THEN @CL
  286. GOTO @FM7
  287. @FUUIN
  288. FJ(UK)=0:SPOFS UK,0,-32
  289. IF QP!=1 THEN @FM9
  290. BGMPLAY 3:F(13,0)=5
  291. COLOR 15:LOCATE 7,8
  292. ?”フウイン セイコウ!”:Q=1
  293. SC=SC+1000:GOSUB @INFO
  294. GX=13:GY=0:GOSUB @DRAWSC
  295. GJ=5:GOSUB @BGDRAW
  296. VSYNC 80:LOCATE 7,8
  297. ?”          ”:BGMPLAY 29
  298. @FM7
  299. UK=UK+1:IF UK<5 THEN @FM8
  300. RETURN
  301. @FDRAW
  302. IF FJ(FE)==0 THEN @FD1
  303. I=FX(FE):J=FY(FE)
  304. IF I<WX-6 THEN @FD2
  305. IF I>WX+6 THEN @FD2
  306. IF J<WY-6 THEN @FD2
  307. IF J>WY+6 THEN @FD2
  308. UK=(FX(FE)-WX)*16+88
  309. SPOFS FE,UK,(FY(FE)-WY)*16+88
  310. @FD1
  311. FE=FE+1:IF FE<5 THEN RETURN
  312. FE=0:RETURN
  313. @FD2
  314. SPOFS FE,0,-32:GOTO @FD1
  315. @SKDRAW
  316. SB=SA+6
  317. @SD0
  318. IF SJ(SA)==0 THEN @SD1
  319. I=SX(SA):J=SY(SA)
  320. IF I<WX-6 THEN @SD2
  321. IF I>WX+6 THEN @SD2
  322. IF J<WY-6 THEN @SD2
  323. IF J>WY+6 THEN @SD2
  324. UJ=(SX(SA)-WX)*16+88
  325. SPOFS SA,UJ,(SY(SA)-WY)*16+88
  326. SPCHR SA,128+SD(SA)*2
  327. SE(SA)=1
  328. @SD1
  329. SA=SA+1:IF SA<SB THEN @SD0
  330. IF SA>=41 THEN SA=11
  331. RETURN
  332. @SD2
  333. IF SE(SA)!=1 THEN @SD3
  334. SPOFS SA,0,-32
  335. @SD3
  336. SE(SA)=0:GOTO @SD1
  337. @SKMOVE
  338. ZK=11
  339. @SM0
  340. IF SJ(ZK)==0 THEN @SM7
  341. SK(ZK)=SK(ZK)+1
  342. IF SK(ZK)<13 THEN @SM7
  343. SK(ZK)=0:SF(SX(ZK),SY(ZK))=0
  344. R=RND(20)+RO+QP*5
  345. TK=SX(ZK):TJ=SY(ZK)
  346. IF R>25 THEN @SM10
  347. @SMA
  348. J=RND(4)
  349. ON J GOTO @SM1,@SM2,@SM3,@SM4
  350. @SM1
  351. IF F(TK+1,TJ)<4 THEN @SM21
  352. @SM2
  353. IF F(TK,TJ+1)<4 THEN @SM22
  354. @SM3
  355. IF F(TK-1,TJ)<4 THEN @SM23
  356. @SM4
  357. IF F(TK,TJ-1)<4 THEN @SM24
  358. GOTO @SM1
  359. @SM21
  360. SX(ZK)=SX(ZK)+1:SD(ZK)=0
  361. GOTO @SM5
  362. @SM22
  363. SY(ZK)=SY(ZK)+1:SD(ZK)=1
  364. GOTO @SM5
  365. @SM23
  366. SX(ZK)=SX(ZK)-1:SD(ZK)=2
  367. GOTO @SM5
  368. @SM24
  369. SY(ZK)=SY(ZK)-1:SD(ZK)=3
  370. @SM5
  371. IF TK!=WX THEN @SM6
  372. IF TJ==WY THEN DIE=1
  373. @SM6
  374. I=1
  375. @SMC
  376. IF SX(ZK)!=FX(I) THEN @SMB
  377. IF SY(ZK)!=FY(I) THEN @SMB
  378. IF FJ(I)!=1 THEN @SMB
  379. BEEP 12:SC=SC+10
  380. GOSUB @DRAWSC
  381. IF Q==1 THEN @SMD
  382. SK(ZK)=0:SX(ZK)=13:SY(ZK)=1
  383. SD(ZK)=1:SF(13,1)=ZK
  384. SPOFS ZK,0,-32:GOTO @SMB
  385. @SMD
  386. SJ(ZK)=0:SPOFS ZK,0,-32
  387. SN=SN-1:GOSUB @SKLAST
  388. IF SN<1 THEN @CL
  389. @SMB
  390. I=I+1:IF I<5 THEN @SMC
  391. SF(SX(ZK),SY(ZK))=ZK
  392. @SM7
  393. ZK=ZK+1:IF ZK<41 THEN @SM0
  394. RETURN
  395. @SM10
  396. R=RND(10):IF R>4 THEN @SM11
  397. IF SX(ZK)>WX THEN @SM3
  398. IF SX(ZK)<WX THEN @SM1
  399. GOTO @SMA
  400. @SM11
  401. IF SY(ZK)>WY THEN @SM4
  402. IF SY(ZK)<WY THEN @SM2
  403. GOTO @SMA
  404. @ORBDRAW
  405. COLOR 14:LOCATE 26,16
  406. PRINT ”○ ○ ○”
  407. IF ORB(1)==1 THEN GOSUB @ORB1
  408. IF ORB(2)==1 THEN GOSUB @ORB2
  409. IF ORB(3)==1 THEN GOSUB @ORB3
  410. K=ORB(1)+ORB(2)+ORB(3)
  411. IF K==3 THEN QP=1:BGMPLAY 29
  412. GOSUB @INFO:RETURN
  413. @ORB1
  414. COLOR 2:LOCATE 26,16
  415. PRINT ”●”;:RETURN
  416. @ORB2
  417. COLOR 11:LOCATE 28,16
  418. PRINT ”●”;:RETURN
  419. @ORB3
  420. COLOR 13:LOCATE 30,16
  421. PRINT ”●”;:RETURN
  422. @SKLAST
  423. COLOR 9:LOCATE 26,11
  424. PRINT ”ENEMY”
  425. LOCATE 28,12
  426. PRINT SN;” ”;:RETURN
  427. @CL
  428. BGMSTOP:FOR K=11 TO 40
  429. SPOFS K,0,-32:NEXT:COLOR 15
  430. LOCATE 9,8:?”CLEAR!”:BEEP 42
  431. VSYNC 150:WI=WI+1:SC=SC+5000
  432. RO=RO+1:IF RO>10 THEN RO=1
  433. GOTO @START2
  434. @DRAWSC
  435. A$=STR$(SC):R=LEN(A$)
  436. A$=”    ”+A$
  437. B$=MID$(A$,R-1,5):COLOR 0
  438. LOCATE 26,8:? B$
  439. RETURN
  440. @DIE
  441. BGMSTOP:BEEP 6:SPCHR 0,120
  442. VSYNC 90
  443. WI=WI-1:IF WI>-1 THEN @START3
  444. BGMPLAY 6:COLOR 15
  445. LOCATE 7,8:?”GAME  OVER”
  446. @GV1
  447. B=BUTTON()
  448. IF B!=0 THEN @GV1
  449. LOCATE 6,18:?”HIT A BUTTON”
  450. @GV2
  451. B=BUTTON()
  452. IF B AND 16 THEN @START1
  453. IF B AND 1024 THEN END
  454. GOTO @GV2
  455. @INFO
  456. COLOR 3:LOCATE 26,18
  457. IF Q==1 THEN @IN1
  458. IF QP==1 THEN @IN2
  459. ?”オ-フ゛ヲ”:LOCATE 26,19
  460. ? ”アツメロ ”:RETURN
  461. @IN1
  462. ? ” テキヲ ”:LOCATE 26,19
  463. ? ”セ゛ンメツ”:RETURN
  464. @IN2
  465. ? ”フウイン ”:LOCATE 26,19
  466. ? ” セヨ  ”:RETURN
  467. @PAUSE
  468. BGMSTOP:B=BUTTON()
  469. IF B!=0 THEN @PAUSE
  470. @PA1
  471. B=BUTTON()
  472. IF B AND 1024 THEN @PA2
  473. GOTO @PA1
  474. @PA2
  475. VSYNC 20:BGMPLAY 22
  476. IF QP==1 THEN BGMPLAY 29
  477. RETURN