04-10-2009, 06:22 PM
Hi Boriel,
I wrote the following little game (which is supposed to become a "Jewel Quest" clone one day :-):
The Problem is:
It works with Optimisation Level 2, but on Optimisation level 3 it throws "Unexpected tokem IX [IX] at line 1208"
I wrote the following little game (which is supposed to become a "Jewel Quest" clone one day :-):
Code:
dim a as uinteger
dim x as ubyte
dim y as ubyte
dim solv as ubyte
dim posx as uinteger
dim posy as uinteger
sub field(x as uinteger,y as uinteger,obj as ubyte)
dim adr as uinteger
dim adr1 as uinteger
dim col as ubyte
adr=22528+x*3+y*96
adr1=50064+x+y*8
col=56
if obj=0 then col=2:end if
if obj=1 then col=3:end if
if obj=2 then col=4:end if
if obj=3 then col=5:end if
if obj=4 then col=6:end if
if obj=5 then col=7:end if
if obj=64 then col=48:end if
if peek adr1 then col=col+8:end if
poke adr,col:poke adr+1,col:poke adr+2,col
poke adr+32,col:poke adr+33,col:poke adr+34,col
poke adr+64,col:poke adr+65,col:poke adr+66,col
end sub
sub DisplayField()
adr=50000
for y=0 to 7
for x=0 to 7
a=peek(adr)
adr=adr+1
field(x,y,a)
next x
next y
end sub
sub ClearField(x as uinteger,y as uinteger)
poke 50000+x+y*8,64
poke 50064+x+y*8,1
end sub
function GetFieldObj(x as uinteger,y as uinteger) as ubyte
return peek (50000+x+y*8)
end function
sub SetFieldObj(x as uinteger,y as uinteger,obj as ubyte)
poke 50000+x+y*8,obj
end sub
function CheckBoard(x as integer,y as integer)
solved=0
dim current as ubyte
dim c1 as ubyte
dim c2 as ubyte
current=GetFieldObj(x,y)
c1=GetFieldObj(x-1,y)
c2=GetFieldObj(x-2,y)
if x>3 then
if c1=current and c2=current and GetFieldObj(x-3,y)=current and GetFieldObj(x-4,y)=current then for a=0 to 4:ClearField(x-a,y):next a:solved=solved+1:end if
end if
if x>2 then
if c1=current and c2=current and GetFieldObj(x-3,y)=current then for a=0 to 3:ClearField(x-a,y):next a:solved=solved+1:end if
end if
if x>1 then
if c1=current and c2=current then for a=0 to 2:ClearField(x-a,y):solved=solved+1:next a:end if
end if
c1=GetFieldObj(x,y-1)
c2=GetFieldObj(x,y-2)
if y>3 then
if c1=current and c2=current and GetFieldObj(x,y-3)=current and GetFieldObj(x,y-4)=current then for a=0 to 4:ClearField(x,y-a):next a:solved=solved+1:end if
end if
if y>2 then
if c1=current and c2=current and GetFieldObj(x,y-3)=current then for a=0 to 3:ClearField(x,y-a):next a:solved=solved+1:end if
end if
if y>1 then
if c1=current and c2=current then for a=0 to 2:ClearField(x,y-a):solved=solved+1:next a:end if
end if
return solved
end function
sub fieldupdate()
for x=0 to 7
for y=0 to 7
if GetFieldObj(x,y)=64 then
ypos=y
while ypos>0
SetFieldObj(x,ypos,GetFieldObj(x,ypos-1))
ypos=ypos-1
end while
SetFieldObj(x,0,rnd*5)
end if
next y
next x
end sub
function SolveField() as ubyte
solv=0
for y=0 to 7
for x=0 to 7
solv=solv+CheckBoard(x,y)
next x
next y
return solv
end function
sub PutCoin(x as uinteger,y as uinteger)
print at y,x;"\ \..\ "
print at y+1,x;"\ :\::\: "
print at y+2,x;"\ \''\ "
end sub
sub DisplayCursor(x as integer,y as integer,mode as byte)
dim adr as uinteger
dim newcol as ubyte
adr=22528+x*3+y*96
poke 65535,peek adr
asm
ld a,(65535)
and 7
ld (65535),a
end asm
if mode then
poke 65535,(peek 65535)+56
else
adr1=50064+x+y*8
if peek adr1 then
poke 65535,peek 65535+8
end if
end if
newcol=peek 65535
poke adr,newcol
poke adr+1,newcol
poke adr+2,newcol
poke adr+32,newcol
poke adr+33,newcol
poke adr+34,newcol
poke adr+64,newcol
poke adr+65,newcol
poke adr+66,newcol
end sub
randomize
for a=0 to 63
poke 50000+a,rnd*5
poke 50064+a,0
next a
asm
ld hl,50000
ld de,50128
ld bc,64
ldir
end asm
paper 0:ink 7:border 0:cls
'poke 23607,127
'poke 23606,16
print at 2,0;"Controls"
print at 4,0;"1) Keyboard"
print at 5,0;"2) Sinclair Joystick"
controls1:
if inkey$="1" then
up$="q"
dw$="a"
le$="o"
ri$="p"
fi$="m"
goto controls2
end if
if inkey$="2" then
up$="9"
dw$="8"
le$="6"
ri$="7"
fi$="0"
goto controls2
end if
goto controls1
controls2:
cls
for y=0 to 7
for x=0 to 7
PutCoin(x*3,y*3)
next x
next y
posx=4
posy=4
solveboard:
solv=SolveField()
DisplayField()
fieldupdate()
if solv then goto solveboard:end if
controlloop0:
DisplayCursor(posx,posy,1)
for a=0 to 5:pause 1:next a
controlloop1:
if inkey$=up$ and posy>0 then DisplayCursor(posx,posy,0):posy=posy-1:DisplayCursor(posx,posy,1):goto controlloop0:end if
if inkey$=dw$ and posy<7 then DisplayCursor(posx,posy,0):posy=posy+1:DisplayCursor(posx,posy,1):goto controlloop0:end if
if inkey$=le$ and posx>0 then DisplayCursor(posx,posy,0):posx=posx-1:DisplayCursor(posx,posy,1):goto controlloop0:end if
if inkey$=ri$ and posx<7 then DisplayCursor(posx,posy,0):posx=posx+1:DisplayCursor(posx,posy,1):goto controlloop0:end if
if inkey$=fi$ then gosub activate:end if
goto controlloop1
activate:
asm
ld hl,50000
ld de,50128
ld bc,64
ldir
end asm
if inkey$=up$ and posy>0 then
adr=50000+posx+posy*8
a=peek adr
b=peek (adr-8)
poke adr,b
poke adr-8,a
gosub check
return
end if
if inkey$=dw$ and posy<7 then
adr=50000+posx+posy*8
a=peek adr
b=peek (adr+8)
poke adr,b
poke adr+8,a
gosub check
return
end if
if inkey$=le$ and posx>0 then
adr=50000+posx+posy*8
a=peek adr
b=peek (adr-1)
poke adr,b
poke adr-1,a
gosub check
return
end if
if inkey$=ri$ and posx>0 then
adr=50000+posx+posy*8
a=peek adr
b=peek (adr+1)
poke adr,b
poke adr+1,a
gosub check
return
end if
complete=0
for a=0 to 63
if peek(50064+a) then complete=complete+1:end if
next a
if complete=64 then
goto won
end if
goto activate
check:
solv=SolveField()
if solv then
DisplayField()
goto solveboard
else
asm
ld hl,50128
ld de,50000
ld bc,64
ldir
end asm
goto controlloop0
end if
return
won:
cls
print "Congratulations"
The Problem is:
It works with Optimisation Level 2, but on Optimisation level 3 it throws "Unexpected tokem IX [IX] at line 1208"
------------------------------------------------------------
http://lcd-one.da.ru redirector is dead
Visit my http://members.inode.at/838331/index.html home page!
http://lcd-one.da.ru redirector is dead
Visit my http://members.inode.at/838331/index.html home page!