This game isn't as polished or finished as I'd like, but I don't have that much coding time these days. I pretty much followed the levels of the original game. I coded this only as a programming exercise, but posting it in case some of you would enjoy playing it.
- Dav
Code: Select all
'GreenBlocks.txt v1.1
'A 'Numberhood' like puzzle game for ipad
'Coded by Dav April/2018
'v1.1: fixed bug that showed wrong symbol sometimes.
'. added support for the 0 number.
'. added more levels. 15 now.
'. optimized code
'. renamed game
'GOAL:
'Group blocks together to turn them green.
'When all blocks turn green, level is completed.
'HOW TO PLAY:
'First Select a block to move to an empty spot.
'Then select the spot to move it to. The numbers in the
'block say how many other blocks should be touching it.
'When the correct number is touching it, it will
'turn green (ie: 1 means only one block should touch it)
'If too many are touching it, it will turn red.
'Dark circled blocks can't be moved (level 6 and up).
'Turn all blocks on board green to clear the level.
'The Reatart button is a level redo, it resets it.
'There are 15 levels.
if lowstr$(device_type$())<>"ipad" then
print "Sorry, game for iPad only right now."
end
end if
option base 1
get orientation ort
set orientation vertical
get screen size sw,sh
level = 1
maxlevel =15
'======
restart:
'======
graphics
graphics clear .2,.2,.2
set buttons custom
'draw background texture
draw alpha .3
draw font size 100
draw color 0,0,0
'a litte background
for x=1 to sw step 61
for y =1 to sh step 102
draw text chr$(9619) at x,y
next y
next x
draw alpha 1
grid=9 !size=sw/grid
dim bm(grid*grid), bx(grid*grid),by(grid*grid),bv$(grid*grid)
dim fc(grid*grid) 'fill color of button
dim bcon$(grid*grid)
set buttons font size 36
draw color 0,0,0
fill color 1,1,.8
button "restart" text "Restart" at 1,grid
draw color 1,1,1
w$="Level "&level&" of "&maxlevel
draw font size 36
draw text w$ at grid*25, grid*2
draw font size 100
set buttons font size 74
x$=chr$(11035)
draw color 0,0,0
fill color .8,.8,.8
'init default button values, and generate x/y values...
bc=1
for r= 1 to grid
for c = 1 to grid
x=(r*size) ! y=(c*size)
button str$(bc) text x$ at x-size,y size size,size
bx(bc)=x-size!by(bc)=y 'button x/y position
fc(bc)=0 'fill color of button
bv$(bc)=x$ 'fill board with blocks
bcon$(bc) = "udlr" 'button connections
bm(bc)=0
bc=bc+1
next c
next r
'define connection for each button (left,right,up,down)
'adjust connections of corner buttons
bcon$(1)="rd"!bcon$(grid)="rd"
bcon$((grid*grid)-(grid-1))="ld"
bcon$(grid*grid)="ul"
'left side
for s=2 to grid-1
bcon$(s)="udr"
next s
'right side
for s=((grid*grid)-(grid-2))to (grid*grid-1)
bcon$(s)="udl"
next s
gosub setlevel
'===
main:
'===
selected=0
gosub updateboard
second:
do
for t=1 to (grid*grid)
'only poll non blocked buttons
if bv$(t)<>x$ then
if button_pressed(str$(t)) then
'only non movable umbers
if bm(t)=0 then
'if first choice...
if selected=0 then
'only select a number button
if bv$(t)<>"" then
selected=1
'highlight button here (redraw)
fill color .7,.9,1
button str$(t) text swap$(t) at bx(t),by(t) size size,size
notes set "120:sg7"!notes play
selbtn=t 'save picked butn number
goto second 'now get second choice
end if
else 'making second choice
'only move to blank block
if bv$(t)="" then
bv$(t)=bv$(selbtn)!bv$(selbtn)=""
goto main
else
'clear previous highlighted btn
selected=0!gosub updateboard!selected=1
'hightlight butn here (redraw)
fill color .7,.9,1
button str$(t) text swap$(t) at bx(t),by(t) size size,size
selbtn=t
notes set "120:sg7"!notes play
goto second
end if
end if
end if
end if
end if
next t
if button_pressed("restart") then goto restart
if button_pressed("quit") then
set orientation ort ! end
end if
until 0
end
'==========
updateboard:
'==========
for s=1 to grid * grid
'only update non block buttons
if bv$(s)<>x$ then
'define fill color for each button
if bv$(s)="" then
fc(s)=0
else
num=0 'defaults
fc(s)=1
'look left
if instr(bcon$(s), "l") then
peek=1
if bv$(s-grid)=x$ then peek=0
if bv$(s-grid)="" then peek=0
if peek=1 then num=num+1
end if
'look right
if instr(bcon$(s),"r") then
peek=1
if bv$(s+grid)=x$ then peek=0
if bv$(s+grid)="" then peek=0
if peek=1 then num=num+1
end if
'look up
if instr(bcon$(s),"u") then
peek=1
if bv$(s-1)=x$ then peek=0
if bv$(s-1)="" then peek=0
if peek=1 then num=num+1
end if
'look down
if instr(bcon$(s),"u") then
peek=1
if bv$(s+1)=x$ then peek=0
if bv$(s+1)="" then peek=0
if peek=1 then num=num+1
end if
if num=val(bv$(s)) then fc(s)=3 'green
if num>val(bv$(s)) then fc(s)=2 'red
end if
'finally draw the button
if fc(s)=0 then fill color 1,1,1 'blank
if fc(s)=1 then fill color .9,.8,.6 'orange
if fc(s)=2 then fill color 1,.2,.2 'red
if fc(s)=3 then fill color .2,1,.2 'green
button str$(s) text swap$(s) at bx(s),by(s) size size,size
end if
next s
'check if all are green
done=1 'default is done
for s=1 to grid * grid
'only check number buttons
if bv$(s)<>x$ then
if bv$(s)<>"" then
if fc(s)<>3 then
done=0 !break
end if
end if
end if
next s
if done = 1 then
level=level+1
notes set "7:s(c3eg)(e4cg3)(g4ec)(c5g4e)"
notes play
pause 1
fill color 0,1,0
for i=1 to grid*grid
if bv$(i)=x$ then goto skipp
if bv$(i)="" then goto skipp
button str$(i) text chr$(9989) at bx(i),by(i) size size,size
pause .05
skipp:
next i
pause 1
if level>maxlevel then end 'all levels done? end
goto restart
end if
return
setlevel:
if level=1 then
bv$(23)="1"!bv$(32)=""
bv$(41)=""!bv$(50)="1"
end if
if level=2 then
bv$(23)="1"!bv$(32)=""!bv$(41)="4"!bv$(40)=""!bv$(39)="1"
bv$(42)=""!bv$(43)="1"!bv$(50)=""!bv$(59)="1"
end if
if level=3 then
bv$(31)="1"!bv$(32)=""!bv$(33)="2"
bv$(40)="1"!bv$(41)="2"!bv$(42)=""
bv$(49)=""!bv$(50)=""!bv$(51)=""
end if
if level=4 then
bv$(31)="2"!bv$(32)="1"!bv$(33)=""
bv$(40)=""!bv$(41)="2"!bv$(42)=""
bv$(49)="2"!bv$(50)="1"!bv$(51)=""
end if
if level=5 then
bv$(39)="2"!bv$(40)="1"!bv$(41)=""!bv$(42)="1"!bv$(43)=""
bv$(31)=""!bv$(32)="1"!bv$(33)=""
bv$(23)="3"!bv$(49)=""!bv$(50)="1"!bv$(51)=""!bv$(59)="3"
end if
if level=6 then
bv$(13)="1"!bv$(14)="2"!bv$(15)=""
bv$(22)=""!bv$(23)="4"!bv$(24)="1"
bv$(31)=""!bv$(32)="1"!bv$(33)=""
bv$(40)="1"!bv$(41)="4"!bv$(42)="1"
bv$(49)=""!bv$(50)="1"!bv$(51)=""
bv$(58)=""!bv$(59)="4"!bv$(60)="1"
bv$(67)="1"!bv$(68)="2"!bv$(69)=""
bm(23)=1!bm(41)=1!bm(59)=1
end if
if level=7 then
bv$(21)=""!bv$(22)="2"!bv$(23)="2"!bv$(24)=""
bv$(30)="2"!bv$(31)="3"!bv$(32)=""!bv$(33)=""
bv$(39)=""!bv$(40)="2"!bv$(41)="2"!bv$(42)="2"!bv$(43)=""
bv$(49)=""!bv$(50)=""!bv$(51)="3"!bv$(52)="2"
bv$(58)=""!bv$(59)="2"!bv$(60)="2"!bv$(61)=""
bm(31)=1!bm(41)=1!bm(51)=1
end if
if level=8 then
bv$(11)="2"!bv$(12)="2"!bv$(13)="1"
bv$(20)=""!bv$(21)="4"!bv$(22)="1"
bv$(29)=""!bv$(30)=""!bv$(31)=""
bv$(38)=""!bv$(39)="1"!bv$(40)="2"!bv$(41)=""!bv$(42)=""
bv$(47)=""!bv$(48)=""!bv$(49)=""!bv$(50)=""!bv$(51)=""
bv$(56)=""!bv$(57)=""!bv$(58)="2"!bv$(59)="2"!bv$(60)=""
bv$(67)="2"!bv$(68)="1"!bv$(69)="2"
bm(21)=1!bm(40)=1!bm(59)=1
end if
if level=9 then
bv$(23)="2"!bv$(24)=""!bv$(31)=""!bv$(32)="2"!bv$(33)=""
bv$(40)="2"!bv$(41)="4"!bv$(42)="2"
bv$(49)="3"!bv$(50)="1"!bv$(51)="2"
bv$(58)="4"!bv$(59)="2"!bv$(60)="2"
bm(41)=1!bm(49)=1!bm(51)=1
end if
if level=10 then
bv$(13)="1"!bv$(14)="4"!bv$(15)="2"
bv$(21)=""!bv$(22)="3"!bv$(23)="3"!bv$(24)=""!bv$(25)=""
bv$(30)=""!bv$(31)=""!bv$(32)="2"!bv$(33)=""!bv$(34)=""
bv$(40)="2"!bv$(41)="1"!bv$(42)=""
bv$(48)=""!bv$(49)=""!bv$(50)="2"!bv$(51)=""!bv$(52)=""
bv$(57)=""!bv$(58)="1"!bv$(59)="1"!bv$(60)=""!bv$(61)=""
bv$(67)="1"!bv$(68)="1"!bv$(69)="2"
bm(22)=1!bm(32)=1!bm(50)=1
end if
if level=11 then
bv$(21)="1"!bv$(22)="0"!bv$(23)="3"!bv$(24)="2"!bv$(25)="3"
bv$(30)=""!bv$(31)=""!bv$(32)="2"!bv$(33)=""!bv$(34)=""
bv$(39)=""!bv$(40)=""!bv$(41)="1"!bv$(42)=""!bv$(43)=""
bv$(48)=""!bv$(49)=""!bv$(50)="3"!bv$(51)=""!bv$(52)=""
bv$(57)="2"!bv$(58)="2"!bv$(59)="3"!bv$(60)="0"!bv$(61)="2"
end if
if level=12 then
bv$(22)="0"!bv$(23)="0"!bv$(24)="0"
bv$(31)="0"!bv$(32)=""!bv$(33)=""
bv$(40)=""!bv$(41)=""!bv$(42)=""
bv$(49)=""!bv$(50)=""!bv$(51)="0"
bv$(58)="0"!bv$(59)="0"!bv$(60)="0"
end if
if level=13 then
bv$(22)=""!bv$(23)=""!bv$(24)=""!bv$(25)=""
bv$(30)="0"!bv$(31)=""!bv$(32)="1"!bv$(33)="2"!bv$(34)="3"
bv$(39)="0"!bv$(40)=""!bv$(41)="1"!bv$(42)="2"!bv$(43)="3"
bv$(48)="0"!bv$(49)=""!bv$(50)="1"!bv$(51)="2"!bv$(52)="3"
bv$(58)=""!bv$(59)=""!bv$(60)=""!bv$(61)=""
end if
if level=14 then
bv$(13)="1"!bv$(15)="2"
bv$(22)="0"!bv$(24)="0"
bv$(30)=""!bv$(31)="3"!bv$(32)="3"!bv$(33)="1"!bv$(34)=""
bv$(39)=""!bv$(40)="2"!bv$(41)="3"!bv$(42)="2"!bv$(43)=""
bv$(48)=""!bv$(49)=""!bv$(50)="3"!bv$(51)=""!bv$(52)=""
bv$(57)=""!bv$(58)=""!bv$(59)=""!bv$(60)=""!bv$(61)=""
bv$(66)="3"!bv$(67)="2"!bv$(68)="2"!bv$(69)="3"!bv$(70)=""
bm(32)=1!bm(41)=1!bm(50)=1
end if
if level=15 then
bv$(12)="2"!bv$(13)=""!bv$(14)="2"!bv$(15)=""!bv$(16)="2"
bv$(21)=""!bv$(22)="2"!bv$(23)=""!bv$(24)="2"!bv$(25)=""
bv$(30)="2"!bv$(31)=""!bv$(32)="0"!bv$(33)=""!bv$(34)="2"
bv$(39)="2"!bv$(40)="0"!bv$(41)="0"!bv$(42)="0"!bv$(43)="2"
bv$(48)="2"!bv$(49)=""!bv$(50)="0"!bv$(51)=""!bv$(52)="2"
bv$(57)=""!bv$(58)="2"!bv$(59)=""!bv$(60)="2"!bv$(61)=""
bv$(66)="2"!bv$(67)=""!bv$(68)="2"!bv$(69)=""!bv$(70)="2"
bm(41)=1
end if
return
def swap$(n)
a$=""
if .bv$(n)="0" then
a$=chr$(9675)!if .bm(n)=1 then a$=chr$(9679)
end if
if .bv$(n)= "1" then
a$=chr$(10112)!if .bm(n)=1 then a$=chr$(10122)
end if
if .bv$(n)= "2" then
a$=chr$(10113)!if .bm(n)=1 then a$=chr$(10123)
end if
if .bv$(n)= "3" then
a$=chr$(10114)!if .bm(n)=1 then a$=chr$(10124)
end if
if .bv$(n)= "4" then
a$=chr$(10115)!if .bm(n)=1 then a$=chr$(10125)
end if
swap$=a$
end def