' Magic24 by Peter Wirbelauer
INCLUDE "sbsw.inc"
SPLITA STRING(64,"0") BY "" TO Map
SPLITA STRING(26,"0") BY "" TO Buf
num = 0
xm = 0
ym = 0
ibx = 0
iax = 0
Ras = 0
bDir = 0
x1 = 0
y1 = 0
z1 = 0
a = 0
move = 0
' ********
SUB MoveBloc
' ********
IF Ras = 0 THEN EXIT SUB
IF bDir = 1 THEN
SW_DrawBmp num, x1, y1, 64, 64, iax
x1 += 2
z1 += 2
IF z1 = 64 THEN
Ras = 0
z1 = 0
x1 = x1 / 64
y1 = y1 / 64
ibx = y1 * 5 + x1
Map[ibx] = iax
END IF
ELSE IF bDir = 2 THEN
SW_DrawBmp num, x1, y1, 64, 64, iax
x1 -= 2
z1 += 2
IF z1 = 64 THEN
Ras = 0
z1 = 0
x1 = x1 / 64
y1 = y1 / 64
ibx = y1 * 5 + x1
Map[ibx] = iax
END IF
ELSEIF bDir = 3 THEN
SW_DrawBmp num, x1, y1, 64, 64, iax
y1 -= 2
z1 += 2
IF z1 = 64 THEN
Ras = 0
z1 = 0
x1 = x1 / 64
y1 = y1 / 64
ibx = y1 * 5 + x1
Map[ibx] = iax
END IF
ELSE IF bDir = 4 THEN
SW_DrawBmp num, x1, y1, 64, 64, iax
y1 += 2
z1 += 2
IF z1 = 64 THEN
Ras = 0
z1 =0
x1 = x1 / 64
y1 = y1 / 64
ibx = y1 * 5 + x1
Map[ibx] = iax
END IF
END IF
END SUB
' ******
SUB IsBloc
' ******
IF Ras > 0 THEN EXIT SUB
xm = FIX(SW_xMouse() / 64)
ym = FIX(SW_yMouse() / 64)
ibx = ym * 5 + xm
IF SW_MouseButton() = 1 THEN
iax = Map[ibx]
IF iax = 0 THEN EXIT SUB
IF Map[ibx+1] = 0 THEN
Ras = 1
bDir = 1
Map[ibx] = 0
x1 = xm * 64
y1 = ym * 64
SW_PlayWav w2
move += 1
ELSE IF Map[ibx-1] = 0 AND xm > 0 THEN
Ras = 1
bDir = 2
Map[ibx] = 0
x1 = xm * 64
y1 = ym * 64
SW_PlayWav w2
move += 1
ELSE IF Map[ibx - 5] = 0 AND ym > 0 THEN
Ras = 1
bDir = 3
Map[ibx] = 0
x1 = xm * 64
y1 = ym * 64
SW_PlayWav w2
move += 1
ELSE IF Map[ibx+5] = 0 THEN
Ras = 1
bDir = 4
Map[ibx] = 0
x1 = xm * 64
y1 = ym * 64
SW_PlayWav w2
move += 1
END IF
END IF
END SUB
' *******
SUB ShowMap
' *******
LOCAL px, py, pz, pa
px = 0
py = 0
pz = 0
pa = 0
FOR py = 0 TO 4
FOR px = 0 TO 4
pa = py * 5 + px
pz = Map[pa]
SW_DrawBmp num, px * 64, py * 64, 64, 64, pz
NEXT
NEXT
END SUB
' ******
FUNCTION Buffer(rd)
' ******
LOCAL ix
ix = 0
WHILE ix < 24
IF Buf[ix] = rd THEN
Buffer = 1
EXIT FUNCTION
END IF
ix += 1
WEND
ix = 0
WHILE ix < 24
IF Buf[ix] = 0 THEN
Buf[ix] = rd
Buffer = 0
EXIT FUNCTION
END IF
ix += 1
WEND
Buffer = 0
END FUNCTION
' *****
SUB Start
' *****
LOCAL pa, px, pz
pa = 0
px = 0
pz = 0
FOR pa = 0 TO 64
Map[pa] = 255
NEXT
move = 0
Ras = 0
z1 = 0
a = 0
FOR pa = 0 TO 24
Buf[pa] = 0
Map[pa] = 0
NEXT
WHILE px < 24
pa = SW_Rnd(1,24)
pz = Buffer(pa)
IF pz <> 1 THEN
Map[px] = pa
px += 1
END IF
WEND
END SUB
' *****
SUB Ready
' *****
LOCAL ix
IF a = 1 THEN EXIT SUB
FOR ix = 0 TO 23
IF Map[ix] <> ix + 1 THEN EXIT SUB
NEXT
SW_PlayWav w1
a = 1
END SUB
' ******
' MAIN *
' ******
SW_Window 320, 350, 1
SW_SetFPS 60
SW_SetCaption "ScriptBasic Magic 24"
SW_SetFont 16, 38, bold, ""
num = SW_LoadBmp("media/blocks.bmp", 25)
w1 = "media/o23.wav"
w2 = "media/clic.wav"
Start
WHILE SW_Key(27) = 0
SW_Cls 0
ShowMap
IsBloc
MoveBloc
Ready
IF a = 1 THEN
SW_SetText 16, 100, " YOU GOT IT ", SW_RGB(255,255,255)
SW_SetText 16, 140, " PRESS SPACE BAR", SW_RGB(255,255,255)
IF SW_Key(32) THEN Start()
END IF
SW_SetText 100, 320, "MOVES " & move, SW_RGB(255,255,255)
SW_Sync
WEND
SW_Quit
FUNCTION test(arg)
' not doing anything
END FUNCTION
a = 0
a = test(5)
PRINT a,"\n"
IF a = 0 THEN PRINT "This should never print\n"
IF a <> 0 THEN PRINT "undef IS <> 0 in SB\n"
End Sub and End Function could be replaced with " END"
SUB test(arg)
test = arg +1
END SUB
PRINT test(5),"\n"