Wiz Fight by たけぽん

再生

 横スクロールのアクションゲーム。十字ボタン右でひたすら前に進み、ステージの端にあるドアに辿り着くのが目的だ。
 次々と現われる魔法使いをXボタンで攻撃、避けるにはAボタン(または十字ボタン上)でジャンプ!
 画面上端がステージの進行度、下の緑のバーはプレイヤーの残りライフだ。攻撃を受け続けてライフが無くなればゲームオーバー。ステージクリアするとある程度回復できるので、うまく生き延びてハイスコアを目指そう!

私が作りました

たけぽん

スプライト機能を持ったパソコンを持っていたことがなかったため、はじめてスプライトを扱いました。使い方が変なところがあるかもしれません。


 CHECK POiNT 

ワンパク
ん? このプログラム、ときどき「」で始まる妙な行があるんだが……

博士
フム、たとえば72~73行は一見フシギなリストかものう。じゃが実際に打ってみるとわかるが、REM)文をうまく使ってプチコンの画面サイズで打ちやすいように作ってあるのじゃよ。親切設計じゃのう。

インテリ
スプライトを使った初めてのプログラムだというけど、なかなか使いこなしてるね。拡大したキャラを使うことで、シンプルでも見栄えがしてゲームもスピーディーになっているよ。

神崎
敵の動作にいろいろ工夫があるけど、プレイヤーの操作については単調なところがあるかも……

博士
なるほどのう。ジャンプと攻撃、「炎攻撃を避けられる/避けられない」「点数になる/ならない」とメリット・デメリットがキチンと分けてあるのは高ポイントじゃが、操作の使い分けが比較的カンタンなので単調に感じてしまうのじゃろう。改造するなら、なかなか奥の深い課題じゃぞ。

