Data update
This commit is contained in:
parent
35bcdeebf8
commit
74c69a0df6
2427 changed files with 31826 additions and 3468 deletions
161
Task/2048/FutureBasic/2048.basic
Normal file
161
Task/2048/FutureBasic/2048.basic
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
begin enum 123
|
||||
_lf
|
||||
_rt
|
||||
_dn
|
||||
_up
|
||||
_new
|
||||
_end
|
||||
end enum
|
||||
str63 bd
|
||||
colorref color(11)
|
||||
byte zs
|
||||
|
||||
void local fn initialize
|
||||
subclass window 1, @"2048",(0,0,438,438)
|
||||
fn WindowSetBackgroundColor( 1, fn ColorBlack )
|
||||
color(0) = fn ColorDarkGray
|
||||
color(1) = fn ColorGray
|
||||
color(2) = fn ColorLightGray
|
||||
color(3) = fn ColorBlue
|
||||
color(4) = fn ColorBrown
|
||||
color(5) = fn ColorCyan
|
||||
color(6) = fn ColorGreen
|
||||
color(7) = fn ColorMagenta
|
||||
color(8) = fn ColorOrange
|
||||
color(9) = fn ColorPurple
|
||||
color(10) = fn ColorYellow
|
||||
color(11) = fn ColorRed
|
||||
end fn
|
||||
|
||||
void local fn drawBoard
|
||||
int x, y,r = 1, add
|
||||
cls
|
||||
for y = 320 to 20 step -100
|
||||
for x = 20 to 320 step 100
|
||||
rect fill (x,y,98,98),color( bd[r] )
|
||||
select bd[r]
|
||||
case < 4 : add = 40
|
||||
case < 7 : add = 30
|
||||
case < 10 : add = 20
|
||||
case else : add = 6
|
||||
end select
|
||||
if bd[r] then print %(x+add, y+25)2^bd[r]
|
||||
r++
|
||||
next
|
||||
next
|
||||
end fn
|
||||
|
||||
local fn finish( won as bool )
|
||||
CFStringRef s = @"GAME OVER"
|
||||
CGRect r = fn windowContentRect( 1 )
|
||||
r.origin.y += r.size.height - 20
|
||||
r.size.height = 100
|
||||
window 2,,r,NSwindowStyleMaskBorderless
|
||||
if won
|
||||
fn windowSetBackgroundColor( 2, color(11) )
|
||||
s = @"CONGRATULATIONS—YOU DID IT!!"
|
||||
text,24,fn ColorBlack,,NSTextAlignmentCenter
|
||||
else
|
||||
fn windowSetBackgroundColor( 2, fn ColorBlack )
|
||||
text,24,fn ColorWhite,,NSTextAlignmentCenter
|
||||
end if
|
||||
print s
|
||||
button _new,,,@"New Game", (229,20,100,32)
|
||||
button _end,,,@"Quit", (109,20,100,32)
|
||||
end fn
|
||||
|
||||
void local fn newGame
|
||||
int r
|
||||
text @"Arial bold", 36, fn ColorBlack, fn ColorClear
|
||||
bd = chr$(0)
|
||||
for r = 1 to 4
|
||||
bd += bd
|
||||
next
|
||||
bd[rnd(16)] ++
|
||||
do
|
||||
r = rnd(16)
|
||||
until bd[r] == 0
|
||||
bd[r]++
|
||||
zs = 14
|
||||
fn drawBoard
|
||||
end fn
|
||||
|
||||
local fn play( st as short, rd as short, cd as short )
|
||||
short a, b, c, t, moved = 0
|
||||
|
||||
for a = st to st + rd * 3 step rd
|
||||
// SHIFT
|
||||
t = a
|
||||
for b = a to a + cd * 3 step cd
|
||||
if bd[b]
|
||||
if t <> b then swap bd[t], bd[b] : moved ++
|
||||
t += cd
|
||||
end if
|
||||
next
|
||||
// MERGE
|
||||
for b = a to a + cd * 2 step cd
|
||||
if bd[b] > 0 && bd[b] == bd[b+cd]
|
||||
bd[b]++ : c = b + cd
|
||||
// FILL IN
|
||||
while c <> a+cd*3
|
||||
bd[c] = bd[c+cd] : c += cd
|
||||
wend
|
||||
bd[c] = 0
|
||||
// CHECK FOR WIN
|
||||
if bd[b] == 11 then fn drawBoard : fn finish( yes ) : exit fn
|
||||
zs ++ : moved ++
|
||||
end if
|
||||
next
|
||||
next
|
||||
|
||||
fn drawBoard
|
||||
if moved == 0 then exit fn
|
||||
|
||||
// GROW
|
||||
b = 0 : c = rnd(zs)
|
||||
while c
|
||||
b ++
|
||||
if bd[b] == 0 then c--
|
||||
wend
|
||||
if rnd(10) - 1 then bd[b]++ else bd[b] = 2
|
||||
zs--
|
||||
timerbegin 0.25
|
||||
fn drawBoard
|
||||
timerend
|
||||
if zs then exit fn
|
||||
|
||||
// IS GAME OVER?
|
||||
for a = 1 to 12
|
||||
if bd[a] == bd[a+4] then exit fn
|
||||
next
|
||||
for a = 1 to 13 step 4
|
||||
if bd[a] == bd[a+1] || bd[a+1] == bd[a+2] || bd[a+2] == bd[a+3]¬
|
||||
then exit fn
|
||||
next
|
||||
|
||||
fn finish( no )
|
||||
end fn
|
||||
|
||||
local fn doDialog(ev as long,tag as long, wnd as long)
|
||||
select ev
|
||||
case _windowKeyDown : if window() == 2 then exit fn
|
||||
select fn EventKeyCode
|
||||
case _up : fn play(13, 1, -4)
|
||||
case _dn : fn play( 1, 1, 4)
|
||||
case _lf : fn play( 1, 4, 1)
|
||||
case _rt : fn play( 4, 4, -1)
|
||||
case else : exit fn
|
||||
end select
|
||||
DialogEventSetBool(yes)
|
||||
case _btnClick : window close 2
|
||||
if tag == _end then end
|
||||
fn newGame
|
||||
case _windowWillClose : if wnd == 1 then end
|
||||
end select
|
||||
end fn
|
||||
|
||||
fn initialize
|
||||
fn newGame
|
||||
on dialog fn doDialog
|
||||
|
||||
handleevents
|
||||
Loading…
Add table
Add a link
Reference in a new issue