※第三回プチコン大喜利応募作品
画面内に、トランポリンみたいに跳ねられる四角いパネルが散らばっているので、上手く跳ね上がって、どんどん画面手前方向に進んでください。There are square panels around you, You must jump on them and go up.
50枚おきに青いパネルが現れ、それで飛び跳ねることでレベルが上がっていきます。A blue panel will appear every 50 panels. A level is cleared if you jump on it.
パネルに乗り損なって下まで落下してしまうとゲームオーバーです。The game is over if you miss the panel and fall toward bottom.
タイトル画面では、何かボタン(ABXY)を押すことでゲームを開始します。画面中央の魔法使いの女の子を十字キーかスライドパッドで上下左右に操作します。You can start the game by any button (ABXY). You can move the character by circle pad or D-pad.
ゲーム中は、何かボタンを押すとポーズができます。もう一度押すと解除できます。You can pause and resume the game by any button during the game.
ゲームオーバーになってしまったら、何かボタンを押すことでゲームを再挑戦できます。You can retry the game by any button after the game is over.
BR,BV,BW | プレイヤーの移動量 |
BT | ボタンの状態 |
BX,BY | スライドパッドの入力量 |
F$ | 現在のレベルで出現するパネルの種類 |
FB,FE | リングバッファ制御用インデックス番号 |
FC[] | パネルの色 |
FH[] | 何枚目のパネルか |
FM | プレイヤーが跳ねたパネルのインデックス番号 |
FS | パネルの大きさ |
FT[] | パネルの種類 (1:橙 2:緑 3:黄 4:茶 5:青) |
FU | 奥行き移動量 |
FV[],FW[] | パネルの移動量 など |
FX[],FY[],FZ[] | パネルの位置 |
LV | 現在のレベル-1 |
LX[],LY[],LZ[] | 白いドットの位置 |
PA | プレイヤーキャラのアニメーション制御用 |
PF | ゲームの状態 (0:通常 1:レベル開始前 2:レベルクリア直後 3:ゲームオーバー) |
PH | 到達したパネルの枚数 |
PX,PY,PZ | 基準位置に対するプレイヤーの相対位置 |
VX,VY,VZ | スクロール量 |
' ' TXT:HOPPER Programmed by OBONO ' DIM FX[10],FY[10],FZ[10],FT[10] DIM FH[10],FV[10],FW[10],FC[6] DIM LX[50],LY[50],LZ[50] GOSUB @IN:GOSUB @TI:GOSUB @SI:GOSUB @GS ' GAME MANAGEMENT @GM STICK OUT BX,BY:BT=BUTTON() GOSUB @PM:GOSUB @FL IF FU>0 && FM>=0 THEN GOSUB @PS IF FZ[FB]<PZ THEN GOSUB @GV GOSUB @SM:GOSUB @GD:VSYNC 1 IF BT AND 240 THEN IF !PF THEN GOSUB @GZ IF PF==3 && PA>=120 THEN GOSUB @GS ENDIF GOTO @GM @GS ' START GAME LV=0:PX=0:PY=0:PZ=0:PF=0:PH=0:PA=0:'FU=0 GOSUB @FI SPSET 60,6 BGCLR 0:BGSTR 0,10,9,"READY":BEEP 32 RETURN @GD ' DRAW CHARACTERS FOR I=0 TO 9 IF FT[I] THEN U=(I==FM)*FU*4 X=(RND(3)-1)*U:Y=(RND(3)-1)*U IF FT[I]==3 THEN S=FW[I] ELSE S=2 SPOFS3D I,FX[I]+X,FY[I]+Y,FZ[I],S ENDIF NEXT FOR I=0 TO 49 SPOFS3D I+10,LX[I],LY[I],LZ[I],1 NEXT SPOFS3D 60,PX,PY,PZ,1 RETURN @GZ ' PAUSE & RESUME GAME BGSTR 0,10,9,"PAUSE":BGMVOL 32:BEEP 3 FOR I=0 TO 2 WHILE !(BUTTON() AND 240)==I MOD 2 VSYNC 1 WEND NEXT BGSTR 0,10,9," ":BGMVOL 64 RETURN @GV ' GAME OVER IF !PF THEN PA=0:PF=3 SPCHR 60,11:SPANIM 60,"R",-90,360,0 SPSTART 60:BGMSTOP:BEEP 14 ENDIF PA=PA+1 IF PA==120 THEN BGMPLAY 6 BGSTR 0,8,3,"game over" BGSTR 0,5,11,"push any button" ENDIF RETURN ' CONTROL PLAYER @PM ' MOVE PLAYER VX=-PX/4:VY=-PY/4:FU=FU+(FU<4)/16 IF FU<0 THEN VZ=-PZ/2 ELSE VZ=-PZ-FU IF !PF || PF==3 THEN BV=((BT AND 8)/8-(BT AND 4)/4)*4+BX*5 BW=((BT AND 2)/2-(BT AND 1) )*4-BY*5 BR=SQR(BV*BV+BW*BW) IF BR>4 THEN BV=BV*4/BR:BW=BW*4/BR ELSE BV=0:BW=0:BR=0 ENDIF PX=PX+VX+BV:PY=PY+VY+BW:PZ=PZ+VZ+FU IF FU>-3 && PF!=3 THEN IF PA!=0 && BR<2 THEN SPCHR 60,6:PA=0 IF PA!=1 && BR>=2 THEN SPANIM 60,"I",4,6,4,7,4,8,4,9,0 SPSTART 60:PA=1 ENDIF ENDIF RETURN @PS ' BOUND PLAYER PH=MAX(PH,FH[FM]):BGSTR 0,7,1,STR$(PH) PA=2:SPCHR 60,10:T=FT[FM] IF T==3 THEN FV[FM]=1 IF T==5 THEN LV=LV+1:FU=-6:PF=2:BGMSTOP:BEEP 5 BGSTR 0,8,3,"excellent" BGSTR 0,5,11,"try next level{" ELSE FU=-4:BEEP 8 IF PF THEN PF=0:BGCLR 0 BGSTR 0,1,1,"FLOOR "+STR$(PH) BGSTR 0,17,13,"LEVEL "+STR$(LV+1) BGMPLAY (LV MOD 3+1)*8+(LV MOD 3==2)*3 ENDIF ENDIF RETURN ' CONTROL FLOORS @FL IF FU>0 THEN FM=-1:IF PF==2 THEN GOSUB @FI FOR I=0 TO 9 IF FT[I] THEN GOSUB @FM NEXT IF !PF&&FT[FE]!=5&&FZ[FE]>-12 THEN GOSUB @FN IF FB!=FE && FZ[FB]>256 THEN GOSUB @FR RETURN @FI ' SETUP LEVEL F$="1"*(LV<6) IF LV AND 1 THEN F$=F$+"2" IF LV AND 2 THEN F$=F$+"3" IF LV AND 4 || LV==8 THEN F$=F$+"4" FOR I=0 TO 9:FT[I]=0:NEXT FX[0]=PX:FY[0]=PY:FZ[0]=256:FS=64-LV*4 FH[0]=LV*50:FT[0]=1:FB=0:FE=0:PF=1 GPAGE 0,4:GFILL 0,448,384,512,0 FOR I=1 TO 5 X=I*64:S=32-FS/(2+(I==4)*2) GFILL X+S,448+S,X+63-S,512-S,FC[I] FOR J=S TO S+4 C=192-ABS(J-S-2)*64 GBOX X+J,448+J,X+63-J,512-J,RGB(C,C,C) NEXT NEXT SPSET 0,1 RETURN @FM ' MOVE FLOOR X=FX[I]+VX:Y=FY[I]+VY:Z=FZ[I]+VZ V=FV[I]:W=FW[I]:T=FT[I]:S=FS/(1+(T==4)) IF T==2 THEN X=X+V:Y=Y+W IF T==3 THEN IF V THEN FW[I]=W-(W>0)/16:S=0 IF Z<-12 THEN FV[I]=0:FW[I]=2 ENDIF FX[I]=X+((X<-256)-(X>256))*512 FY[I]=Y+((Y<-256)-(Y>256))*512 FZ[I]=Z IF FU>0 && PZ-FU<Z && PZ>=Z THEN IF MAX(ABS(X-PX),ABS(Y-PY))<S THEN FM=I:PZ=Z-1/16 ENDIF ENDIF RETURN @FN ' NEW FLOOR Z=FZ[FE]-32-LV*2:H=FH[FE]+1 T=VAL(MID$(F$,RND(LEN(F$)),1)) IF LV<11 && H MOD 50==0 THEN T=5 FE=(FE+1)MOD 10 FX[FE]=RNDF()*512-256:FY[FE]=RNDF()*512-256 FZ[FE]=Z:FH[FE]=H:FT[FE]=T:FV[FE]=0:FW[FE]=0 IF T==2 THEN D=RNDF()*PI()*2:R=2+LV/8 FV[FE]=COS(D)*R:FW[FE]=SIN(D)*R ENDIF SPSET FE,T:IF T==3 THEN FW[FE]=2 RETURN @FR ' REMOVE FLOOR FT[FB]=0:SPCLR FB:FB=(FB+1)MOD 10 RETURN ' CONTROL BACKGROUND DOTS @SI ' INITIALIZE FOR I=0 TO 49 LX[I]=RNDF()*512-256:LY[I]=RNDF()*512-256 LZ[I]=RND(268)-12 SPSET I+10,1462:SPHOME I+10,8,8 NEXT RETURN @SM ' MOVE DOTS FOR I=0 TO 49 X=LX[I]:Y=LY[I]:Z=LZ[I] LX[I]=X+VX+((X<-256)-(X>256))*512 LY[I]=Y+VY+((Y<-256)-(Y>256))*512 LZ[I]=Z+VZ+((Z<-12 )-(Z>256))*268 NEXT RETURN ' INITIALIZE @IN ACLS:BACKCOLOR RGB(32,96,0) DEF SPOFS3D _I,_X,_Y,_Z,_S DIM _Q,_C _Q=4:IF _Z>-12 THEN _Q=1/(1+_Z/16) _C=MAX(ABS(_X),ABS(_Y),_Z) _C=MIN((256-_C)*4,256+_Z*24,255) IF _I==60 THEN _C=255 'TRICK! IF _C>0 && _S>0 THEN SPOFS _I,_X*_Q+200,_Y*_Q+120,_Z*4-192 SPSCALE _I,_S*_Q,_S*_Q SPCOLOR _I,RGB(_C,255,255,255) SPSHOW _I ELSE SPHIDE _I ENDIF END DEF BGSTR _P,_X,_Y,_S$ DIM _I,_S FOR _I=0 TO LEN(_S$)-1 _S=ASC(MID$(_S$,_I,1)) BGPUT _P,_X,_Y,_S:_X=_X+1 NEXT END FOR I=1 TO 5 READ FC[I]:SPDEF I,I*64,448,64,64,32,32,0 NEXT FOR I=0 TO 1 SPDEF 6+I*2,176,144,16,16,8,8,I*8+1 SPDEF 7+I*2,192,144,16,16,8,8,I*8+1 SPDEF 10+I,80+I*32,272,16,16,8,8 NEXT GPAGE 0,5:GCOPY 16,32,431,47,16,48,1 GCOPY 16,16,31,31,432,48,1 FOR Y=16 TO 63 C=&HFFFFFFFF-(Y>47)*&HFF-(Y MOD 16)*&H800 FOR X=0 TO 511 GPSET X,Y,GSPOIT(X,Y) AND C NEXT:NEXT RETURN @TI ' TITLE SCREEN BGSTR 1,8,7,"HOPPER 3D" BGHOME 1,200,120:F=1:Z=291:U=0:BEEP 6 WHILE F || !(BUTTON() AND 240) S=4/(1+Z/16):BGSCALE 1,S,S BGOFS 1,200,120,Z*4-192:Z=Z+U:U=U-1/16 IF Z<=0 THEN U=2 IF F THEN FOR I=0 TO 4 READ X,Y,C,S$:LOCATE X,Y:COLOR C:PRINT S$ NEXT BGSTR 0,5,12,"push any button":F=0:BEEP 55 ENDIF ENDIF VSYNC 1 WEND BGCLR 1:CLS RETURN ' DATA DATA &HFFFFC040,&HFF40E040,&HFFFFFF00 DATA &HFFE06020,&HFFA0A0FF DATA 22,17,15,"in Petit Computer 3" DATA 17,20,7,"- How to play -" DATA 15,22,7," Move Pause" DATA 10,27,5,"2014.11.21 Programmed by OBONO" DATA 11,28,5,"http://d.hatena.ne.jp/OBONO/" ' EOF