プログラムリスト

  1. ’WIZ FIGHT    by タケホ゜ン
  2. ’カ゛メンカラ ハミタ゛ストコロ 5キ゛ョウアリ
  3. ’ツキ゛ノキ゛ョウノ ’ ノアトヲイレル
  4. CLS:CLEAR:VISIBLE 1,1,0,1,1,0
  5. BGPAGE 0:BGCLIP 0,20,31,21
  6. BGOFS 1,0,0:HI=0:SPPAGE 0
  7. DIM WX(5),WY(5),WJ(5),WD(5)
  8. DIM FX(10),FY(10),FJ(10)
  9. DIM FD(10),HS(10),HJ(10)
  10. DIM HH(10),HF(10)
  11. ’ИИ ┷ト スヘ゜-ス 32モシ゛ツ゛ツイレテネ ИИ
  12. DA$=”┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷(空白32文字分)
  13. ’┷┷┷┷┷┷┷┷(空白20文字分)
  14. ’            ”
  15. FOR K=0 TO 9
  16. READ HS(K),HJ(K),HH(K),HF(K)
  17. NEXT
  18. DATA 1,2,0,0,1,3,0,1,2,5,7,0
  19. DATA 2,7,3,2,2,3,8,2,5,8,8,1
  20. DATA 3,5,2,4,3,1,9,3,5,7,5,4
  21. DATA 7,9,7,6
  22. SPSET 0,64,4,0,0,2
  23. SPSCALE 0,200:SPANIM 0,4,10,0
  24. SPSET 1,21,4,0,0,1
  25. SPSET 2,22,4,0,0,1
  26. SPSCALE 1,200:SPSCALE 2,200
  27. SPSET 3,88,4,0,0,2
  28. SPSET 4,59,9,0,0,2
  29. SPSCALE 3,200:SPSCALE 4,200
  30. SPSET 5,61,7,0,0,2
  31. SPANIM 3,2,45,4:SPSCALE 5,200
  32. FOR K=0 TO 4
  33. SPSET 10+K,104,2,0,0,1
  34. SPSCALE 10+K,200
  35. SPANIM 10+K,4,10,0
  36. NEXT
  37. SPSET 16,121,2,0,0,2
  38. SPSCALE 16,200
  39. FOR K=0 TO 9
  40. SPSET 20+K,44,3,0,0,1
  41. SPSCALE 20+K,200
  42. SPANIM 20+K,2,10,0
  43. NEXT
  44. @HAJIME
  45. RO=0:SC=0:ML=0
  46. DDR=32:FL=200:WWW=5000
  47. @START
  48. BGMSTOP:GOSUB @ALLOFF
  49. GOSUB @RENGA:RE=0
  50. MY=16:MJ=0:MK=0:MK2=0:DD=0
  51. SPOFS 0,16,MY*8:COLOR 15
  52. LOCATE 12,5:PRINT ”READY!”
  53. FOR K=0 TO 50000:NEXT:CLS
  54. BGMPLAY 0:GOSUB @DRAWSTA
  55. @MAIN
  56. BGOFS 1,RE*8,0:GOSUB @WIZDRAW
  57. SPOFS 0,16,MY*8:GOSUB @DOOR
  58. GOSUB @FIREDRAW
  59. GOSUB @DRAWSTA
  60. IF ML>=FL THEN @STAGECL
  61. YR=0:GOSUB @HANTEI
  62. GOSUB @FHANTEI
  63. IF DD==1 THEN @DAMAGE
  64. @MAI1
  65. GOSUB @KEYIN
  66. ’ИИ ナカ゛イ 2キ゛ョウ ИИ
  67. IF BK==1 AND MK==0 AND MK2==0 THEN MK=1:MK2=1
  68. ’ THEN MK=1:MK2=1
  69. IF BK==0 AND MK2==1 THEN MK2=0
  70. ’0
  71. GOSUB @KEN
  72. GOSUB @DRAWDAM
  73. GOSUB @GAUGE
  74. GOSUB @MJCHANGE:MGO=0
  75. ON MJ GOTO @JJ,@MJ1,@MJ2,@MJ3
  76. @JJ
  77. GOTO @MAIN2
  78. @MJ1
  79. GOSUB @SCROLL:GOTO @MAIN2
  80. @MJ2
  81. MY=MY-5+MD:MD=MD+1
  82. IF MD>9 THEN MJ=0
  83. GOTO @MAIN2
  84. @MJ3
  85. GOSUB @SCROLL:MY=MY-5+MD
  86. MD=MD+1:IF MD<10 GOTO @MAIN2
  87. MJ=1:IF BR!=1 THEN MJ=0
  88. @MAIN2
  89. GOSUB @WJCHANGE
  90. GOSUB @WIZMOVE
  91. GOSUB @FJCHANGE
  92. GOSUB @FIREMOVE
  93. FOR K=0 TO WWW:NEXT
  94. SPOFS 3,0,-32:GOSUB @WIZDIE
  95. IF MK==2 GOTO @MKOFF
  96. IF MK!=1 GOTO @MAIN
  97. MK=2:SPOFS 1,0,-32:GOTO @MAIN
  98. @MKOFF
  99. MK=0:SPOFS 2,0,-32:GOTO @MAIN
  100. @SCROLL
  101. RE=RE+1:IF RE>7 THEN RE=0
  102. SC=SC+1:MGO=1:ML=ML+1:RETURN
  103. @DRAWSTA
  104. COLOR 15:LOCATE 0,23
  105. PRINT ”STAGE ”;RO+1;
  106. LOCATE 19,23
  107. PRINT ”SCORE ”;SC;:COLOR 3
  108. LOCATE 9,23:PRINT ”HI ”;HI;
  109. RETURN
  110. @DRAWDAM
  111. COLOR 4:LOCATE 0,22
  112. PRINT MID$(DA$,32-DDR,32);
  113. RETURN
  114. @GAUGE
  115. COLOR 11:K=ML*31/FL
  116. LOCATE K,0:PRINT ” г”;:RETURN
  117. @ALLOFF
  118. CLS:FOR K=0 TO 4:WJ(K)=0
  119. SPOFS 10+K,0,-32:NEXT
  120. FOR K=0 TO 9:FJ(K)=0
  121. SPOFS 20+K,0,-32:NEXT
  122. SPOFS 0,0,-32:SPOFS 1,0,-32
  123. SPOFS 2,0,-32:SPOFS 3,0,-32
  124. SPOFS 16,0,-32:SPOFS 4,0,-32
  125. SPOFS 5,0,-32
  126. GOSUB @DRAWDAM
  127. GOSUB @DRAWSTA
  128. RETURN
  129. @RENGA
  130. FOR K=0 TO 39
  131. BGPUT 1,K,20,471,2,0,0
  132. BGPUT 1,K,21,503,2,0,0
  133. NEXT
  134. FOR K=0 TO 4
  135. BGPUT 1,K*8,20,470,2,0,0
  136. BGPUT 1,K*8,21,502,2,0,0
  137. NEXT:RETURN
  138. @DOOR
  139. IF ML<FL-24 THEN RETURN
  140. SPOFS 4,(FL+2-ML)*8,16*8
  141. RETURN
  142. @KEYIN
  143. B=BUTTON():BK=0:BJ=0:BR=0
  144. IF B AND 64 THEN BK=1
  145. IF B AND 16 THEN BJ=1
  146. IF B AND 1 THEN BJ=1
  147. IF B AND 8 THEN BR=1
  148. RETURN
  149. @MJCHANGE
  150. ’ИИ 2キ゛ョウナカ゛イノカ゛アル ИИ
  151. IF MJ==0 AND BJ==1 THEN MJ=2:MD=1:BEEP 8,1028,30,32
  152. ’MD=1:BEEP 8,1028,30,32
  153. IF MJ==0 AND BR==1 THEN MJ=1
  154. IF MJ==1 AND BJ==1 THEN MJ=3:MD=1:BEEP 8,1028,30,32
  155. ’MD=1:BEEP 8,1028,30,32
  156. IF MJ==1 AND BR==0 THEN MJ=0
  157. IF MJ==2 AND BR==1 THEN MJ=3
  158. IF MJ==3 AND BR==0 THEN MJ=2
  159. RETURN
  160. @KEN
  161. IF MK==2 GOTO @KEN2
  162. IF MK!=1 THEN RETURN
  163. BEEP 50,4096,127,30
  164. SPOFS 1,32,MY*8-16:RETURN
  165. @KEN2
  166. SPOFS 2,32,MY*8+16:RETURN
  167. @WIZDRAW
  168. FOR K=0 TO 4
  169. IF WJ(K)==0 GOTO @WIZ1
  170. SPOFS 10+K,WX(K)*8,WY(K)*8
  171. @WIZ1
  172. NEXT
  173. RETURN
  174. @FIREDRAW
  175. FOR K=0 TO 9
  176. IF FJ(K)==0 GOTO @FIRE1
  177. SPOFS 20+K,FX(K)*8,FY(K)*8
  178. @FIRE1
  179. NEXT
  180. RETURN
  181. @WJCHANGE
  182. FOR K=0 TO 4
  183. IF WJ(K)>1 GOTO @WJ1
  184. IF WJ(K)==1 GOTO @WJ2
  185. J=RND(70):I=HS(RO)
  186. IF J>=1 GOTO @WJ1
  187. WJ(K)=1:WX(K)=28:WY(K)=16
  188. SPOFS 10+K,WX(K)*8,WY(K)*8
  189. WD(K)=0:K=4:GOTO @WJ1
  190. @WJ2
  191. J=RND(50):I=HF(RO)
  192. IF J>=I THEN @WJ1
  193. WD(K)=0:WJ(K)=2
  194. J=RND(10):I=HH(RO)
  195. IF J<I THEN WJ(K)=3
  196. @WJ1
  197. NEXT
  198. RETURN
  199. @FJCHANGE
  200. J=RND(20):I=HF(RO)
  201. IF J>=I THEN RETURN
  202. FOR K=0 TO 9
  203. IF FJ(K)>0 GOTO @FJ1
  204. I=0:J=RND(5)
  205. @FJ3
  206. IF WJ(J)>0 GOTO @FJ2
  207. I=I+1:IF I>5 GOTO @FJ1
  208. J=J+1:IF J>4 THEN J=0
  209. GOTO @FJ3
  210. @FJ2
  211. IF WX(J)<20 GOTO @FJ1
  212. FX(K)=WX(J):FY(K)=WY(J)
  213. I=RND(15):FJ(K)=1
  214. IF I<RO THEN FJ(K)=2
  215. K=9
  216. @FJ1
  217. NEXT
  218. RETURN
  219. @FIREMOVE
  220. FOR K=0 TO 9
  221. IF FJ(K)==0 THEN @FM0
  222. FX(K)=FX(K)-FJ(K)-MGO-1
  223. IF FX(K)>-3 THEN @FM0
  224. FJ(K)=0:SPOFS 20+K,0,-32
  225. @FM0
  226. NEXT
  227. RETURN
  228. @WIZMOVE
  229. FOR K=0 TO 4
  230. IF WJ(K)==0 THEN @WM0
  231. WX(K)=WX(K)-1-MGO
  232. IF WX(K)<-2 THEN @WM5
  233. IF WJ(K)==3 THEN @WM3
  234. IF WJ(K)==2 THEN @WM2
  235. GOTO @WM0
  236. @WM2
  237. WY(K)=WY(K)-3+WD(K)
  238. WD(K)=WD(K)+1
  239. IF WD(K)>6 THEN WJ(K)=1
  240. GOTO @WM0
  241. @WM3
  242. WY(K)=WY(K)-5+WD(K)
  243. WD(K)=WD(K)+1
  244. IF WD(K)>10 THEN WJ(K)=1
  245. GOTO @WM0
  246. @WM5
  247. WJ(K)=0:SPOFS 10+K,0,-32
  248. @WM0
  249. NEXT
  250. RETURN
  251. @FHANTEI
  252. FOR K=0 TO 9
  253. IF FJ(K)==0 THEN @FH1
  254. IF FX(K)>3 THEN @FH1
  255. IF FX(K)<1 THEN @FH1
  256. IF FY(K)<MY-1 THEN @FH1
  257. IF FY(K)>MY+1 THEN @FH1
  258. DD=1:DDR=DDR-5
  259. @FH1
  260. NEXT
  261. RETURN
  262. @HANTEI
  263. FOR K=0 TO 4
  264. IF WJ(K)==0 THEN @HA1
  265. IF WY(K)<MY-4 THEN @HA1
  266. IF WY(K)>MY+5 THEN @HA1
  267. IF WX(K)>8 THEN @HA1
  268. IF WX(K)<4 THEN @HA2
  269. IF MK==0 THEN @HA2
  270. YR=1:YRX=WX(K):YRY=WY(K)
  271. SPOFS 16,YRX*8,YRY*8
  272. SPOFS 10+K,0,-32:WJ(K)=0
  273. SC=SC+100:BEEP 37,4096,127,64
  274. @HA1
  275. NEXT
  276. RETURN
  277. @HA2
  278. IF WY(K)<MY-2 THEN @HA1
  279. IF WY(K)>MY THEN @HA1
  280. IF WY(K)>3 THEN @HA1
  281. IF WY(K)<0 THEN @HA1
  282. IF MK>0 THEN @HA1
  283. DD=1:DDR=DDR-2
  284. GOTO @HA1
  285. @WIZDIE
  286. IF YR!=1 THEN RETURN
  287. SPOFS 16,0,-32:YR=0:RETURN
  288. @DAMAGE
  289. DD=0:BEEP 11,2000,50,64
  290. SPOFS 0,0,-32:SPOFS 3,16,MY*8
  291. IF DDR<1 THEN @OVER
  292. GOSUB @DRAWDAM
  293. GOTO @MAI1
  294. @STAGECL
  295. SPOFS 0,16,16*8:BGMPLAY 18
  296. FOR K=0 TO 60000:NEXT
  297. GOSUB @ALLOFF
  298. SPOFS 0,88,16*8
  299. SPOFS 5,17*8,16*8:COLOR 15
  300. LOCATE 11,5
  301. PRINT ”C L E A R !”
  302. IF RO<9 THEN @ALLO1
  303. COLOR 12:LOCATE 10,8
  304. PRINT ”GOOD PLAYER!”
  305. @ALLO1
  306. FOR K=0 TO 10000:NEXT
  307. BGMSTOP
  308. FOR I=1 TO RO+1
  309. BEEP 5,8000,80,64
  310. DDR=DDR+1
  311. IF DDR>32 THEN DDR=32
  312. GOSUB @DRAWDAM
  313. FOR J=0 TO 15000:NEXT
  314. NEXT
  315. FOR K=0 TO 50000:NEXT:ML=0
  316. WWW=WWW-200:WWW=ABS(WWW)
  317. RO=RO+1:IF RO>9 THEN RO=0
  318. GOTO @START
  319. @OVER
  320. BGMPLAY 3
  321. FOR K=0 TO 40000:NEXT
  322. GOSUB @ALLOFF
  323. SPOFS 3,16,MY*8:BGMPLAY 6
  324. COLOR 3:LOCATE 11,5
  325. PRINT ”GAME OVER”
  326. COLOR 2:LOCATE 10,15
  327. PRINT ”HIT A BUTON”
  328. IF SC<HI THEN @OV1
  329. COLOR 3:LOCATE 10,8
  330. PRINT ”HIGH SCORE!!”:HI=SC
  331. @OV1
  332. K=BUTTON()
  333. IF K!=0 THEN @OV1
  334. @OV2
  335. K=BUTTON()
  336. IF K AND 16 THEN @HAJIME
  337. IF K AND 1024 THEN @BGSTOP
  338. GOTO @OV2
  339. @BGSTOP
  340. BGMSTOP:END