プチコンまとめWiki (初代/mkII)

投稿プログラム : 突撃! アステロイド

パンくずリスト

2011年08月11日投稿 / 投稿者 : ウル / タグ : 投稿プログラム ゲーム QRコード

概要

奥からいろいろな障害物が飛んでくるのを避けつつ、★を取り続けるゲームです。

遊び方

十字キーで自機を移動して、ひたすら障害物を避けてください。
スコア&ダメージ処理はありますが、ゲームオーバーはありません。

スプライト表示処理について

特に苦労したのはスプライトの優先順位で、 手前から順にSPCHRで毎回設定し直しています。
もともとは自機がビームを発射することができて、障害物とソート処理をした名残りです。

フレームレートについて

強制的に30FPSになるようにしています。
140行目あたりの VSC の値を大きくすると、さらに遅くなります。

カメラについて

障害物が見えづらいときは、195行目の (PY-16) を (PY-32) などの大きな値にすると
クォータービューのようになって奥行きがわかりやすくなります。

スクリーンショット・動画

QRコード

ASTEROID.JPG

プログラムリスト

  1. ’トツケ゛キ!アステロイト゛
  2. CLS
  3. CLEAR
  4. VISIBLE 1,1,0,0,0,0
  5. ’PNLTYPE ”OFF”
  6. SPPAGE 0
  7. SPCLR
  8. GPAGE 0
  9. GCLS 0
  10. ’┌────┐
  11. ’│ショキカ│
  12. ’└────┘
  13. ’スフ゜ライト ハ゜ターン
  14. RESTORE @SPRDATA
  15. READ N
  16. @SPRINIT
  17. FOR J=0 TO 1
  18. P0$=””
  19. P1$=””
  20. FOR I=0 TO 7
  21.  READ C$
  22.  
  23.  P0$=P0$+MID$(C$,0,8)
  24.  P1$=P1$+MID$(C$,8,8)
  25. NEXT I
  26. K=N*4+J*2
  27. CHRSET ”SPU”,K+0,P0$
  28. CHRSET ”SPU”,K+1,P1$
  29. NEXT J
  30. READ N
  31. IF N!=−1 GOTO @SPRINIT
  32. ’スフ゜ライト ヒョウシ゛
  33. DIM SP(30)
  34. DIM SX(30)
  35. DIM SY(30)
  36. DIM SS(30)
  37. FOR I=0 TO 29
  38.  SPSET I,0,0,0,0,1
  39.  SPOFS I,−99,−99
  40. NEXT I
  41. SU0=0   ’セ゛ンカイ シヨウスウ
  42. ’カメラ
  43. CX=0
  44. CY=0
  45. ’フ゜レーヤー
  46. PX=0
  47. PY=0
  48. PR=0
  49. PS=1
  50. SPSET 30,0,0,0,0,0
  51. SPOFS 30,−99,−99
  52. SPSCALE 30,200
  53. SCO=0
  54. SCC=0
  55. DMG=0
  56. ’テキ
  57. DIM ET(30)
  58. DIM EX(30)
  59. DIM EY(30)
  60. DIM EZ(30)
  61. FOR I=0 TO 29
  62.  ET(I)=0
  63. NEXT I
  64. EI=0
  65. ’テキ ハッセイ テーフ゛ル
  66. RESTORE @ENMDATA
  67. READ EGC
  68. DIM EGT(EGC)
  69. FOR I=0 TO EGC−1
  70.  READ EGT(I)
  71. NEXT I
  72. EG=0
  73. ’シ゛メン
  74. DIM GX1(10)
  75. DIM GY1(10)
  76. DIM GX2(10)
  77. DIM GY2(10)
  78. GZ=0
  79. ’ソウサ セツメイ
  80. LOCATE 0,23
  81. PRINT ”シュウリョウ=STARTホ゛タン”;
  82. ’BGMサイセイ
  83. BGMPLAY 25
  84. ’ホ゛タン
  85. BT0=0
  86. ’ショリフカ
  87. MCC=0
  88. MC0=MAINCNTL
  89. ’スイチョクト゛ウキ
  90. VSC=2
  91. VS0=MAINCNTL%64
  92. ’カ゛メン ヒョウシ゛
  93. VISIBLE 1,1,1,1,1,1
  94. ’┌───────┐
  95. ’│メインルーチン│
  96. ’└───────┘
  97. @MAIN
  98. ’ホ゛タン
  99. BT=BUTTON()
  100. BT1=BT AND BT0
  101. BT0=NOT BT
  102. IF BT1 AND &H400 GOTO @EXIT
  103. ’スフ゜ライト シヨウスウ
  104. SU=0
  105. ’シ゛ョウケ゛ サユウ ニュウリョク
  106. YY=((BT AND &H2)!=0)−((BT AND &H1)!=0)
  107. XX=((BT AND &H8)!=0)−((BT AND &H4)!=0)
  108. ’フ゜レーヤー イト゛ウ
  109. PX=PX+XX*4
  110. PY=PY+YY*4
  111. PR=PR+XX*2
  112. PS=PS+0.0625
  113. IF PS>2 THEN PS=2
  114. IF PX<−100 THEN PX=−100
  115. IF PX> 100 THEN PX= 100
  116. IF PY<−100 THEN PY=−100
  117. IF PY> 100 THEN PY= 100
  118. IF PR<−20 THEN PR=−20
  119. IF PR> 20 THEN PR= 20
  120. IF XX==0 THEN PR=PR*0.75
  121. IF ABS(PR)<1 THEN PR=0
  122. ’テキ ハッセイ
  123. EG=EG−PS
  124. IF EG<=0 THEN GOSUB @EGEN
  125. ’カメラ
  126. CX=(CX+ PX    )/2
  127. CY=(CY+(PY−16))/2
  128. ’フ゜レーヤー ヒョウシ゛ ケイサン
  129. PR1=(PR+360)%360
  130. R=RAD(PR1)
  131. C=COS(R)*16
  132. S=SIN(R)*16
  133. PX1=128+PX−CX−C+S
  134. PY1= 96+PY−CY−C−S
  135. ’テキ イト゛ウ
  136. C=C/16
  137. S=S/16
  138. FOR NN=0 TO 29
  139.  N=(NN+EI)%30
  140.  IF ET(N) THEN GOSUB @EPUT
  141. NEXT NN
  142. ’シヨウスウ シュウセイ
  143. SU=SU−1
  144. ’シ゛メン ケイサン
  145. GZ=(GZ−PS+20)%20
  146. X1= 500−CX
  147. X2=−500−CX
  148. Y = 100−CY
  149. Z=10+GZ
  150. FOR I=0 TO 4
  151.  D=10/Z
  152.  GX1(I)=128+( C*X1+S*Y)*D
  153.  GX2(I)=128+( C*X2+S*Y)*D
  154.  GY1(I)= 96+(−S*X1+C*Y)*D
  155.  GY2(I)= 96+(−S*X2+C*Y)*D
  156.  Z=Z+20
  157. NEXT I
  158. ’スイチョクト゛ウキ
  159. VS1=MAINCNTL%64
  160. I=VSC−(VS1−VS0+64)%64
  161. IF I>0 THEN VSYNC I
  162. VS0=(VS0+VSC)%64
  163. IF I<=−2 THEN VS0=VS1
  164. ’シ゛メン ヒ゛ョウカ゛
  165. GCLS 0
  166. FOR I=0 TO 1
  167.  GLINE GX1(I),GY1(I),GX2(I),GY2(I),10
  168. NEXT I
  169. FOR I=2 TO 4
  170.  GLINE GX1(I),GY1(I),GX2(I),GY2(I),26
  171. NEXT I
  172. ’フ゜レーヤー スフ゜ライト
  173. SPOFS 30,PX1,PY1
  174. SPANGLE 30,PR1
  175. ’テキ スフ゜ライト
  176. R=(360−PR1)%360
  177. FOR I=0 TO SU
  178.  S=SS(I)
  179.  SPCHR I,SP(I),S<100,0,0,S<200
  180.  SPOFS I,SX(I),SY(I)
  181.  SPSCALE I,S
  182.  SPANGLE I,R
  183. NEXT I
  184. FOR I=I TO SU0
  185.  SPOFS I,−99,−99
  186. NEXT I
  187. SU0=SU
  188. ’テキ ショウトツ ハンテイ
  189. X1=PX−24
  190. X2=PX+24
  191. Y1=PY−24
  192. Y2=PY+24
  193. FOR NN=0 TO 29
  194.  N=(NN+EI)%30
  195.  IF ET(N) THEN GOSUB @EHIT
  196. NEXT NN
  197. ’ショリフカ
  198. MCC=MCC+1
  199. IF MCC<10 GOTO @MAIN
  200. MC1=MAINCNTL
  201. LOCATE 0,22
  202. PRINT 600/(MC1−MC0);”FPS”,,
  203. MCC=0
  204. MC0=MC1
  205. GOTO @MAIN
  206. ’┌───────┐
  207. ’│サフ゛ルーチン│
  208. ’└───────┘
  209. ’テキ ハッセイ
  210. @EGEN
  211. T=EGT(RND(EGC))
  212. X=RND(200)−100
  213. Y=RND(200)−100
  214. Z=100
  215. GOSUB @ESET
  216. EG=5+RND(5)
  217. RETURN
  218. ’テキ セッテイ
  219. @ESET
  220. ET(EI)=T
  221. EX(EI)=X
  222. EY(EI)=Y
  223. EZ(EI)=Z
  224. EI=(EI+1)%30
  225. RETURN
  226. ’テキ イト゛ウ
  227. @EPUT
  228. Z=EZ(N)−PS
  229. IF Z<=9 THEN ET(N)=0:RETURN
  230. X=EX(N)−16
  231. Y=EY(N)−16
  232. EZ(N)=Z
  233. T=X
  234. X= C*T+S*Y
  235. Y=−S*T+C*Y
  236. ’サ゛ヒョウ ケイサン
  237. D=10/Z
  238. X=128+(X−CX)*D
  239. Y= 96+(Y−CY)*D
  240. ’スフ゜ライト トウロク
  241. IF D>1 THEN D=1
  242. SP(SU)=ET(N)
  243. SX(SU)=X
  244. SY(SU)=Y
  245. SS(SU)=D*200
  246. SU=SU+1
  247. RETURN
  248. ’テキ ショウトツ ハンテイ
  249. @EHIT
  250. X=EX(N)
  251. Y=EY(N)
  252. Z=EZ(N)
  253. IF Z>=11 THEN NN=29:RETURN
  254. IF (X<X1) OR (X2<X) THEN RETURN
  255. IF (Y<Y1) OR (Y2<Y) THEN RETURN
  256. IF (Z< 9) OR (11<Z) THEN RETURN
  257. IF ET(N)!=EGT(0) THEN @DMG
  258. SCC=SCC+1
  259. SCO=SCO+SCC
  260. ET(N)=0
  261. I=SCC*50
  262. IF I>1000 THEN I=1000
  263. BEEP 7,I,64
  264. LOCATE 0,0
  265. PRINT ”スコア =”;SCO
  266. PRINT ”コンホ゛=”;SCC;”   ”
  267. RETURN
  268. @DMG
  269. SCC=0
  270. PS=0
  271. DMG=DMG+1
  272. ET(N)=0
  273. BEEP 13,0,64
  274. LOCATE 0,1
  275. PRINT ”           ”
  276. PRINT ”タ゛メーシ゛=”;DMG
  277. RETURN
  278. ’┌──────┐
  279. ’│シュウリョウ│
  280. ’└──────┘
  281. @EXIT
  282. BGMSTOP
  283. LOCATE 0,4
  284. END
  285. ’┌────┐
  286. ’│テ゛ータ│
  287. ’└────┘
  288. ’テキ&スコア
  289. @ENMDATA
  290. DATA 3
  291. DATA 156
  292. DATA 143
  293. DATA 252
  294. ’スフ゜ライト ハ゜ターン
  295. @SPRDATA
  296. ’フ゜レーヤー A
  297. DATA 0
  298. DATA 0000000000000000
  299. DATA 0000000000000000
  300. DATA 0000000000000000
  301. DATA 0000020002000000
  302. DATA 0000002020000000
  303. DATA 000066FFF6600000
  304. DATA 000066FFF6600000
  305. DATA 0DDDD11D11DDDD00
  306. DATA 0DDDD11D11DDDD00
  307. DATA 00000FF0FF000000
  308. DATA 0002200000220000
  309. DATA 0220000000002200
  310. DATA 2000000000000020
  311. DATA 2000000000000020
  312. DATA 0000000000000000
  313. DATA 0000000000000000
  314. ’オワリ
  315. DATA −1

