昔のアーケードゲームを思い出しながら作りました。
プレイ動画
遊び方
起動するとデモ画面が出ます。Aボタンでゲームがスタートします。
パドルは下画面をタッチして動かしてください。十字キーには対応していません。
アイテムなどは何も出ません。ひたすらボールを打ち返してブロックを消してください。
向こう側の壁にボールが当たると、パドルの長さが半分になります。
ボールは3個です。400点でボールが1個追加されます。
2面クリアしても終わりません。ずっと続きます。
おまけ
DSiLLで開発しています。3DSだとボールが速過ぎると思いますので、49行目のウェイトの値を増やしてください。
かつて8ビットマシンの時代にブロックくずしを作りましたが、BASICでは速度が足りず、マシン語ルーチンを組み込んで何とか遊べる代物になりました。
今はオールBASICでこれだけ高速なブロックくずしが作れるんですね。楽しいです。
ゲームタイトルは最初「元祖ブロックくずし」にしようと思ったのですが、既に使っている人がいたので、「簡素」にしてみました。
プログラムリスト
'************** '* * '* カンソ * '* ブロック クズシ * '* * '* 2011.12.7 * '* by shiro * '* * '************** '*** ショキ セッテイ *** CLEAR VISIBLE 1,0,0,0,1,1 PNLTYPE "OFF" CLS GPAGE 0:GCLS 0 GPAGE 1:GCLS 0 BGMSTOP GPAGE 0 SPPAGE 0 DIM BLOCK(14,8),COLBLK(8) 'ゲーム モード GMDEMO=0 GMPLAY=1 GMMISS=2 'ブロック BLOCKMAX=14*8 BLKOX=56:BLKOY=16 BLKWX=14:BLKWY=6 'スクリーン サイズ SCRMINX=55:SCRMAXX=SCRMINX+BLKWX*14+2 SCRMINY=0:SCRMAXY=191 'パドル PADIX=150:PADY=189 PADWL=28:PADWS=14 PADWY=2 'ボール SPSET 9,254,1,0,0,0 SPSCALE 0,150 BALLMAX=3 BALLIX=110:BALLIY=82 BALLWT0=12:BALLWT1=10 'スコア SCOREX=0:SCOREY=0 SCOREB=400 'ボール ノコリ BALLCX=0:BALLCY=3 'メッセージ MESX=12:MESY=13 'カラー COLBALL=15 COLPAD=15 COLWALL=15 COLMES=0 COLSCORE=0:COLBALLC=0 FOR Y=0 TO 7 READ COLBLK(Y) NEXT Y DATA 3,3,12,12,11,11,15,15 'サウンド BPPAD=4096:BPWALL=2048:BPBLOCK=0 BPBONUS=3 GOSUB @INIBLOCK GOSUB @PRTSCORE GOSUB @PRTBALLC '*** デモ *** @DEMO GM=GMDEMO GOSUB @PRTBLOCK BALLSP=3 BALLX=BALLIX:BALLY=BALLIY BALLDX=1:BALLDY=1 GOSUB @PRTPADLN LOCATE MESX,MESY PRINT "PUSH A TO START" LOCATE MESX,MESY+2 PRINT " PUSH B TO END" @DEMOLOOP GOSUB @MOVEBALL FOR I=0 TO BALLWT0+BALLWT1*BALLSP:GOSUB @PRTWALL:NEXT I IF (BUTTON() AND 16)!=0 GOTO @RESTART IF (BUTTON() AND 32)!=0 GOTO @ENDINIT GOTO @DEMOLOOP '*** ゲーム リスタート *** @RESTART GM=GMPLAY SCORE=0 BALLC=BALLMAX:BALLSP=3 BALLX=-2:BALLY=-2 BALLDX=1:BALLDY=1 PADX=PADIX:PADWX=PADWL PADRFC=0 RFPAD=FALSE:RFBLOCK=FALSE CLBLOCK=FALSE CLS:GCLS 0 GOSUB @PRTWALL GOSUB @INIBLOCK GOSUB @PRTBLOCK GOSUB @PRTPAD GOSUB @PRTBALL GOSUB @PRTSCORE GOSUB @PRTBALLC VSYNC 150 BALLX=BALLIX:BALLY=BALLIY '*** メイン ループ *** @MAINLOOP GOSUB @MOVEPAD GOSUB @MOVEBALL FOR I=0 TO BALLWT0+BALLWT1*BALLSP:GOSUB @PRTWALL:NEXT I IF GM==GMPLAY GOTO @MAINLOOP '*** ミス *** VSYNC 150 BALLC=BALLC-1 GOSUB @PRTBALLC IF BALLC==0 GOTO @DEMO BALLSP=3 BALLX=BALLIX:BALLY=BALLIY BALLDX=1:BALLDY=1 GOSUB @ERCPAD PADX=PADIX:PADWX=PADWL PADRFC=0 RFPAD=FALSE:RFBLOCK=FALSE GM=GMPLAY GOTO @MAINLOOP '*** ゲーム シュウリョウ *** @ENDINIT VISIBLE 1,1,1,1,1,1 CLS GPAGE 0:GCLS 0 SPCLR END '===== サブルーチン ===== '*** カベ ヒョウジ *** @PRTWALL GLINE SCRMINX,SCRMINY,SCRMINX,SCRMAXY,COLWALL GLINE SCRMAXX,SCRMINY,SCRMAXX,SCRMAXY,COLWALL RETURN '*** デモ パドルライン ヒョウジ *** @PRTPADLN GFILL SCRMINX+1,PADY,SCRMAXX-1,PADY+PADWY,COLPAD RETURN '*** ブロック ショキカ *** @INIBLOCK BLOCKC=BLOCKMAX FOR X=0 TO 13 BLOCK(X,0)=7:BLOCK(X,1)=7 BLOCK(X,2)=5:BLOCK(X,3)=5 BLOCK(X,4)=3:BLOCK(X,5)=3 BLOCK(X,6)=1:BLOCK(X,7)=1 NEXT X RETURN '*** ブロック ヒョウジ *** @PRTBLOCK FOR X=0 TO 13 FOR Y=0 TO 7 IF BLOCK(X,Y)==0 THEN @PRTBLK2 GX=BLKOX+X*BLKWX GY=BLKOY+Y*BLKWY GCOLOR COLBLK(Y) GFILL GX+1,GY+1,GX+BLKWX-1,GY+BLKWY-1 @PRTBLK2 NEXT Y NEXT X RETURN '*** パドルヲ ウゴカス *** @MOVEPAD GOSUB @ERCPAD IF TCHST==TRUE THEN PADX=TCHX IF PADX-PADWX/2<=SCRMINX THEN PADX=SCRMINX+PADWX/2 IF PADX+PADWX/2>=SCRMAXX-1 THEN PADX=SCRMAXX-PADWX/2-1 GOSUB @PRTPAD RETURN 'パドル ヒョウジ @PRTPAD GFILL PADX-PADWX/2+1,PADY,PADY+PADWY,COLPAD RETURN 'パドル ショウキョ @ERCPAD GFILL PADX-PADWX/2+1,PADY,PADY+PADWY,0 RETURN '*** ボールヲ ウゴカス *** @MOVEBALL IF BALLX<=SCRMINX+2 THEN GOSUB @RFWALLL IF BALLX>=SCRMAXX-2 THEN GOSUB @RFWALLR IF BALLY<SCRMINY THEN GOSUB @RFWALLU IF BALLY>SCRMAXY+1 THEN GOSUB @RFMISS:RETURN IF BALLY<PADY-2 OR BALLY>PADY THEN RFPAD=FALSE:GOTO @NOPAD IF GM==GMDEMO THEN GOSUB @RFPADLN:GOTO @NOPAD IF 0<=PADX-BALLX AND PADX-BALLX<=PADWX/2 AND RFPAD==FALSE THEN GOSUB @RFPADL IF 0<BALLX-PADX AND BALLX-PADX<=PADWX/2+1 AND RFPAD==FALSE THEN GOSUB @RFPADR @NOPAD @CHKBLOCK IF RFBLOCK==TRUE GOTO @NOBLOCK BX=FLOOR((BALLX-BLKOX)/BLKWX) BY=FLOOR((BALLY-BLKOY)/BLKWY) IF BY<0 OR BY>7 GOTO @NOBLOCK IF BLOCK(BX,BY)>0 THEN GOSUB @RFBLOCK @NOBLOCK BALLX=BALLX+BALLDX BALLY=BALLY+BALLDY GOSUB @PRTBALL RETURN 'ボール ヒョウジ @PRTBALL SPOFS 0,BALLX-12,BALLY-12 RETURN 'ハンシャ パドル ヒダリ @RFPADL BEEP 0,BPPAD BALLDX=-1:BALLDY=-BALLDY GOSUB @BALLPTRN RFPAD=TRUE:RFBLOCK=FALSE IF CLBLOCK=TRUE THEN GOSUB @PRTBLOCK:CLBLOCK=FALSE RETURN 'ハンシャ パドル ミギ @RFPADR BEEP 0,BPPAD BALLDX=1:BALLDY=-BALLDY GOSUB @BALLPTRN RFPAD=TRUE:RFBLOCK=FALSE IF CLBLOCK=TRUE THEN GOSUB @PRTBLOCK:CLBLOCK=FALSE RETURN 'ハンシャ パドルライン @RFPADLN BALLDY=-BALLDY GOSUB @BALLPTRN RFBLOCK=FALSE RETURN 'ボール パターン @BALLPTRN PADRFC=PADRFC+1 IF PADRFC==5 AND BALLSP!=0 THEN BALLSP=2 IF PADRFC==11 AND BALLSP!=0 THEN BALLDY=-0.5 IF PADRFC==15 AND BALLSP!=0 THEN BALLSP=1:BALLDY=-1 RETURN 'ハンシャ カベ ヒダリ @RFWALLL IF GM==GMPLAY THEN BEEP 0,BPWALL BALLDX=1 RETURN 'ハンシャ カベ ミギ @RFWALLR IF GM==GMPLAY THEN BEEP 0,BPWALL BALLDX=-1 RETURN 'ハンシャ カベ ウエ @RFWALLU BALLDY=-BALLDY RFBLOCK=FALSE IF GM=GMDEMO THEN RETURN IF PADWX==PADWL THEN GOSUB @ERCPAD:PADWX=PADWS:GOSUB @PRTPAD RETURN 'ハンシャ ブロック @RFBLOCK BALLDY=-BALLDY RFBLOCK=TRUE IF BY<=3 THEN BALLSP=0:BALLDY=SGN(BALLDY) IF GM==GMDEMO THEN RETURN BEEP 0,BPBLOCK SCORE0=SCORE SCORE=SCORE+BLOCK(BX,BY) GOSUB @PRTSCORE BLOCK(BX,BY)=0 BLOCKC=BLOCKC-1 GX=BLKOX+BX*BLKWX GY=BLKOY+BY*BLKWY GFILL GX+1,GY+1,GX+BLKWX-1,GY+BLKWY-1,0 IF SCORE0<SCOREB AND SCORE>=SCOREB THEN BALLC=BALLC+1:GOSUB @PRTBALLC:BEEP BPBONUS IF BLOCKC==0 THEN CLBLOCK=TRUE RETURN 'ミス @RFMISS GM=GMMISS RETURN '*** スコア ヒョウジ *** @PRTSCORE COLOR COLSCORE LOCATE SCOREX,SCOREY PRINT "SCORE" LOCATE SCOREX,SCOREY+1 PRINT SCORE RETURN '*** ノコリ ボール ヒョウジ *** @PRTBALLC COLOR COLBALLC LOCATE BALLCX,BALLCY PRINT "BALL" LOCATE BALLCX,BALLCY+1 PRINT " " LOCATE BALLCX,BALLCY+1 FOR I=0 TO BALLC PRINT "○"; NEXT I RETURN