パズルゲーム 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