修正履歴(変更のあった行)

 28 Jのループ回数
121 ソウサセツメイの表示位置:2→23
122 PRINTの末尾にセミコロンをつけて、改行しないようにする
155 変数名NT→BT
356 ID→IF
378 Z1→9 Z2→11
417 LOCATEのつづり

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • バイカウントメルビル : Out of DATA (34, READ)と出てしまいます・・・どうすればいいでしょうか (2011/08/11 (木) 14:06:24)
  • バイカウントメルビル : また417行目はLOCATE 0,4ではないのですか? (2011/08/11 (木) 14:08:48)
  • 投稿者(ウル) : 28行目、417行目を修正しました。ご指摘ありがとうございます。 (2011/08/11 (木) 23:23:27)
  • バイカウントメルビル : 僕の打ち間違いかもしれませんが今度はType Mismatch (46,READ)と出てしまいました・・・ (2011/08/19 (金) 01:53:23)
  • 投稿者(ウル) : こちらの勘違いで変な修正をしてしまいました・・・ (2011/08/19 (金) 12:54:10)
  • 投稿者 : ひょっとして最後のDATA文が足りていなかったりしませんか? (2011/08/19 (金) 13:25:03)
  • バイカウントメルビル : もう3回も打ち直して確かめてみたのでDATA文に間違いはないと思います。 (2011/08/19 (金) 14:49:39)
  • バイカウントメルビル : ちなみに419行以降(ENDより後)をすべてコメントアウトするとUndefined label (22,RESTORE) (2011/08/19 (金) 14:51:49)
  • バイカウントメルビル : と出て、ラベルの、428、436行目だけはずすようにすると、Out of DATA(24,READ)と出てしまいます。 (2011/08/19 (金) 14:54:38)
  • 投稿者 : とりあえず49行目までと427行目以降のDATA文を最初から打ち込んでみましたが、エラーにはなりません。残りも打ち込んでみるので少々お待ちください・・・ (2011/08/19 (金) 19:57:31)
  • 投稿者 : いっそのこと、21行目から47行目までをコメントアウトしてみるとどうなるでしょうか?自分のキャラが右向きの三角になりますが、ゲーム自体は遊べると思います。 (2011/08/19 (金) 20:09:25)
  • みゅしゃ : 378行目のZ軸判定がうまくいってないようなきがするのですが。Z1,Z2はどこで定義してるの? (2011/12/15 (木) 17:06:38)
  • バイカウントメルビル : 356行目がおかしい気がします。 (2011/12/15 (木) 18:32:44)
  • 投稿者 : いろいろすみませんでした。修正しました (2011/12/16 (金) 00:15:45)
  • ぷぎru : 297行目Tがぬけてます (2011/12/16 (金) 21:10:09)
  • わぁぃ@ : 暇だから↑を直す。 (2011/12/17 (土) 14:02:43)
  • ぷぎru : ↑暇なのかwww俺受験勉強www (2011/12/20 (火) 20:20:17)
  • んん : むずそう (2012/03/24 (土) 17:08:02)
  • あああ : QRコードお願いします (2012/06/14 (木) 22:47:34)
  • 名無しさん : コレ(@∀@)つ (2012/06/22 (金) 20:13:48)
  • X : QRコードお願いします (2012/08/04 (土) 17:25:48)
  • みゅしゃ : これくらい入力したほうが勉強になるぞ! (2012/08/06 (月) 10:03:45)
  • 名無しさん : ダカラコレ(#@A@)つ (2012/08/06 (月) 13:54:15)
  • QRほしいせいじん : ワレワレハQRホシイセイジンダ。ゼヒQRヲクダセェ。(本当にお願い!) (2012/08/13 (月) 08:36:50)
  • RND128 : QRコード載せました。そのついでに投稿者の名前欄を直しました。 (2012/08/13 (月) 09:34:46)
  • ガス : ★と黒いのが紛らわしいなー (2013/06/01 (土) 20:51:48)

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.064 秒 | このページの最終更新 : 2016/02/20 (土) 18:53:58 (1361d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30