※第二回プチコン大喜利応募作品
画面中心の自機を十字キーで上下左右に操作し、画面内を漂っている[P]アイテムを回収して、1分間に何点取れるかを競うスコアアタックです。This is a score attack game in a minute. Control the character at the center of screen by cross-key, and capture [P] items as well as you can.
[P]アイテムは赤と緑の2色があり、同じ色の物を連続で取り続けると、10点、20点、30点…と[P]アイテム一つあたりの得点が上がっていきます。違う色を取ると、また10点に戻ってしまいます。There are 2 colors of item; red and green. The points of item increases by 10 if you capture same colored one continuously. But it is reset as 10 if you capture another colored one.
タイトル画面でAボタンでゲーム開始。1分経ったらゲームオーバーとなり、Aボタンでゲームをやり直し。Yボタンで今回のゲーム内容のリプレイを観る事ができます。You can start the game by A button in title screen. The game is over in a minute, then you can retry the game by A button. Or you can review your replay by Y button.
ゲーム中はSTARTボタンでポーズ/解除。ポーズ中にAボタンを押す事で、すぐにゲームをやり直す事ができます。You can pause/resume the game by start button. You can restart the game by A button during pausing.
ちなみに、Bボタンでゲームを巻き戻す事ができます。In addition, time goes backward while holding B button.
このプログラムは、以下のリソースも使用します。This program uses following resources.
※"CHR:SBFT_E02"は公式サイトで配布されているものと同一のデータです。※"CHR:SBFT_E02" is same as which you can get from this web site.
AI | アイテム出現時に設定情報を参照するインデックス番号 |
AX(),AY(),AV(),AW(),AT() | 全アイテムの設定情報 |
BT | ボタン情報 |
C$,C$() | キャラクター設定用 |
DA(),DP(),DT() | 取得したアイテムの情報 |
DI | 取得したアイテムの情報を設定するインデックス番号 その1 |
DQ | 取得したアイテムの情報を設定するインデックス番号 その2 |
EA(),EQ() | 画面内のアイテム制御のための情報 |
EC | 画面内に存在するアイテムの数 |
EI | 画面内のアイテムの制御情報を設定するインデックス番号 |
GD | 現在のフレームの時間の進行方向(0:逆方向、1:順方向、2:停止) |
M$,M$() | MML設定用 |
PD | 自機の移動角度 |
PP | アイテム取得時の得点 |
PR | 自機の移動速度 |
PD(),PR() | 全フレームにおける自機の移動角度・速度の履歴 |
PV(),PW() | 移動角度に対応する移動ベクトル量 |
PX,PY | 自機の位置 |
RP | リプレイ中か |
TD | 1フレーム前の時間の進行方向(0:逆方向、1:順方向、2:停止) |
TM | ゲームの残りフレーム数 |
S$ | 拡大して描画する文字列 |
SC | スコア |
001. ′┌─────────────────────────┐Л 002. ′│ PRG:BACKWARD by OBONO │Л 003. ′└─────────────────────────┘Л 004. Л 005. ACLSЛ 006. CLEARЛ 007. DIM AX(100),AY(100),AV(100),AW(100),AT(101)Л 008. DIM DA(101),DP(101),DT(101),EA(31),EQ(31)Л 009. DIM PD(3600),PR(3600),PV(32),PW(32)Л 010. Л 011. GOSUB @INЛ 012. GOSUB @OPЛ 013. @LPЛ 014. IF !RP THEN GOSUB @GIЛ 015. GOSUB @GPЛ 016. GOSUB @GMЛ 017. GOTO @LPЛ 018. Л 019. ′┝┸┝┸┝┸ MANAGE GAME ┝┸┝┸┝┸Л 020. Л 021. @GM ′ЙЙЙ MAIN LOOPЛ 022. Л 023. BT=BUTTON()Л 024. GD=!(BT AND 32)Л 025. ON GD GOSUB @GB,@GFЛ 026. IF TD!=GD THEN TD=GD:GOSUB @GLЛ 027. COLOR (TM<600)*13Л 028. LOCATE 0,0Л 029. ? ”Р ”;MID$(STR$(TM/60+100.001),1,5)Л 030. COLOR 3Л 031. ? ”SC ”;SC*10;” ”Л 032. IF RP THEN COLOR (TM/15 AND 1)*8+1:LOCATE 26,0:? ”REPLAY”Л 033. IF BT AND 1024 THEN GOSUB @GZ:IF BT AND 16 THEN RP=0:RETURNЛ 034. VSYNC 1Л 035. IF TM>0 THEN @GMЛ 036. GOSUB @GUЛ 037. @GM2Л 038. BT=BUTTON()Л 039. IF BT AND 32 THEN GCLS:CLS:GOSUB @GB:GOTO @GMЛ 040. IF BT AND 144 THEN RP=!(BT AND 16):RETURNЛ 041. VSYNC 1Л 042. GOTO @GM2Л 043. Л 044. @GF ′ЙЙЙ FORWARD GAMEЛ 045. Л 046. IF TM%60==0 THEN BEEP 27+(TM%600==0 OR TM<600)Л 047. TM=TM-1Л 048. V=(BT AND 8)/8-(BT AND 4)/4Л 049. W=(BT AND 2)/2-(BT AND 1)Л 050. Z=8+(W<0)*16+V*(1+!W)*((W<0)*8-4)-PD AND 31Л 051. IF V OR W THEN PD=(PD+(Z>0 AND Z<=16)-(Z>16)) AND 31Л 052. IF (!V AND !W) OR (Z>8 AND Z<24) THEN PR=PR-(PR>0) ELSE PR=PR+(PR<24)Л 053. IF RP THEN PD=PD(TM):PR=PR(TM)Л 054. PX=PX+PV(PD)*PRЛ 055. PY=PY+PW(PD)*PRЛ 056. PD(TM)=PDЛ 057. PR(TM)=PRЛ 058. GOSUB @SPЛ 059. IF AT(AI)==TM THEN GOSUB @ENЛ 060. FOR I=0 TO 30Л 061. IF EA(I)>=0 THEN GOSUB @EFЛ 062. NEXTЛ 063. RETURNЛ 064. Л 065. @GB ′ЙЙЙ BACKWARD GAMEЛ 066. Л 067. IF TM==3600 THEN GD=2:RETURNЛ 068. GOSUB @EDЛ 069. FOR I=0 TO 30Л 070. IF EA(I)>=0 THEN GOSUB @EBЛ 071. NEXTЛ 072. IF AT(AI-1)==TM THEN AI=AI-1Л 073. GOSUB @SPЛ 074. PX=PX-PV(PD)*PRЛ 075. PY=PY-PW(PD)*PRЛ 076. TM=TM+1Л 077. IF TM==3600 THEN PD=0:PR=0 ELSE PD=PD(TM):PR=PR(TM)Л 078. RETURNЛ 079. Л 080. @GU ′ЙЙЙ TIME UPЛ 081. Л 082. BGMSTOPЛ 083. BEEP 55Л 084. CLSЛ 085. FOR I=0 TO 30Л 086. IF EQ(I)>0 THEN SPOFS I,-16,0Л 087. NEXTЛ 088. COLOR 2Л 089. LOCATE 11,9Л 090. ? ”TIME IS UP!”Л 091. LOCATE 10,14Л 092. ? ”YOUR SCORE IS”Л 093. COLOR 9Л 094. LOCATE 5,21Л 095. ? ”Х:REPLAY А:NEW GAME”Л 096. S$=STR$(SC*10)Л 097. Y=130Л 098. GOSUB @GSЛ 099. RETURNЛ 100. Л 101. @GL ′ЙЙЙ PLAY BGMЛ 102. Л 103. IF TD==2 THEN BGMSTOP:RETURNЛ 104. IF TD THEN M=449-TM%450 ELSE M=(TM-1)%450Л 105. M=FLOOR(M*64/450)*3Л 106. M$=”:1T128@33L16”+”@E80,1,1,127”*!TDЛ 107. M$=M$+”[”+RIGHT$(M$(TD),192-M)+LEFT$(M$(TD),M)+”]:2@”Л 108. M$=M$+(”128O2L16[”+MID$(”CRRR”*2,M/3%4,4)+”]”)*TD+”151V40[C]”*!TDЛ 109. BGMSET 128,M$Л 110. BGMPLAY 0,128Л 111. RETURNЛ 112. Л 113. @GS ′ЙЙЙ DRAW LARGE STRINGЛ 114. Л 115. L=LEN(S$)Л 116. FOR I=0 TO L-1Л 117. FOR J=0 TO 1Л 118. GPUTCHR I*32-L*16+134-J*2,Y-J*2,”BGF”,ASC(MID$(S$,I,1)),8-J*5,4Л 119. NEXTЛ 120. NEXTЛ 121. RETURNЛ 122. Л 123. @GZ ′ЙЙЙ PAUSEЛ 124. Л 125. TD=2Л 126. BGMSTOPЛ 127. COLOR 9Л 128. LOCATE 13,9Л 129. ? ”PAUSE”Л 130. LOCATE 8,14Л 131. ? ”PRESS А TO RETRY”Л 132. FOR I=0 TO 2Л 133. BT=BUTTON()Л 134. I=I-(I%2==!(BT AND 1024))Л 135. IF BT AND 16 THEN I=3Л 136. VSYNC 1Л 137. NEXTЛ 138. LOCATE 0,9Л 139. ? ” ”*192Л 140. RETURNЛ 141. Л 142. @GI ′ЙЙЙ SET UP GAMEЛ 143. Л 144. T=3599Л 145. FOR I=0 TO 99Л 146. AX(I)=RND(256)Л 147. AY(I)=RND(256)Л 148. D=RAD(RND(360))Л 149. R=1+RND(17)/16Л 150. AV(I)=COS(D)*RЛ 151. AW(I)=SIN(D)*RЛ 152. AT(I)=TЛ 153. T=T-((I<30)*3+(I<70)+2)*10Л 154. NEXTЛ 155. AT(100)=-60Л 156. DT(0)=4000Л 157. DA(0)=-1Л 158. RETURNЛ 159. Л 160. @GP ′ЙЙЙ SET UP PARAMETERSЛ 161. Л 162. SPCLRЛ 163. SPSET 31,136,10,0,0,1Л 164. SPHOME 31,8,8Л 165. SPOFS 31,128,96Л 166. PX=0:PY=0:PD=0:PR=0:PP=0Л 167. GOSUB @SPЛ 168. EI=0:EC=0Л 169. DI=1:DQ=1Л 170. AI=0Л 171. SC=0Л 172. TM=3600:TD=2Л 173. FOR I=0 TO 30Л 174. EA(I)=-1Л 175. NEXTЛ 176. Л 177. GCLSЛ 178. CLSЛ 179. BEEP 32Л 180. COLOR 9Л 181. LOCATE 13,9Л 182. ? ”READY?”Л 183. WAIT 120Л 184. CLSЛ 185. RETURNЛ 186. Л 187. ′┝┸┝┸┝┸ CONTROL ITEM ┝┸┝┸┝┸Л 188. Л 189. @EN ′ЙЙЙ NEW ITEMЛ 190. Л 191. IF EC==31 THEN AI=AI+1:RETURNЛ 192. @EN2Л 193. IF EA(EI)>=0 THEN EI=(EI+1)%31:GOTO @EN2Л 194. I=EIЛ 195. EA(I)=AIЛ 196. EQ(I)=0Л 197. GOSUB @SCЛ 198. AI=AI+1Л 199. EC=EC+1Л 200. RETURNЛ 201. Л 202. @EF ′ЙЙЙ FORWARD ITEMЛ 203. Л 204. Q=EQ(I)Л 205. Q=Q+(Q>0)Л 206. IF Q==30 THEN EA(I)=-1:SPOFS I,-16,0:DQ=DQ+1:EC=EC-1:RETURNЛ 207. GOSUB @SEЛ 208. IF !Q AND F>=20 AND ABS(X-128)<16 AND ABS(Y-128)<16 THEN GOSUB @ETЛ 209. EQ(I)=QЛ 210. RETURNЛ 211. Л 212. @ET ′ЙЙЙ CATCH ITEMЛ 213. Л 214. IF A%2==DA(DI-1)%2 THEN PP=PP+1 ELSE PP=1Л 215. P=PPЛ 216. SC=SC+PЛ 217. GOSUB @STЛ 218. BEEP A%2*24+23,P*256Л 219. DA(DI)=EA(I)Л 220. DT(DI)=TMЛ 221. DP(DI)=PЛ 222. DI=DI+1Л 223. Q=1Л 224. RETURNЛ 225. Л 226. @ED ′ЙЙЙ RESTORE ITEMЛ 227. Л 228. IF DT(DQ-1)>TM+29 THEN RETURNЛ 229. DQ=DQ-1Л 230. @ED2Л 231. IF EA(EI)>=0 THEN EI=(EI+1)%31:GOTO @ED2Л 232. I=EIЛ 233. EA(I)=DA(DQ)Л 234. EQ(I)=30Л 235. P=DP(DQ)Л 236. GOSUB @STЛ 237. EC=EC+1Л 238. GOTO @EDЛ 239. Л 240. @EB ′ЙЙЙ BACKWARD ITEMЛ 241. Л 242. Q=EQ(I)Л 243. IF Q==1 THEN DI=DI-1:SC=SC-DP(DI):PP=DP(DI-1):GOSUB @SCЛ 244. GOSUB @SEЛ 245. EQ(I)=Q-(Q>0)Л 246. IF F==0 THEN EA(I)=-1:SPOFS I,-16,0:EC=EC-1Л 247. RETURNЛ 248. Л 249. ′┝┸┝┸┝┸ SPRITE ┝┸┝┸┝┸Л 250. Л 251. @SP ′ЙЙЙ MOVE PLAYERЛ 252. Л 253. SPANGLE 31,PD*360/32Л 254. BGOFS 0,PX AND 511,PY AND 511Л 255. BGOFS 1,PX/2 AND 511,PY/2 AND 511Л 256. RETURNЛ 257. Л 258. @SE ′ЙЙЙ MOVE ITEMЛ 259. Л 260. A=EA(I)Л 261. F=AT(A)-TM-EQ(I)Л 262. X=AX(A)+AV(A)*F-PX+128 AND 255Л 263. Y=AY(A)+AW(A)*F-PY+128 AND 255Л 264. SPOFS I,X,Y-32Л 265. IF F<=20 THEN SPSCALE I,F*5Л 266. IF Q>0 THEN SPSCALE I,97+Q*3Л 267. RETURNЛ 268. Л 269. @SC ′ЙЙЙ SET ITEM′S COLORЛ 270. Л 271. SPSET I,232,EA(I)%2+4,0,0,1Л 272. SPHOME I,8,8Л 273. SPANIM I,2,4Л 274. RETURNЛ 275. Л 276. @ST ′ЙЙЙ SET ITEM′S POINTЛ 277. Л 278. SPSET I,P*2-2,EA(I)%2+4,0,0,0Л 279. SPHOME I,6+(P<10)*2,4Л 280. SPANIM I,2,1Л 281. RETURNЛ 282. Л 283. ′┝┸┝┸┝┸ INITIALIZE ┝┸┝┸┝┸Л 284. Л 285. @IN ′ЙЙЙ INITIALIZE RESOURCESЛ 286. Л 287. B=SYSBEEPЛ 288. SYSBEEP=0Л 289. LOAD ”BGF:SBFT_E02”,0Л 290. SYSBEEP=BЛ 291. GPRIO 0Л 292. Л 293. FOR I=0 TO 31Л 294. D=RAD(I*45/4)Л 295. PV(I)=COS(D)/8Л 296. PW(I)=SIN(D)/8Л 297. NEXTЛ 298. Л 299. FOR I=0 TO 9Л 300. READ C$(I)Л 301. NEXTЛ 302. P$=”0”*8Л 303. FOR I=0 TO 5Л 304. P$=P$+MID$(C$(0),I*4,4)+”0000”Л 305. NEXTЛ 306. P$=P$+”0”*8Л 307. FOR I=1 TO 32Л 308. C$=”0”*8Л 309. FOR J=0 TO 5Л 310. IF I>9 THEN C$=C$+MID$(C$(I/10),J*4,4) ELSE C$=C$+”0000”Л 311. C$=C$+MID$(C$(I%10),J*4,4)Л 312. NEXTЛ 313. CHRSET ”SPU0”,I*8-8,C$+”0”*8Л 314. CHRSET ”SPU0”,I*8-7,P$Л 315. FOR J=1 TO 6Л 316. CHRSET ”SPU0”,I*8-J,”0”*64Л 317. NEXTЛ 318. NEXTЛ 319. Л 320. FOR I=1 TO 6Л 321. C$=SUBST$(”0”*64,RND(64),1,STR$(I))Л 322. CHRSET ”BGU0”,I,C$Л 323. NEXTЛ 324. Л 325. READ P$Л 326. FOR I=0 TO 63Л 327. P=ASC(MID$(P$,I,1))-53Л 328. M$=”O”+CHR$(48+P/7)+MID$(”CDEFGAB”,P%7,1)Л 329. M$(0)=M$+M$(0)Л 330. M$(1)=M$(1)+M$Л 331. NEXTЛ 332. Л 333. FOR I=0 TO 1Л 334. FOR Y=0 TO 63Л 335. FOR X=0 TO 63Л 336. BGPUT I,X,Y,RND(7)*RND(2),10+RND(3),RND(2),RND(2)Л 337. NEXTЛ 338. NEXTЛ 339. NEXTЛ 340. Л 341. RETURNЛ 342. Л 343. @OP ′ЙЙЙ TITLE SCREENЛ 344. Л 345. COLOR 9Л 346. LOCATE 5,15Л 347. ? ”PRESS А TO START GAME”Л 348. COLOR 2Л 349. LOCATE 1,20Л 350. ? ”2013.4.10 Programmed by OBONO”Л 351. ? ” http://d.hatena.ne.jp/OBONO/”Л 352. S$=”BACKWARD”Л 353. Y=82Л 354. GOSUB @GSЛ 355. Y=0Л 356. FOR I=0 TO 1Л 357. I=BUTTON() AND 16Л 358. BGOFS 0,0,Y%512Л 359. BGOFS 1,0,Y/2%512Л 360. Y=Y+1Л 361. VSYNC 1Л 362. NEXTЛ 363. RETURNЛ 364. Л 365. ′┝┸┝┸┝┸ DATA ┝┸┝┸┝┸Л 366. Л 367. DATA 0000CCC0CACACACACCCA0AAAЛ 368. DATA CC000CA00CA00CA00CA000A0Л 369. DATA CCC00ACACCCACAAACCC00AAAЛ 370. DATA CCC00ACACCCA0ACACCCA0AAAЛ 371. DATA C0C0CACACCCA0ACA00CA000AЛ 372. DATA CCC0CAAACCC00ACACCCA0AAAЛ 373. DATA CCC0CAAACCC0CACACCCA0AAAЛ 374. DATA CCC0CACA0ACA00CA00CA000AЛ 375. DATA CCC0CACACCCACACACCCA0AAAЛ 376. DATA CCC0CACACCCA0ACACCC00AAAЛ 377. DATA HEHJHEOJHLJHJENOHEHJHEOJONMKQPNJFCFHFCMHFJHFHCLMGDGIGDNIGIKOGINPЛ 378. Л 379. ′─────────────────────── EOFЛ
※コードのHTML生成にPTC2HTMLを使用しています。