PRG:PANICSPC
セツメイEXPLANATION
倉庫番タイプのパズルゲームです。レーザー光線でフィールド内の隕石をすべて破壊して、出口から脱出するのが目的です。全50面。This is a Sokoban-like puzzle game. Break all meteorites by a beam from laser units and escape from exit. There 50 patterns.
タイトル画面では、十字キーでステージを選択し、Aボタンで選択します。Xボタンで状況をセーブできます(状況が更新した時のみ)。In title menu scrren, you can choose a pattern by D-pad and decide by A button. You can save current status by X button if needed.
ゲーム中は、Bボタンで1手戻し、Yボタンでやり直し、Xボタンでタイトル画面に戻ります。In puzzle screen, you can undo by B button, reset by Y button and back to title scrren by X button.
プレイヤー: 十字キーで上下左右に移動させます。光線に当たっても平気です。動かせる物を一つまでなら押す事ができます。Player: You can move him by D-pad. A beam passes through him. A moveable object can be moved by pushing.
レーザー装置: ここから光線が発射されています。押して動かせますが、光線を当ててはいけません。Laser unit: This shoots a beam. It's moveable. Don't let it be hit by a beam.
反射装置: 光線を反射させます。光線に対して垂直な面で光線を受け止める事ができます。押して動かせます。Reflector: This reflects or blocks a beam. It's moveable.
隕石: 光線で破壊できます。プレイヤーはこの上を移動できますが、他の物体はこの上に移動できません。Meteorite: This is broken by a beam. The player can move over it, but other objects can't.
ブロック: どの方向からも光線を受け止める事ができます。押して動かせます。Block: This blocks a beam. It's moveable.
バツブロック: 押して動かせますが、光線を当ててはいけません。X-block: It's moveable. Don't let it be hit by a beam.
壁: 光線を当ててはいけません。Wall: Don't let this be hit by a beam.
閉じた出口: 動かせませんが、光線を受け止める事ができます。隕石が一つもない状態で光線を当てると出口になります。Closed exit: This is opened by a beam if no meteorites exist.
出口: プレイヤーをここに移動させるとクリアになります。Exit: The pattern is cleared if the player comes here.
QRコードQR CODE
プログラムコードPROGRAM CODE
表示 Show
F$() | ステージデータ |
FD(,) | フィールドの状態 |
FL(,) | レーザー通過判定フラグ |
FN | 隕石の数 |
FR | 現在の手数 |
FR() | 各ステージの最短手数記録 |
FX,FY | 出口の位置 |
G$() | BG描画パラメータ |
GD | 背景BGの移動方向 |
GM | ゲームの状態 (0:ゲーム中, 1:ミス, 2:クリア, 3:やり直し, 4:タイトルへ) |
GX,GY | 背景BGのオフセット値 |
GZ | レーザー点滅用 |
LB | 処理するレーザーのフラグ |
LC | レーザー装置の数 |
LD | レーザーがNGなモノに当たった → ミス |
LN | 煙エフェクト用スプライト番号 |
LQ | レーザーの処理内容 (0:消去, 1:発射) |
LX(),LY() | レーザー装置の位置 |
MC | クリアしたステージ数 |
MN | 現在のステージ番号-1 |
PB | 十字ボタン入力バッファ |
PF | プレイヤーが押しているモノ |
PT | 待ちカウンタ |
PV,PW | プレイヤーの移動方向 |
PX,PY | プレイヤーの位置 |
U$() | アンドゥ情報 |
001. ′┌─────────────────────────┐Л
002. ′│ PRG:PANICSPC by OBONO │Л
003. ′└─────────────────────────┘Л
004. Л
005. ACLS:CLEARЛ
006. DIM FD(16,12),FL(16,12),FR(50)Л
007. DIM F$(50),G$(22),U$(9999)Л
008. Л
009. GOSUB @INЛ
010. @LMЛ
011. GOSUB @MNЛ
012. @LFЛ
013. GOSUB @FD:GOSUB @GMЛ
014. SPCLR:ON GM-3 GOTO @LF,@LMЛ
015. Л
016. ′┝┸┝┸┝┸ GAME CONTROL ┝┸┝┸┝┸Л
017. Л
018. @GM ′┿ MAIN LOOPЛ
019. Л
020. ON GM GOSUB @GA,@GQ,@GCЛ
021. B=BTRIG():GOSUB @GZЛ
022. IF B==32 AND FR>0 THEN GOSUB @FUЛ
023. IF B==128 AND FR>0 THEN GM=3:BEEP 59Л
024. IF B==64 THEN GM=4:BEEP 4Л
025. IF GM<3 THEN @GMЛ
026. RETURNЛ
027. Л
028. @GA ′┿ WAIT & MOVEЛ
029. Л
030. B=BUTTON()AND 15Л
031. PV=(B==8)-(B==4)Л
032. PW=(B==2)-(B==1)Л
033. IF PV+PW==0 THEN SPANIM 0,1,1,1:PB=0:RETURNЛ
034. SPCHR 0,68+(!PV-PV-PW)*4Л
035. PT=PT*(PB==B)+1:PB=BЛ
036. IF PT==1 THEN SPANIM 0,4,4Л
037. IF PT<6 THEN RETURNЛ
038. X=PX+PV:Y=PY+PW:F=FD(X,Y):PF=0Л
039. IF F<4 OR F==5 OR F==21 THEN @GA1Л
040. IF F==4 OR F==20 THEN RETURNЛ
041. IF FD(X+PV,Y+PW)>3 THEN RETURNЛ
042. LB=FL(X,Y)OR FL(X+PV,Y+PW)Л
043. LQ=0:GOSUB @GLЛ
044. X=PX+PV:Y=PY+PW:PF=FD(X,Y)Л
045. FD(X,Y)=0:SPSET 1,PF,3,0,0,2Л
046. SPOFS 1,X*16,Y*16Л
047. SPOFS 1,(X+PV)*16,(Y+PW)*16,8Л
048. @GA1Л
049. PX=X:PY=Y:SPOFS 0,X*16,Y*16,8Л
050. FOR I=0 TO 6Л
051. GOSUB @GZЛ
052. IF !I AND PF>0 THEN GOSUB @FPЛ
053. NEXTЛ
054. IF FD(X,Y)==21 THEN @GA2Л
055. IF !PF THEN RETURNЛ
056. FOR I=0 TO LC-1Л
057. IF LX(I)==X AND LY(I)==Y THEN LX(I)=X+PV:LY(I)=Y+PWЛ
058. NEXTЛ
059. X=X+PV:Y=Y+PW:FD(X,Y)=PFЛ
060. GOSUB @FP:SPCLR 1Л
061. Z$=CHR$(Y*16+X)+CHR$(4-PW*3-PV)Л
062. LQ=1:GOSUB @GL:U$(FR)=Z$Л
063. FR=FR+1:GOSUB @FRЛ
064. IF LD OR FR==9999 THEN GM=1:PT=0Л
065. RETURNЛ
066. @GA2Л
067. SPCHR 0,93:SPANIM 0,1,1,1Л
068. BEEP 32:GM=2:PT=0:Z=FR(MN)Л
069. IF !Z OR Z>FR THEN FR(MN)=FR:MC=MC+!Z:MR=1Л
070. RETURNЛ
071. Л
072. @GL ′┿ TRACE LAYSЛ
073. Л
074. LD=0:LN=0:FOR L=0 TO LC-1Л
075. B=POW(2,L)Л
076. IF LB AND B THEN GOSUB @GL1Л
077. NEXTЛ
078. X=FX:Y=FYЛ
079. IF FN OR !FL(X,Y) THEN RETURNЛ
080. BEEP 38:FD(X,Y)=21:GOSUB @FPЛ
081. FN=FN-1:Z$=Z$+CHR$(Y*16+X)Л
082. RETURNЛ
083. @GL1Л
084. X=LX(L):Y=LY(L):Z=FD(X,Y)*2-31Л
085. V=Z%3-1:W=Z/3-1 OR 0Л
086. FL(X,Y)=FL(X,Y)AND(1023-B*!LQ)OR B*LQЛ
087. @GL2Л
088. X=X+V:Y=Y+W:F=FD(X,Y)Л
089. FL(X,Y)=FL(X,Y)AND(1023-B*!LQ)OR B*LQЛ
090. IF F!=5 THEN @GL3Л
091. FN=FN-1:Z$=Z$+CHR$(Y*16+X)Л
092. F=0:Z=LN+2:LN=(LN+1)%6Л
093. SPSET Z,240,5,0,0,1Л
094. SPOFS Z,X*16,Y*16Л
095. SPANIM Z,8,3,1:BEEP 47Л
096. FOR I=0 TO 3:GOSUB @GZ:NEXTЛ
097. @GL3Л
098. IF F>3 THEN @GL4Л
099. IF LQ THEN F=F OR(!V*2+!W) ELSE F=F AND(!V+!W*2)Л
100. FD(X,Y)=F:GOSUB @FPЛ
101. GOTO @GL2Л
102. @GL4Л
103. IF LQ THEN BEEP 27:GOSUB @GZЛ
104. IF F==6 OR F>19 THEN RETURNЛ
105. IF F>15 AND F<20 OR F==4 OR F==7 THEN LD=1:RETURNЛ
106. F=F AND 11:Z=!WЛ
107. IF Z THEN IF (F%2-.5)*V<0 THEN W=(F>9)*2-1:V=0 ELSE RETURNЛ
108. IF !Z THEN IF (F-9.5)*W<0 THEN V=F%2*2-1:W=0 ELSE RETURNЛ
109. FD(X,Y)=F OR LQ*4:GOSUB @FPЛ
110. GOTO @GL2Л
111. Л
112. @GQ ′┿ QUAKING!Л
113. Л
114. BGPUT 0,RND(32),RND(24),0Л
115. BGOFS 0,RND(17)-8,RND(17)-8Л
116. Z=PT%24:SPSET Z,248,3,0,0,1Л
117. SPOFS Z,RND(240),RND(176)Л
118. SPANIM Z,8,3Л
119. BEEP 52,-RND(512),64Л
120. PT=PT+1:IF PT>=180 THEN GM=3Л
121. RETURNЛ
122. Л
123. @GC ′┿ CLEARЛ
124. Л
125. Z=PT%18-9:Z=(81-Z*Z)/8Л
126. SPOFS 0,PX*16,PY*16-ZЛ
127. PT=PT+1:IF PT>=90 THEN GM=4Л
128. RETURNЛ
129. Л
130. @GZ ′┿ BACKGROUNDЛ
131. Л
132. COLSET ”BG”,63,MID$(”0000406080A0”,GZ*2,6)Л
133. BGOFS 1,GX,GYЛ
134. GX=(GX+SIN(GD)/4+512)%512Л
135. GY=(GY+COS(GD)/4+512)%512Л
136. GD=GD+(RND(17)-8)/256Л
137. GZ=(GZ+1)%4:VSYNC 1:RETURNЛ
138. Л
139. ′┝┸┝┸┝┸ SET UP FIELD ┝┸┝┸┝┸Л
140. Л
141. @FD ′┿ DECODEЛ
142. Л
143. IF FI THEN BGCOPY 0,0,0,31,23,32,0Л
144. BGOFS 0,-256*FI,-192*!FIЛ
145. FOR Y=0 TO 11:FOR X=0 TO 15Л
146. FD(X,Y)=4:FL(X,Y)=0Л
147. NEXT:NEXTЛ
148. FN=0:LC=0Л
149. F$=F$(MN):X=1:Y=1:I=0:J=0Л
150. @FD1Л
151. F=VAL(”&H”+MID$(F$,J,1)):J=J+1Л
152. IF F>0 AND F<4 THEN I=F+1:F=0Л
153. IF F>11 AND F<15 THEN I=F-10:F=4Л
154. IF F==15 THEN F=16+VAL(MID$(F$,J,1)):J=J+1Л
155. IF F>15 AND F<20 THEN LX(LC)=X:LY(LC)=Y:LC=LC+1Л
156. IF F==20 THEN FX=X:FY=YЛ
157. IF F==22 THEN PX=X:PY=Y:F=0Л
158. FN=FN+(F==5)Л
159. @FD2Л
160. FD(X,Y)=F:X=X%14+1:Y=Y+(X==1)Л
161. I=I-1:IF I>0 THEN @FD2Л
162. IF Y<11 THEN @FD1Л
163. FR=0:GOSUB @FA:LOCATE 4,23Л
164. ? ”Б UNDO Х RESET Ф MENU”;Л
165. LOCATE 2,0:? ”STAGE ”;MN+1Л
166. X=0:Y=210:Z=20Л
167. IF FI THEN X=-276:Y=0:Z=23Л
168. BGMVOL 96:SPSET 0,68,2,0,0,1Л
169. FOR I=Z TO 1 STEP -1Л
170. X=X+I*FI:Y=Y-I*!FIЛ
171. BGOFS 0,-X,-Y,1Л
172. SPOFS 0,PX*16+X,PY*16+YЛ
173. GOSUB @GZЛ
174. NEXTЛ
175. BGFILL 0,32,0,63,23,0Л
176. LB=1023:LQ=1:GOSUB @GLЛ
177. FI=1:GM=0:PT=0:RETURNЛ
178. Л
179. @FU ′┿ UNDOЛ
180. Л
181. BEEP 9:LB=1023:LQ=0:GOSUB @GLЛ
182. FR=FR-1:Z$=U$(FR):K=0Л
183. GOSUB @FK:X=Z%16:Y=Z/16 OR 0Л
184. GOSUB @FK:V=Z%3-1:W=Z/3-1 OR 0Л
185. FD(X+V,Y+W)=FD(X,Y):FD(X,Y)=0Л
186. FOR I=0 TO LC-1Л
187. IF X==LX(I) AND Y==LY(I) THEN LX(I)=X+V:LY(I)=Y+WЛ
188. NEXTЛ
189. SPCLR:PX=X+V*2:PY=Y+W*2Л
190. SPSET 0,68+(!V+V+W)*4,2,0,0,1Л
191. SPOFS 0,PX*16,PY*16Л
192. L=LEN(Z$)-2:FN=FN+LЛ
193. FOR I=1 TO LЛ
194. GOSUB @FK:X=Z%16:Y=Z/16 OR 0Л
195. FD(X,Y)=5+(FD(X,Y)==21)*15Л
196. NEXTЛ
197. BGOFS 0,0,0:GOSUB @FAЛ
198. LQ=1:GOSUB @GL:GM=0:PT=0Л
199. RETURNЛ
200. Л
201. @FK ′┿ GET 1BYTEЛ
202. Л
203. Z=ASC(MID$(Z$,K,1)):K=K+1Л
204. RETURNЛ
205. Л
206. @FA ′┿ DISPLAY FIELDЛ
207. Л
208. FOR Y=0 TO 11:FOR X=0 TO 15Л
209. GOSUB @FPЛ
210. NEXT:NEXTЛ
211. IF FR(MN) THEN LOCATE 11,0:? ”BEST ”;FR(MN)Л
212. LOCATE 26,0:? ” ”Л
213. @FRЛ
214. LOCATE 21,0:? ”STEP ”;FRЛ
215. RETURNЛ
216. Л
217. @FP ′┿ PUT AN OBJECTЛ
218. Л
219. BGFILL 0,X*2,Y*2,X*2+1,Y*2+1,G$(FD(X,Y))Л
220. RETURNЛ
221. Л
222. Л
223. ′┝┸┝┸┝┸ STAGE SELECT ┝┸┝┸┝┸Л
224. Л
225. @MNЛ
226. Л
227. BGMVOL 48:BGOFS 0,0,0Л
228. CHRREAD(B$,109),Z$:G$=””Л
229. C$=MID$(”46D57C”,MC/10,1)+”06”Л
230. FOR I=0 TO 62Л
231. G$=G$+C$+MID$(Z$,I,1)Л
232. NEXTЛ
233. BGFILL 0,5,42,25,44,G$Л
234. M=((MC+7)/5 OR 0)*5Л
235. IF M>50 THEN M=50Л
236. FOR I=0 TO 49Л
237. Z$=HEX$(9-!FR(I)*6):Z=I+1Л
238. X=I%10*3+1:Y=(I/10 OR 0)*3+46Л
239. G$=G$(20)Л
240. IF I<M THEN G$=Z$+”054”+Z$+”055”+Z$+HEX$(230+Z/10,3)+Z$+HEX$(240+Z%10,3)Л
241. BGFILL 0,X,Y,X+1,Y+1,G$Л
242. NEXTЛ
243. CLS:S=18:X=MN%10*24+8Л
244. Y=(MN/10 OR 0)*24-162Л
245. SPSET 0,68,2,0,0,1Л
246. FOR I=20 TO 1 STEP -1Л
247. S=S-I:BGOFS 0,0,S,1Л
248. Y=Y+I:SPOFS 0,X,YЛ
249. GOSUB @GZЛ
250. NEXTЛ
251. IF MR THEN LOCATE 15,21:? ”Ф SAVE”Л
252. LOCATE 23,21:? ”А START”Л
253. @MN1Л
254. B=BTRIG()Л
255. Z=(B AND 2)*5-(B AND 1)*10Л
256. MN=MN+Z*(MN+Z>=0 AND MN+Z<M)Л
257. MN=(MN+(B AND 8)/8-(B AND 4)/4+M)%MЛ
258. SPOFS 0,MN%10*24+8,(MN/10 OR 0)*24+48Л
259. GOSUB @GZЛ
260. IF MR*B AND 64 THEN GOSUB @MSЛ
261. IF !(B AND 16) THEN @MN1Л
262. BEEP 3:FI=0:CLS:RETURNЛ
263. Л
264. @MS ′┿ SAVEЛ
265. Л
266. Z$=CHR$(MN)+CHR$(MC)Л
267. FOR I=0 TO 49Л
268. Z=FR(I)Л
269. Z$=Z$+CHR$(Z/256)+CHR$(Z%256)Л
270. NEXTЛ
271. MEM$=Z$:SAVE ”MEM:”+PRGNAME$Л
272. IF RESULT==1 THEN MR=0:LOCATE 15,21:? ” ”*6Л
273. RETURNЛ
274. Л
275. ′┝┸┝┸┝┸ INITIALIZE ┝┸┝┸┝┸Л
276. Л
277. @INЛ
278. Л
279. Z=SYSBEEP:SYSBEEP=0Л
280. LOAD ”MEM:”+PRGNAME$,0Л
281. SYSBEEP=Z:B$=”BGU0”Л
282. IF !RESULT THEN @IN1Л
283. Z$=MEM$:K=0Л
284. GOSUB @FK:MN=Z:GOSUB @FK:MC=ZЛ
285. FOR I=0 TO 49Л
286. GOSUB @FK:FR=Z*256Л
287. GOSUB @FK:FR(I)=FR+ZЛ
288. NEXTЛ
289. @IN1Л
290. FOR I=0 TO 87Л
291. CHRREAD(B$,I),Z$Л
292. CHRSET ”SPU0”,I,Z$Л
293. NEXTЛ
294. CHRREAD(B$,110),L$Л
295. F$=””:J=111Л
296. FOR I=0 TO 49Л
297. L=VAL(MID$(L$,I,1))*16Л
298. @IN2Л
299. Z=LEN(F$)Л
300. IF Z<L THEN CHRREAD(B$,J),Z$:F$=F$+Z$:J=J+1:GOTO @IN2Л
301. F$(I)=LEFT$(F$,L)Л
302. F$=MID$(F$,L,Z-L)Л
303. NEXTЛ
304. FOR I=0 TO 1:FOR J=0 TO 9Л
305. C$=””:CHRREAD(”BGF”,J+48-!(I+J)*16),Z$Л
306. FOR K=0 TO 63Л
307. C$=C$+HEX$(14-(MID$(Z$,K,1)==”F”)-(K%8==I*7 OR K>55)*5)Л
308. NEXTЛ
309. CHRSET B$,230+I*10+J,C$Л
310. NEXT:NEXTЛ
311. FOR I=1 TO 6Л
312. Z$=SUBST$(”0”*64,RND(64),1,STR$(I))Л
313. CHRSET B$,I+249,Z$Л
314. NEXTЛ
315. FOR I=220 TO 223Л
316. CHRSET ”SPU3”,I,”0”*64Л
317. NEXTЛ
318. FOR I=0 TO 21Л
319. Z$=HEX$(3+(I==4)*7)Л
320. FOR J=0 TO 3Л
321. G$(I)=G$(I)+Z$+HEX$(I*4+J,3)Л
322. NEXTЛ
323. NEXTЛ
324. FOR I=0 TO 3Л
325. BREPEAT I,24,8Л
326. NEXTЛ
327. FOR Y=0 TO 63:FOR X=0 TO 63Л
328. BGPUT 1,X,Y,(250+RND(6))*RND(2),10+RND(3),RND(2),RND(2)Л
329. NEXT:NEXTЛ
330. BGMPLAY 17:RETURNЛ
331. Л
332. ′─────────────────────── EOFЛ
※コードのHTML生成にPTC2HTMLを使用しています。
BGU0 | |
モドル BACK