パズルゲーム 2048 の六角マスアレンジ版です。数字のタイルが次々に出てくるので、うまく移動させて大きい数字のタイルを作ってください。This is a puzzle game in imitation of 2048. Control tiles with number in hex-grids and obtain larger number.
スライドパッドで6方向にタイルを移動させます。同じ数字のタイルが2つ重なると合計された1つのタイルになります。Use circle pad to move the tiles in the 6 possible directions. When two tiles with the same number touch, they merge into one.
タイルが動かせなくなったらゲームオーバーです。ABXYのどれかボタンを押すとやり直しができます。If there is no more moves, the game is over. And you can retry puzzle by A/B/X/Y button.
BQ | タイルの連続移動防止用フラグ |
FA | タイルがまだ動かせるか |
FD[,] | 盤面上のタイルのスプライト番号 |
FN | 新規生成するスプライト番号 |
FS[] | スプライト番号に対するタイルの種類 |
FV | タイル移動中待ちカウンタ |
SN[] | BEEP音番号の配列 |
G$ | 汎用文字列 |
GC%[] | タイル画像描画時のカラーパレット |
GG%[,] | タイル画像のレンダリング処理用 |
H$ | 背景のBGパターン |
K$[] | お祝いメッセージの配列 |
SC | スコア |
SK | お祝いメッセージ表示用変数 |
TM | パズル開始からの経過フレーム数 |
VX,VY | タイルの移動方向 |
' ' TXT:2048HEX Programmed by OBONO ' DIM FD[7,7],FS[17],SN[19],K$[4] ACLS:BACKCOLOR &H605850:GOSUB @IN WHILE 1 REPEAT:VSYNC:UNTIL BUTTON(2) AND 240 GOSUB @FI REPEAT VX=0:VY=0:GOSUB @FB IF !FV&&(VX||VY) THEN GOSUB @FV IF FV THEN FV=FV-1:IF !FV THEN GOSUB @FA BGSTR 0,16,1,0,TMFMT$(TM):TM=TM+1:VSYNC UNTIL !FA GOSUB @FZ WEND ' SUB ROUTINES @FI ' START GAME CLS:BGCLR:SPCLR FOR I=0 TO 16:FS[I]=-1:NEXT FOR I=0 TO 6:FOR J=0 TO 6 Z=(I<1||I>5||J<1||J>I) FD[J,I]=Z:X=J*4-I*2+9:Y=I*3-3 IF !Z THEN BGFILL 0,X,Y,X+2,Y+2,H$ NEXT:NEXT FA=1:FV=0:FN=1:SC=0:SK=0:TM=0:BQ=1 BGSTR 0,0,0,0,"SCORE":BGSTR 0,6,1,0,"0" BGSTR 0,16,0,0,"TIME":GOSUB @FN:GOSUB @FN BGMPLAY 27:BEEP 116:RETURN @FN ' NEW TILE X=RND(5)+1:Y=RND(5)+1:IF FD[X,Y] THEN @FN REPEAT:FN=FN+1-(FN>15)*15:UNTIL FS[FN]<0 FD[X,Y]=FN:S=!RND(10):FS[FN]=S:SPSET FN,S TILEMV FN,X,Y,1:TILESC FN,0,1,9:RETURN @FB ' CHECK STICK STICK OUT X,Y:R=SQR(X*X+Y*Y):BQ=BQ*(R>0) IF !BQ&&R>.75 THEN VX=X>0:VY=-SGN(Y)*(Y!=0&&ABS(X/Y)<1.5) VX=VX-(!VX*!VY||VY<0):BQ=1 ENDIF:RETURN @FV ' MOVE TILES Z=(VX+VY<0)*2-1 FOR I=-2 TO 2:FOR J=-2 TO 2 X=3+J*Z:Y=3+I*Z:D=FD[X,Y]:S=FS[D]:R=0 IF D<2 THEN CONTINUE REPEAT:R=R+1:M=FD[X+VX*R,Y+VY*R]:UNTIL M H=(S==FS[M]):IF H THEN FS[D]=S+.5:FS[M]=-1 R=R-!H:IF R THEN FD[X,Y]=0:X=X+VX*R:Y=Y+VY*R:FD[X,Y]=D TILEMV D,X,Y,6:FV=6 ENDIF NEXT:NEXT:RETURN @FA ' CHECK FIELD FOR I=2 TO 16 S=FS[I]:IF S<0 THEN SPCLR I IF S*2 MOD 2 THEN S=MIN(S+.5,14):FS[I]=S:Z=POW(2,S):SC=SC+Z SPCHR I,S:TILESC I,1.5,1,5:BEEP SN[S] IF S-11==SK THEN G$=K$[SK]+"! YOU OBTAINED "+STR$(Z) BGCLR 1:BGOFS 1,-200,-64 BGSTR 1,0,0,SK+1,G$+"!"*(SK+1) BGANIM 1,"XY",-200,600,-64:BEEP SN[SK+15] BGSTR 0,16,SK+2,SK+1,TMFMT$(TM):SK=SK+1 ENDIF ENDIF NEXT BGSTR 0,0,1,0,FORMAT$("%7D",SC) GOSUB @FN:FA=0 FOR I=1 TO 5:FOR J=1 TO 5 D=FD[J,I]:S=FS[D]:FA=FA+!D IF D>1 THEN FOR K=0 TO 2 INC FA,S==FS[FD[J-(K!=1),I-(K<2)]] NEXT ENDIF NEXT:NEXT:RETURN @FZ ' GAME OVER BGMSTOP:BEEP 127:BGCLR 1:BGOFS 1,-28,-64 BGSTR 1,0,0,0,"GAME OVER":RETURN ' FUNCTIONS DEF TILEMV _S,_X,_Y,_T SPANIM _S,"XY",-_T,_X*64-_Y*32+168,_Y*48-24 END DEF TILESC _S,_B,_E,_T SPANIM _S,"S",1,_B,_B,-_T,_E,_E END DEF TMFMT$(_T) DIM _M=_T/3600,_S=_T MOD 3600/60 RETURN FORMAT$("%3D:%05.2F",_M,_S) END DEF BGSTR _P,_X,_Y,_C,_S$ DIM _I,_L=LEN(_S$)-1 FOR _I=0 TO _L BGPUT _P,_X+_I,_Y,ASC(MID$(_S$,_I,1))+_C*64 NEXT END ' INITIALIZE @IN ' RENDER TILE IMAGE DIM GG%[48,48],GC%[32] FOR I=0 TO 47:FOR J=0 TO 47 X=J-23.5:Y=I-23.5:R=SQR(X*X+Y*Y) IF R>21 THEN Z=.707 ELSE Z=-R/128 G=MAX(SQR(1-Z*Z)*.707-(X+Y)/R*Z/2,0) IF R<24 THEN GG%[J,I]=G*30+RNDF()+1 NEXT:NEXT FOR I=0 TO 14 ' PALETTE READ C:RGBREAD C OUT R,G,B FOR J=1 TO 31 V=MIN((J+7)/32,1):L=MAX(0,(J-25)*16) GC%[J]=RGB(R*V+L,G*V+L,B*V+L) NEXT ' TILE & FIGURES X=I MOD 10*48:Y=(I>9)*48+48 GPAGE 0,4:GLOAD X,Y,48,48,GG%,GC%,1 SPDEF I,X,Y,48,48,24,24 G$=STR$(POW(2,I)):L=LEN(G$) X=X+22-MIN(L*6,20):Y=Y+16-(L>3)*6 FOR J=0 TO L-1 Z=ASC(MID$(G$,J,1))-32 GCOPY Z*16,16,Z*16+15,31,X,Y,0:X=X+12 IF J==2-(L==4) THEN X=X-(L-3)*12+4:Y=Y+12 NEXT ' FONT IF I>10 THEN GPAGE 0,5:Y=I*32-304 GCOPY 0,16,511,47,0,Y,1 FOR J=0 TO 31:C=GC%[31-J MOD 16] FOR K=0 TO 511 GPSET K,Y+J,GSPOIT(K,Y+J) AND C NEXT:NEXT ENDIF NEXT ' HOLE FOR I=1 TO 31:GC%[I]=&HFF403830:NEXT GLOAD 0,176,48,48,GG%,GC%,1 FOR I=11 TO 13:FOR J=0 TO 2 H$=H$+HEX$(I*32+J,4) NEXT:NEXT ' OTHERS FOR I=0 TO 18:READ SN[I]:NEXT FOR I=0 TO 3:READ K$[I]:NEXT ' TITLE SCREEN BGSCREEN 1,36,1:BGSCALE 1,2,2 BGOFS 1,-36,-8,-64:BGSTR 1,0,0,1,"2048-HEX" BGSTR 0,2,4,0,"JOIN THE NUMBERS AND" BGSTR 0,2,5,0,"GET TO THE 2048 TILE!" BGOFS 0,0,0,64:BGFILL 0,4,7,20,13,385 FOR I=0 TO 12 READ G$:LOCATE 25-LEN(G$)/2,I+15:? G$ NEXT:RETURN DATA &H9090A0,&HA09090,&HB09080,&HC09070 DATA &HD09060,&HE09050,&HE0A040,&HE0B030 DATA &HE0C020,&HE0D010,&HE0E000,&HC0E040 DATA &HA0E080,&H80E0C0,&H60C0FF,0,47,49,95 DATA 79,60,64,37,38,32,43,42,90,89,108,72 DATA 71,77,78,"CONGRATULATIONS","WONDERFUL" DATA "MARVELLOUS","UNBELIEVABLE","- あそびかた -" DATA "","スライドパッド で 6ほうこう に タイル を いどう させます" DATA "","おなじ すうじ の タイル が 2つ かさなると" DATA "ごうけい された 1つ の タイル に なります","" DATA "タイル が うごかせなく なったら ゲームオーバー です","" DATA " どれか を おすと ゲーム を はじめます","" DATA "2015.5.21 Programmed by OBONO" DATA "http://d.hatena.ne.jp/OBONO/" ' EOF