312 lines
8.2 KiB
Plaintext
Executable File
312 lines
8.2 KiB
Plaintext
Executable File
#!yab
|
|
|
|
dir$=attribute get$ "",""
|
|
dir$=dir$+"/"
|
|
|
|
|
|
doc Simple game example
|
|
doc based on the popular Sokoban
|
|
doc graphics taken from Rocks'n'Diamonds
|
|
|
|
|
|
// Initialize the window, load the sprites and put up the canvas
|
|
window open 100,100 to 484,484, "Win", "Simple Sokoban Example"
|
|
window set "Win", "flags", "not-zoomable, not-h-resizable, not-v-resizable"
|
|
|
|
bitmap 32,32, "wall"
|
|
err = draw image 0,0 to 31,31, dir$+"img/wall.png", "wall"
|
|
bitmap 32,32, "front1"
|
|
err = err + draw image 0,0 to 31,31, dir$+"img/front.png", "front1"
|
|
bitmap 32,32, "bulb"
|
|
err = err + draw image 0,0 to 31,31, dir$+"img/bulb.png", "bulb"
|
|
bitmap 32,32, "target"
|
|
err = err + draw image 0,0 to 31,31, dir$+"img/target.png", "target"
|
|
bitmap 32,32, "final"
|
|
err = err + draw image 0,0 to 31,31, dir$+"img/final.png", "final"
|
|
bitmap 32,32, "background"
|
|
draw set "highcolor", 0,0,0, "background"
|
|
draw rect 0,0 to 31,31, "background"
|
|
|
|
if(err>0) then
|
|
alert "Could not load images", "Ok", "stop"
|
|
window close "Win"
|
|
exit(1)
|
|
endif
|
|
|
|
option set "Win", "focus", true
|
|
|
|
canvas 0,0 to 384,384, "Canvas", "Win"
|
|
|
|
draw set "highcolor", 0,0,0, "Canvas"
|
|
draw rect 0,0 to 384,384, "Canvas"
|
|
|
|
// Read in the demo level and show it
|
|
dim levelline$(12)
|
|
for i=1 to 12
|
|
read levelline$(i)
|
|
for j = 1 to 12
|
|
switch(mid$(levelline$(i), j, 1))
|
|
case " "
|
|
draw bitmap x,y, "background", "copy", "Canvas"
|
|
break
|
|
case "w"
|
|
draw bitmap x,y, "wall", "copy", "Canvas"
|
|
break
|
|
case "b"
|
|
draw bitmap x,y, "bulb", "copy", "Canvas"
|
|
break
|
|
case "t"
|
|
draw bitmap x,y, "target", "copy", "Canvas"
|
|
break
|
|
case "s"
|
|
draw bitmap x,y, "front1", "alpha", "Canvas"
|
|
mapx = j
|
|
mapy = i
|
|
mid$(levelline$(i), j, 1) = " "
|
|
break
|
|
end switch
|
|
x = x + 32
|
|
next j
|
|
x = 0
|
|
y = y + 32
|
|
next i
|
|
|
|
playerx = (mapx-1)*32
|
|
playery = (mapy-1)*32
|
|
|
|
// soundplay "rhythmloop.wav", true
|
|
|
|
// handle the movements
|
|
while(not quitting)
|
|
key$ = keyboard message$("Win")
|
|
switch(key$)
|
|
case "down"
|
|
if(instr(" t", mid$(levelline$(mapy+1), mapx, 1))) then
|
|
// soundplay "base.wav", false
|
|
WalkDown()
|
|
elseif(instr("bf", mid$(levelline$(mapy+1), mapx, 1)) and instr(" t", mid$(levelline$(mapy+2), mapx,1))) then
|
|
PushDown()
|
|
endif
|
|
sleep 0.10
|
|
break
|
|
case "up"
|
|
if(instr(" t", mid$(levelline$(mapy-1), mapx, 1))) then
|
|
// soundplay "base.wav", false
|
|
WalkUp()
|
|
elseif(instr("bf", mid$(levelline$(mapy-1), mapx, 1)) and instr(" t", mid$(levelline$(mapy-2), mapx,1))) then
|
|
PushUp()
|
|
endif
|
|
sleep 0.10
|
|
break
|
|
case "left"
|
|
if(instr(" t", mid$(levelline$(mapy), mapx-1, 1))) then
|
|
// soundplay "base.wav", false
|
|
WalkLeft()
|
|
elseif(instr("bf", mid$(levelline$(mapy), mapx-1, 1)) and instr(" t", mid$(levelline$(mapy), mapx-2,1))) then
|
|
PushLeft()
|
|
endif
|
|
sleep 0.10
|
|
break
|
|
case "right"
|
|
if(instr(" t", mid$(levelline$(mapy), mapx+1, 1))) then
|
|
// soundplay "base.wav", false
|
|
WalkRight()
|
|
elseif(instr("bf", mid$(levelline$(mapy), mapx+1, 1)) and instr(" t", mid$(levelline$(mapy), mapx+2,1))) then
|
|
PushRight()
|
|
endif
|
|
sleep 0.10
|
|
break
|
|
case "esc"
|
|
quitting = true
|
|
break
|
|
end switch
|
|
m$ = message$
|
|
if(m$ = "Win:_QuitRequested|" or m$ = "_QuitRequested") quitting = true
|
|
wend
|
|
|
|
window close "Win"
|
|
|
|
sub WalkDown()
|
|
mapy = mapy + 1
|
|
playery = playery + 32
|
|
draw bitmap playerx, playery, "front1","alpha", "Canvas"
|
|
if(mid$(levelline$(mapy-1), mapx,1) = " ") then
|
|
draw bitmap playerx, playery-32, "background","copy", "Canvas"
|
|
elseif(mid$(levelline$(mapy-1), mapx,1) = "t") then
|
|
draw bitmap playerx, playery-32, "target","copy", "Canvas"
|
|
elseif(mid$(levelline$(mapy-1), mapx,1) = "f") then
|
|
draw bitmap playerx, playery-32, "final","copy", "Canvas"
|
|
endif
|
|
return
|
|
end sub
|
|
|
|
sub WalkUp()
|
|
mapy = mapy - 1
|
|
playery = playery - 32
|
|
draw bitmap playerx, playery, "front1","alpha", "Canvas"
|
|
if(mid$(levelline$(mapy+1), mapx,1) = " ") then
|
|
draw bitmap playerx, playery+32, "background","copy", "Canvas"
|
|
elseif(mid$(levelline$(mapy+1), mapx,1) = "t") then
|
|
draw bitmap playerx, playery+32, "target","copy", "Canvas"
|
|
elseif(mid$(levelline$(mapy+1), mapx,1) = "f") then
|
|
draw bitmap playerx, playery+32, "final","copy", "Canvas"
|
|
endif
|
|
return
|
|
end sub
|
|
|
|
sub WalkLeft()
|
|
mapx = mapx - 1
|
|
playerx = playerx - 32
|
|
draw bitmap playerx, playery, "front1","alpha", "Canvas"
|
|
if(mid$(levelline$(mapy), mapx+1,1) = " ") then
|
|
draw bitmap playerx+32, playery, "background","copy", "Canvas"
|
|
elseif(mid$(levelline$(mapy), mapx+1,1) = "t") then
|
|
draw bitmap playerx+32, playery, "target","copy", "Canvas"
|
|
elseif(mid$(levelline$(mapy), mapx+1,1) = "f") then
|
|
draw bitmap playerx+32, playery, "final","copy", "Canvas"
|
|
endif
|
|
return
|
|
end sub
|
|
|
|
sub WalkRight()
|
|
mapx = mapx + 1
|
|
playerx = playerx + 32
|
|
draw bitmap playerx, playery, "front1","alpha", "Canvas"
|
|
if(mid$(levelline$(mapy), mapx-1,1) = " ") then
|
|
draw bitmap playerx-32, playery, "background","copy", "Canvas"
|
|
elseif(mid$(levelline$(mapy), mapx-1,1) = "t") then
|
|
draw bitmap playerx-32, playery, "target","copy", "Canvas"
|
|
elseif(mid$(levelline$(mapy), mapx-1,1) = "f") then
|
|
draw bitmap playerx-32, playery, "final","copy", "Canvas"
|
|
endif
|
|
return
|
|
end sub
|
|
|
|
sub PushDown()
|
|
local t$
|
|
|
|
t$ = mid$(levelline$(mapy+1), mapx, 1)
|
|
if(t$ = "b") then
|
|
mid$(levelline$(mapy+1), mapx, 1) = " "
|
|
draw bitmap playerx,playery+32, "background", "copy", "Canvas"
|
|
else
|
|
mid$(levelline$(mapy+1), mapx, 1) = "t"
|
|
draw bitmap playerx,playery+32, "target", "copy", "Canvas"
|
|
endif
|
|
t$ = mid$(levelline$(mapy+2), mapx, 1)
|
|
if(t$ = " ") then
|
|
mid$(levelline$(mapy+2), mapx, 1) = "b"
|
|
draw bitmap playerx,playery+64, "bulb", "copy", "Canvas"
|
|
// soundplay "roehr.wav", false
|
|
else
|
|
mid$(levelline$(mapy+2), mapx, 1) = "f"
|
|
draw bitmap playerx,playery+64, "final", "copy", "Canvas"
|
|
// soundplay "pong.wav", false
|
|
endif
|
|
WalkDown()
|
|
CheckFinished()
|
|
return
|
|
end sub
|
|
|
|
sub PushUp()
|
|
local t$
|
|
|
|
t$ = mid$(levelline$(mapy-1), mapx, 1)
|
|
if(t$ = "b") then
|
|
mid$(levelline$(mapy-1), mapx, 1) = " "
|
|
draw bitmap playerx,playery-32, "background", "copy", "Canvas"
|
|
else
|
|
mid$(levelline$(mapy-1), mapx, 1) = "t"
|
|
draw bitmap playerx,playery-32, "target", "copy", "Canvas"
|
|
endif
|
|
t$ = mid$(levelline$(mapy-2), mapx, 1)
|
|
if(t$ = " ") then
|
|
mid$(levelline$(mapy-2), mapx, 1) = "b"
|
|
draw bitmap playerx,playery-64, "bulb", "copy", "Canvas"
|
|
// soundplay "roehr.wav", false
|
|
else
|
|
mid$(levelline$(mapy-2), mapx, 1) = "f"
|
|
draw bitmap playerx,playery-64, "final", "copy", "Canvas"
|
|
// soundplay "pong.wav", false
|
|
endif
|
|
WalkUp()
|
|
CheckFinished()
|
|
return
|
|
end sub
|
|
|
|
sub PushLeft()
|
|
local t$
|
|
|
|
t$ = mid$(levelline$(mapy), mapx-1, 1)
|
|
if(t$ = "b") then
|
|
mid$(levelline$(mapy), mapx-1, 1) = " "
|
|
draw bitmap playerx-32,playery, "background", "copy", "Canvas"
|
|
else
|
|
mid$(levelline$(mapy), mapx-1, 1) = "t"
|
|
draw bitmap playerx-32,playery, "target", "copy", "Canvas"
|
|
endif
|
|
t$ = mid$(levelline$(mapy), mapx-2, 1)
|
|
if(t$ = " ") then
|
|
mid$(levelline$(mapy), mapx-2, 1) = "b"
|
|
draw bitmap playerx-64,playery, "bulb", "copy", "Canvas"
|
|
// soundplay "roehr.wav", false
|
|
else
|
|
mid$(levelline$(mapy), mapx-2, 1) = "f"
|
|
draw bitmap playerx-64,playery, "final", "copy", "Canvas"
|
|
// soundplay "pong.wav", false
|
|
endif
|
|
WalkLeft()
|
|
CheckFinished()
|
|
return
|
|
end sub
|
|
|
|
sub PushRight()
|
|
local t$
|
|
|
|
t$ = mid$(levelline$(mapy), mapx+1, 1)
|
|
if(t$ = "b") then
|
|
mid$(levelline$(mapy), mapx+1, 1) = " "
|
|
draw bitmap playerx+32,playery, "background", "copy", "Canvas"
|
|
else
|
|
mid$(levelline$(mapy), mapx+1, 1) = "t"
|
|
draw bitmap playerx+32,playery, "target", "copy", "Canvas"
|
|
endif
|
|
t$ = mid$(levelline$(mapy), mapx+2, 1)
|
|
if(t$ = " ") then
|
|
mid$(levelline$(mapy), mapx+2, 1) = "b"
|
|
draw bitmap playerx+64,playery, "bulb", "copy", "Canvas"
|
|
// soundplay "roehr.wav", false
|
|
else
|
|
mid$(levelline$(mapy), mapx+2, 1) = "f"
|
|
draw bitmap playerx+64,playery, "final", "copy", "Canvas"
|
|
// soundplay "pong.wav", false
|
|
endif
|
|
WalkRight()
|
|
CheckFinished()
|
|
return
|
|
end sub
|
|
|
|
sub CheckFinished()
|
|
local i
|
|
for i = 1 to 12
|
|
if(instr(levelline$(i), "b")) return
|
|
next i
|
|
// soundplay "halloffame.wav", false
|
|
alert "Solved! This was too easy ;)", "Ok", "info"
|
|
quitting = true
|
|
return
|
|
end sub
|
|
|
|
data " ww "
|
|
data "wwwwww www "
|
|
data "wtt w wwsww"
|
|
data "wtt www w"
|
|
data "wtt bb w"
|
|
data "wtt w w b w"
|
|
data "wttwww w b w"
|
|
data "wwww b wb w"
|
|
data " w bw b w"
|
|
data " w b b w"
|
|
data " w ww w"
|
|
data " wwwwwwwww"
|