Das ist
der Basic-Code von einem kleinen Spiel für den AtariST, das ich irgendwann
1990(?) oder so geschrieben habe. Die Assembler-Routinen stecken in den
INLINE's, die sind primär für die Beschleunigung von dauernd
wiederkehrenden Vorgängen gedacht.
Leider ist das wenig kommentiert, vielleicht findet's
der eine oder andere trotzdem ganz lustig.
Hermann Ludwig
l_zahl%=5
DIM tief%(60),breit%(60),lx%(60),ly%(60),schmal|(60),hoch|(60)
DIM alt_tief%(60),alt_breit%(60)
DIM aendern|(60),hinher|(60),bew|(60),alt_bew|(60)
DIM lalt%(60),lz%(60),laufweg|(60),lxt%(60),gleich%(60)
'
' Zuendeln...GFA
'
raster|=1
init
PRINT CHR$(27);"p"; ! invers
'
' ~SHEL_READ(programmname$,commando$)
' programmlaufwerk|=GEMDOS(25)+1
' programmordner$=DIR$(programmlaufwerk|)
'
INLINE laeufer3%,600
INLINE akkord%,64
INLINE zisch%,32
INLINE sprite4z%,600
INLINE ding2%,150
INLINE treffer2%,600
INLINE verschw%,100
INLINE treffer%,150
INLINE zeichnung%,32000
INLINE nomen%,90
INLINE masken%,1000
'
masken
innen%=masken%+304
'
HIDEM
maus|=1
'
pos1%=RND(0)*600+20
pos2%=RND(0)*360+20
FOR sch&=1 TO l_zahl%
tief%(sch&)=pos1%
breit%(sch&)=pos2%
NEXT sch&
'
spr%=0
'
FOR verweil%=1 TO 300 ! 30
FOR sch&=1 TO l_zahl%
IF laufweg|(sch&)=0
laeufer(sch&)
ENDIF
' INC mas
ADD mas,0.5
IF mas=8
blink%=8
ELSE IF mas=16
blink%=16
ELSE IF mas=24
blink%=24
ELSE IF mas>=32
CLR mas
CLR blink%
ENDIF
NEXT sch&
NEXT verweil%
'
x%=200
y%=200
zeit%=TIMER
'
DO
'
IF zweite_runde|=0
FOR sch&=1 TO l_zahl%
IF laufweg|(sch&)=0
laeufer(sch&)
ENDIF
ADD mas,4
IF mas=80
blink%=8
ELSE IF mas=160
blink%=16
ELSE IF mas=240
blink%=24
ELSE IF mas>=320
CLR mas
CLR blink%
ENDIF
NEXT sch&
ENDIF
'
' ***************************************
IF count%>dif_count%
PRINT AT(39,1);USING "###",count%-dif_count%
ENDIF
dif_count%=count%
IF TIMER-zeit%>=80+l_zahl%/4*80
SUB count%,2
zeit%=zeit%+80
count$=SPACE$(5)
RSET count$=STR$(count%)
TEXT 3*8+8,13,count$
IF count%<50
~XBIOS(32,L:akkord%)
ENDIF
IF count%>=50 AND count%<=65
WAVE 0
ENDIF
ENDIF
EXIT IF count%<=0
'
'
ADD feld%(ty1%,tx1%),5
ADD feld%(ty1%,tx2%),5
ADD feld%(ty1%,tx3%),5
ADD feld%(ty1%,tx4%),5
ADD feld%(ty2%,tx1%),5
ADD feld%(ty2%,tx2%),5
ADD feld%(ty2%,tx3%),5
ADD feld%(ty2%,tx4%),5
'
IF zweite_runde|=0
FOR sch&=1 TO l_zahl%
ADD feld2%(ly%(sch&)/8,lx%(sch&)/8),5
NEXT sch&
'
INC chance%
restaurix%=RND(0)*23+2
restaury%=RND(0)*39+1
IF BTST(chance%,6)
DO
CLR chance%
zfx%=RND(0)*23+2
zfy%=RND(0)*39+1
welche%=RND(0)*5
IF feld%(zfx%,zfy%)=0
feld%(zfx%,zfy%)=100
weiss(zfx%,zfy%)
SELECT welche%
CASE 0,1 ! ein Punkt
CASE 3 ! zwei untereinander
IF zfx%<24
IF feld%(zfx%+1,zfy%)=0
feld%(zfx%+1,zfy%)=100
weiss(zfx%+1,zfy%)
ENDIF
ENDIF
CASE 2 ! zwei diagonal
IF zfx%<24
IF zfy%<39
IF feld%(zfx%+1,zfy%+1)=0
feld%(zfx%+1,zfy%+1)=100
weiss(zfx%+1,zfy%+1)
ENDIF
ENDIF
ENDIF
CASE 4 ! zwei nebeneinander
IF zfy%<39
IF feld%(zfx%,zfy%+1)=0
feld%(zfx%,zfy%+1)=100
weiss(zfx%,zfy%+1)
ENDIF
ENDIF
ENDSELECT
EXIT IF TRUE
ENDIF
LOOP
ENDIF
'
IF feld%(restaurix%,restaury%)=100
feld%(restaurix%,restaury%)=0
rest%=1280*restaurix%+2*restaury%-640
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%,L:V:bild$)
ENDIF
'
FOR sch&=1 TO l_zahl%
SUB feld2%(ly%(sch&)/8,lx%(sch&)/8),5
NEXT sch&
ELSE IF zweite_runde|=1
INC dran%
IF dran%>dinger%
dran%=1
ENDIF
dinglauf(dran%)
ENDIF
'
SUB feld%(ty1%,tx1%),5
SUB feld%(ty1%,tx2%),5
SUB feld%(ty1%,tx3%),5
SUB feld%(ty1%,tx4%),5
SUB feld%(ty2%,tx1%),5
SUB feld%(ty2%,tx2%),5
SUB feld%(ty2%,tx3%),5
SUB feld%(ty2%,tx4%),5
'
tstx%(1)=(x%+7)/16
tstx%(2)=(x%+7+8)/16
tstx%(3)=(x%+7+16)/16
tstx%(4)=(x%+7+24)/16
tsty%(1)=(y%+15)/16
tsty%(2)=(y%+23)/16
'
FOR sch&=1 TO 4
'
x_sch&=tstx%(sch&)
'
IF feld2%(tsty%(1)*2,x_sch&*2)=200
SETMOUSE xsuperalt%,ysuperalt%
x%=xsuperalt%
y%=ysuperalt%
xalt%=xsuperalt%
yalt%=ysuperalt%
ENDIF
IF feld2%(tsty%(2)*2,x_sch&*2)=200
SETMOUSE xsuperalt%,ysuperalt%
x%=xsuperalt%
y%=ysuperalt%
xalt%=xsuperalt%
yalt%=ysuperalt%
ENDIF
'
FOR index&=1 TO 2
'
y_sch&=tsty%(index&)
'
IF feld%(y_sch&,x_sch&)=100
count(10)
'
SETMOUSE xsuperalt%,ysuperalt%
x%=xsuperalt%
y%=ysuperalt%
xalt%=xsuperalt%
yalt%=ysuperalt%
'
treffer_umfeld(y_sch&,x_sch&,1)
'
~C:sprite4z%(zalt%,L:V:bild$,z%,t%,L:masken%+sprite%(spr%),L:masken%+loch%(spr%))
IF count%>dif_count%
PRINT AT(39,1);USING "###",count%-dif_count%
ENDIF
dif_count%=count%
ENDIF
NEXT index&
NEXT sch&
'
IF maus|=1
maus
ELSE
joystick
ENDIF
xsuperalt%=xalt%
ysuperalt%=yalt%
xalt%=x%
yalt%=y%
'
tx1%=(x%+7)/16
tx2%=(x%+7+8)/16
tx3%=(x%+7+16)/16
tx4%=(x%+7+24)/16
ty1%=(y%+15)/16
ty2%=(y%+23)/16
'
t%=x% AND &X1111
z%=y%*80+x%/8
z%=BCLR(z%,0)
IF maus|=1
~C:sprite4z%(zalt%,L:V:bild$,z%,t%,L:masken%+sprite%(spr%),L:masken%+loch%(spr%))
ELSE
VSYNC
~C:sprite4z%(zalt%,L:V:bild$,z%,t%,L:masken%+sprite%(spr%),L:masken%+loch%(spr%))
ENDIF
'
zalt%=z%
LOOP
'
PRINT CHR$(27);"q"; ! normal
' PRINT AT(12,12),count%
WAVE 0
OUT 4,8
END
'
PROCEDURE count(plus&)
count%=count%+plus&
immercount%=MAX(count%,immercount%)
IF INT(immercount%/1000)>glocke%
PRINT AT(4,4);CHR$(7);
glocke%=INT(immercount%/1000)
ENDIF
glocke%=INT(immercount%/1000)
count$=SPACE$(5)
RSET count$=STR$(count%)
TEXT 3*8+8,13,count$
immercount$=SPACE$(5)
RSET immercount$=STR$(immercount%)
TEXT 72*8,13,immercount$
RETURN
'
PROCEDURE maus
wait%=TIMER
diffz%=TIMER-zeit%
WHILE MOUSEX=x% AND MOUSEY=y% AND MOUSEK=0
IF TIMER-wait%>60
PRINT AT(37,1);" PAUSE "
anzeige&=TRUE
ENDIF
IF zweite_runde|=0
FOR sch&=1 TO l_zahl%
IF laufweg|(sch&)=0
laeufer_wartend(sch&)
INC mas
IF mas=80
blink%=8
ELSE IF mas=160
blink%=16
ELSE IF mas=240
blink%=24
ELSE IF mas>=320
CLR mas
CLR blink%
ENDIF
ENDIF
NEXT sch&
ENDIF
a$=INKEY$
SELECT a$
CASE "r","R" !--------------------------------------- Raster
IF raster|=0
raster|=1
bild(bild|)
ELSE
CLR raster|
bild(bild|)
ENDIF
CASE "n","N" !--------------------------------------- neu
PRINT AT(37,1);" NEU ";
anzeige&=TRUE
neu
ERASE laufweg|()
DIM laufweg|(60)
zweite_runde|=0
FOR verweil%=1 TO 300
FOR sch&=1 TO l_zahl%
IF laufweg|(sch&)=0
laeufer(sch&)
ENDIF
INC mas
IF mas=8
blink%=8
ELSE IF mas=16
blink%=16
ELSE IF mas=24
blink%=24
ELSE IF mas>=32
CLR mas
CLR blink%
ENDIF
NEXT sch&
NEXT verweil%
CASE "s","S" !----------------------------------------- Sichern
PRINT AT(37,1);"SICHERN";
' TEXT 36*8+4,13,"SICHERN"
anzeige&=TRUE
aufbewahren
CASE "l","L" !----------------------------------------- Laden
PRINT AT(37,1);" LADEN ";
' TEXT 36*8+4,13," LADEN "
anzeige&=TRUE
aufbau
CASE "c","C" !----------------------------------------- Copyright
copyright
CASE "t" ! -------------------------------------------- feld%-Belegung
FOR eins&=2 TO 24
FOR zwei&=1 TO 39
IF feld%(eins&,zwei&)=200
COLOR 0
BOX zwei&*16,eins&*16-8,zwei&*16+8,eins&*16
ENDIF
NEXT zwei&
NEXT eins&
CASE "2" !-------------------------------------------- zweite Runde
zweite_runde
' l_zahl%=1
CASE "T" !------------------------------------------- feld2%-Belegung
FOR eins&=1 TO 48
FOR zwei&=1 TO 78
IF feld2%(eins&,zwei&)=15
DEFFILL 1,2,8
PBOX zwei&*8,eins&*8-8,zwei&*8+8,eins&*8
ENDIF
NEXT zwei&
NEXT eins&
CASE "q","Q" !-------------------------------------- Quit
PRINT CHR$(27);"q"; ! normal
OUT 4,8
WAVE 0
SHOWM
STOP
CASE "d" ! ----------------------------------------- feld2%-Ausdruck
FOR eins&=1 TO 48
FOR zwei&=1 TO 78
IF feld2%(eins&,zwei&)=0
ELSE
LPRINT "(";feld2%(eins&,zwei&);")";
ENDIF
NEXT zwei&
LPRINT
NEXT eins&
CASE "i" !----------------------------------------- Innen-Form steigern
ADD innen%,8
bild(an|)
CASE "I" !----------------------------------------- Innenform zurck
innen%=masken%+304
bild(an|)
CASE " " !----------------------------------------- Tastenbelegungsfeld
tasten_anzeige
CASE "j","J" !------------------------------------- Joystick
PRINT AT(37,1);"J-STICK";
anzeige&=TRUE
CLR maus|
PAUSE 10
CASE "b","B" !------------------------------------- Bild an/aus
IF bild|=1
CLR bild|
bild(0)
ELSE
bild|=1
bild(1)
ENDIF
ENDSELECT
zeit%=TIMER-diffz%
EXIT IF maus|=0
EXIT IF MOUSEK
EXIT IF a$>""
EXIT IF a$=" "
WEND
CLR a$
IF anzeige&
anzeige&=FALSE
DEFFILL 1,2,8
PBOX 250+4,0,380+4,16
ENDIF
diffx%=MOUSEX-x%
diffy%=MOUSEY-y%
x%=x%+MAX(-10,MIN(diffx%,10))
y%=y%+MAX(-10,MIN(diffy%,10))
x%=MIN(608,MAX(8,x%))
y%=MIN(377,MAX(16,y%))
SETMOUSE x%,y%
RETURN
'
PROCEDURE joystick
wait%=TIMER
diffz%=TIMER-zeit%
WHILE STICK(1)=0
IF TIMER-wait%>60
PRINT AT(37,1);" PAUSE ";
anzeige&=TRUE
ENDIF
IF zweite_runde|=0
FOR sch&=1 TO l_zahl%
IF laufweg|(sch&)=0
laeufer_wartend(sch&)
INC mas
IF mas=80
blink%=8
ELSE IF mas=160
blink%=16
ELSE IF mas=240
blink%=24
ELSE IF mas>=320
CLR mas
CLR blink%
ENDIF
ENDIF
NEXT sch&
ENDIF
a$=INKEY$
SELECT a$
CASE "r","R"
IF raster|=0
raster|=1
bild(bild|)
ELSE
CLR raster|
bild(bild|)
ENDIF
CASE "s","S"
PRINT AT(37,1);"SICHERN";
STICK (0)
SETMOUSE x%,y%
OUT 4,8
anzeige&=TRUE
aufbewahren
HIDEM
STICK (1)
CASE "q","Q"
PRINT CHR$(27);"q"; ! normal
OUT 4,8
WAVE 0
SHOWM
STOP
CASE "n","N" !--------------------------------------- neu
PRINT AT(37,1);" NEU ";
anzeige&=TRUE
neu
zweite_runde|=0
FOR verweil%=1 TO 300
FOR sch&=1 TO l_zahl%
IF laufweg|(sch&)=0
laeufer(sch&)
ENDIF
INC mas
IF mas=8
blink%=8
ELSE IF mas=16
blink%=16
ELSE IF mas=24
blink%=24
ELSE IF mas>=32
CLR mas
CLR blink%
ENDIF
NEXT sch&
NEXT verweil%
CASE "l","L"
PRINT AT(37,1);" LADEN ";
STICK (0)
SETMOUSE x%,y%
OUT 4,8
anzeige&=TRUE
aufbau
HIDEM
STICK (1)
CASE "c","C"
copyright
CASE "b","B"
IF bild|=1
CLR bild|
bild(0)
ELSE
bild|=1
bild(1)
ENDIF
CASE " "
tasten_anzeige
CASE "m","M"
PRINT AT(37,1);" MAUS ";
maus|=1
SETMOUSE x%,y%
STICK (0)
PAUSE 10
ENDSELECT
zeit%=TIMER-diffz%
EXIT IF maus|
EXIT IF STRIG(1)
EXIT IF MOUSEK
EXIT IF a$>""
EXIT IF a$=" "
WEND
CLR a$
IF anzeige&
anzeige&=FALSE
DEFFILL 1,2,8
PBOX 250+4,0,380+4,16
ENDIF
SELECT STICK(1)
CASE 1 ! o
y%=MAX(16,y%-6)
CASE 2 ! u
y%=MIN(377,y%+4)
CASE 4 ! l
x%=MAX(0+8,x%-6)
CASE 8 ! r
x%=MIN(608,x%+6)
CASE 9 ! ro
y%=MAX(16,y%-4)
x%=MIN(608,x%+4)
CASE 6 !lu
y%=MIN(377,y%+4)
x%=MAX(0+8,x%-4)
CASE 5 ! lo
y%=MAX(16,y%-4)
x%=MAX(0+8,x%-4)
CASE 10 ! ru
x%=MIN(608,x%+4)
y%=MIN(377,y%+4)
ENDSELECT
RETURN
'
PROCEDURE zweite_runde
ERASE laufweg|()
DIM laufweg|(60)
CLR ding_zahl%
'
GOTO schneller
FOR eins&=2 TO 48
FOR zwei&=2 TO 78
IF feld2%(eins&,zwei&)=15
rest%=80*eins&*8+zwei&-640
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%,L:masken%+344)
PAUSE 2
ENDIF
NEXT zwei&
NEXT eins&
'
FOR eins&=4 TO 48
FOR zwei&=2 TO 78
IF feld2%(eins&,zwei&)<>15
rest%=80*eins&*8+zwei&-640
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%,L:V:bild$)
ENDIF
NEXT zwei&
NEXT eins&
'
schneller:
'
l_zahl%=1
FOR eins&=4 TO 48
FOR zwei&=2 TO 78
rest%=80*eins&*8+zwei&-640
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%,L:V:bild$)
IF feld2%(eins&,zwei&)<>15
feld2%(eins&,zwei&)=0
feld%(eins&/2,zwei&/2)=0
ELSE IF feld2%(eins&,zwei&)=15
IF tt%=10
CLR tt%
INC ding_zahl%
feld2%(eins&,zwei&)=0
feld2%(eins&-1,zwei&-1)=100
feld%(eins&/2,zwei&/2)=100
rest%=80*(eins&-1)*8+(zwei&-1)-640
~C:laeufer3%(rest%,L:V:bild$,rest%,0,L:masken%+336)
ELSE
INC tt%
feld2%(eins&,zwei&)=0
feld2%(eins&-1,zwei&-1)=200
feld%(eins&/2,zwei&/2)=200
tst%=80*(eins&-1)*8+(zwei&-1)-640
~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%,L:masken%+288)
ENDIF
ENDIF
NEXT zwei&
NEXT eins&
'
punkte_setzen
zweite_runde|=1
'
ERASE pos_t%(),pos_b%()
DIM pos_t%(ding_zahl%),pos_b%(ding_zahl%)
CLR ding_zahl%
FOR eins&=2 TO 48
FOR zwei&=2 TO 78
IF feld2%(eins&,zwei&)=100
INC ding_zahl%
pos_t%(ding_zahl%)=(eins&-1)*8
pos_b%(ding_zahl%)=(zwei&)*8
ENDIF
NEXT zwei&
NEXT eins&
dinger%=ding_zahl%
'
' punkte_setzen
'
FOR sch&=1 TO l_zahl%
pos1%=RND(0)*600+20
pos2%=RND(0)*360+20
tief%(sch&)=pos1%
breit%(sch&)=pos2%
IF laufweg|(sch&)=0
ausweichen(sch&)
ENDIF
NEXT sch&
'
count_ceep%=count%
'
platz_suchen
dinglauf(1)
RETURN
'
PROCEDURE dinglauf(ding_zahl%)
vier%=RND(0)*16+1
SELECT vier%
CASE 1 ! nach unten
IF pos_t%(ding_zahl%)<=360
IF feld%(pos_t%(ding_zahl%)/16+2,pos_b%(ding_zahl%)/16)=0
FOR sch&=1 TO 2
verschw_rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=0
ENDIF
ADD pos_t%(ding_zahl%),8
rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
NEXT sch&
IF feld%(pos_t%(ding_zahl%)/16,pos_b%(ding_zahl%)/16)=200
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%-1280,L:masken%+288)
ELSE
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%-1280,L:V:bild$)
ENDIF
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%,L:masken%+336)
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
ENDIF
ENDIF
CASE 2 ! nach oben
IF pos_t%(ding_zahl%)>=32
IF feld%(MAX(1,pos_t%(ding_zahl%)/16),pos_b%(ding_zahl%)/16)=0
FOR sch&=1 TO 2
verschw_rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=0
ENDIF
SUB pos_t%(ding_zahl%),8
rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
NEXT sch&
IF feld%(pos_t%(ding_zahl%)/16+2,pos_b%(ding_zahl%)/16)=200
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%+1280,L:masken%+288)
ELSE
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%+1280,L:V:bild$)
ENDIF
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%,L:masken%+336)
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
ENDIF
ENDIF
CASE 3 ! nach rechts
IF pos_b%(ding_zahl%)<=580
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16+1)=0
FOR sch&=1 TO 2
verschw_rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=0
ENDIF
ADD pos_b%(ding_zahl%),8
rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
l%=pos_b%(ding_zahl%) AND &X111
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,l%,L:masken%+336)
NEXT sch&
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16-1)=200
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%-2,L:masken%+288)
ELSE
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%-2,L:V:bild$)
ENDIF
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%,L:masken%+336)
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
ENDIF
ENDIF
CASE 4 ! nach links
IF pos_b%(ding_zahl%)>=24
IF feld%(pos_t%(ding_zahl%)/16+1,MAX(1,pos_b%(ding_zahl%)/16-1))=0
FOR sch&=1 TO 2
verschw_rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=0
ENDIF
SUB pos_b%(ding_zahl%),8
rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
l%=pos_b%(ding_zahl%) AND &X111
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,l%,L:masken%+336)
NEXT sch&
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16+1)=200
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%+2,L:masken%+288)
ELSE
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%+2,L:V:bild$)
ENDIF
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%,L:masken%+336)
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
ENDIF
ENDIF
CASE 5,9 ! nach unten rechts
IF pos_t%(ding_zahl%)<=360
IF pos_b%(ding_zahl%)<=580
IF feld%(pos_t%(ding_zahl%)/16+2,pos_b%(ding_zahl%)/16+1)=0
FOR sch&=1 TO 2
verschw_rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=0
ENDIF
ADD pos_b%(ding_zahl%),8
ADD pos_t%(ding_zahl%),8
rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
NEXT sch&
IF feld%(pos_t%(ding_zahl%)/16,pos_b%(ding_zahl%)/16-1)=200
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%-1280-2,L:masken%+288)
ELSE
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%-1280-2,L:V:bild$)
ENDIF
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%,L:masken%+336)
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
ENDIF
ENDIF
ENDIF
CASE 6,10 ! nach oben links
IF pos_t%(ding_zahl%)>=32
IF pos_b%(ding_zahl%)>=24
IF feld%(MAX(1,pos_t%(ding_zahl%)/16),pos_b%(ding_zahl%)/16-1)=0
FOR sch&=1 TO 2
verschw_rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=0
ENDIF
SUB pos_b%(ding_zahl%),8
SUB pos_t%(ding_zahl%),8
rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
NEXT sch&
IF feld%(pos_t%(ding_zahl%)/16+2,pos_b%(ding_zahl%)/16+1)=200
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%+1280+2,L:masken%+288)
ELSE
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%+1280+2,L:V:bild$)
ENDIF
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%,L:masken%+336)
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
ENDIF
ENDIF
ENDIF
CASE 7,11 ! nach rechts oben
IF pos_b%(ding_zahl%)<=580
IF pos_t%(ding_zahl%)>=32
IF feld%(pos_t%(ding_zahl%)/16,pos_b%(ding_zahl%)/16+1)=0
FOR sch&=1 TO 2
verschw_rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=0
ENDIF
SUB pos_t%(ding_zahl%),8
ADD pos_b%(ding_zahl%),8
rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
l%=pos_b%(ding_zahl%) AND &X111
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,l%,L:masken%+336)
NEXT sch&
IF feld%(pos_t%(ding_zahl%)/16+2,pos_b%(ding_zahl%)/16-1)=200
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%+1280-2,L:masken%+288)
ELSE
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%+1280-2,L:V:bild$)
ENDIF
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%,L:masken%+336)
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
ENDIF
ENDIF
ENDIF
CASE 8,12 ! nach links unten
IF pos_b%(ding_zahl%)>=24
IF pos_t%(ding_zahl%)<=360
IF feld%(pos_t%(ding_zahl%)/16+2,MAX(1,pos_b%(ding_zahl%)/16-1))=0
FOR sch&=1 TO 2
verschw_rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
IF feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=0
ENDIF
ADD pos_t%(ding_zahl%),8
SUB pos_b%(ding_zahl%),8
rest%=80*pos_t%(ding_zahl%)+pos_b%(ding_zahl%)/8
l%=pos_b%(ding_zahl%) AND &X111
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,l%,L:masken%+336)
NEXT sch&
IF feld%(pos_t%(ding_zahl%)/16,pos_b%(ding_zahl%)/16+1)=200
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%-1280+2,L:masken%+288)
ELSE
~C:verschw%(L:XBIOS(2),L:V:bild2$,L:rest%-1280+2,L:V:bild$)
ENDIF
~C:laeufer3%(verschw_rest%,L:V:bild$,rest%,0,L:masken%+336)
~C:treffer%(L:XBIOS(2),L:V:bild$,L:rest%,L:masken%+336)
feld%(pos_t%(ding_zahl%)/16+1,pos_b%(ding_zahl%)/16)=100
ENDIF
ENDIF
ENDIF
ENDSELECT
RETURN
'
'
PROCEDURE tasten_anzeige
b_$=SPACE$(15000)
GET 50,50,450,350,b_$
DEFFILL 1,0,0
PBOX 50,50,450,350
BOX 53,53,447,347
PRINT CHR$(27);"q"; ! schwarz auf wei
PRINT AT(11,5);"Tastenbelegung: "
PRINT AT(11,7);"M => Maus"
PRINT AT(11,8);"J => Joystick"
PRINT AT(11,9);"N => Neues Spiel"
PRINT AT(11,10);"S => Sichern"
PRINT AT(11,11);"L => Laden"
PRINT AT(11,12);"R => Rastermuster (an/aus)"
PRINT AT(11,13);"B => Hintergrund-Bild (an/aus)"
PRINT AT(11,14);"C => Copyright (unverndert frei kopierbar)"
PRINT AT(11,15);"Q => Quit/Ende"
PRINT AT(11,18);"Feuerknopf/Maustaste setzen das Spiel fort,"
PRINT AT(11,19);"ohne da die Spielfigur bewegt werden mu."
PRINT AT(11,21);"Leertaste => diese Anzeige (an/aus)"
PRINT CHR$(27);"p"; ! invers
CLR a$
REPEAT
a$=INKEY$
UNTIL a$=" "
CLR a$
PUT 50,50,b_$
RETURN
'
PROCEDURE laeufer(n|)
IF tief%(n|)>=630
hoch|(n|)=1
INC breit%(n|)
DEC tief%(n|)
ELSE IF tief%(n|)<=9
hoch|(n|)=0
DEC breit%(n|)
INC tief%(n|)
ENDIF
IF breit%(n|)>=381
schmal|(n|)=1
INC tief%(n|)
DEC breit%(n|)
ELSE IF breit%(n|)<=25
schmal|(n|)=0
DEC tief%(n|)
INC breit%(n|)
ENDIF
'
IF hoch|(n|)=0
INC tief%(n|)
ENDIF
IF hoch|(n|)=1
DEC tief%(n|)
ENDIF
IF schmal|(n|)=0
INC breit%(n|)
ENDIF
IF schmal|(n|)=1
DEC breit%(n|)
ENDIF
'
lx%(n|)=tief%(n|)+7 AND &HFFF0 ! touch links,rechts
ly%(n|)=breit%(n|)+15 AND &HFFF0 !Touch oben,unten
'
IF tief%(n|)>=x%-8
IF tief%(n|)=y%-8
IF breit%(n|)4
hinher|(n|)=0
ENDIF
aendern|(n|)=1
tief%(n|)=alt_tief%(n|)
breit%(n|)=alt_breit%(n|)
ELSE IF feld%(ly%(n|)/16,lx%(n|)/16)=100
PRINT AT(39,1);USING "###",0
feld%(ly%(n|)/16,lx%(n|)/16)=200
feld2%(ly%(n|)/8,lx%(n|)/8)=200
tst%=80*ly%(n|)+lx%(n|)/8-640
~C:treffer2%(L:XBIOS(2),L:V:bild$,L:tst%,L:masken%+288)
~XBIOS(32,L:zisch%)
'
treffer_umfeld(ly%(n|)/16,lx%(n|)/16,0)
'
'
ENDIF
ENDIF
CLR keine_zusatztreffer|
IF aendern|(n|)=1
aendern|(n|)=0
SELECT bew|(n|)
CASE 1
' IF bew|(n|)=1 ! nach rechts unten
re_ob(n|)
SELECT hinher|(n|)
CASE 2
' IF hinher|(n|)=2
re_ob(n|)
CASE 3
' ELSE IF hinher|(n|)=3
li_ob(n|)
ENDSELECT
alt_bew|(n|)=1
CASE 2
' ELSE IF bew|(n|)=2 ! nach links unten
li_ob(n|)
SELECT hinher|(n|)
CASE 2
' IF hinher|(n|)=2
re_ob(n|)
CASE 3
' ELSE IF hinher|(n|)=3
re_un(n|)
ENDSELECT
alt_bew|(n|)=2
CASE 3
' ELSE IF bew|(n|)=3 ! nach rechts oben
re_un(n|)
SELECT hinher|(n|)
CASE 2
' IF hinher|(n|)=2
li_un(n|)
CASE 3
' ELSE IF hinher|(n|)=3
li_ob(n|)
ENDSELECT
alt_bew|(n|)=3
CASE 4
' ELSE IF bew|(n|)=4 ! nach links oben
li_un(n|)
SELECT hinher|(n|)
CASE 2
' IF hinher|(n|)=2
re_ob(n|)
CASE 3
' ELSE IF hinher|(n|)=3
re_un(n|)
ENDSELECT
alt_bew|(n|)=4
ENDSELECT
ELSE
falls%=RND(0)*700
SELECT falls%
CASE 0 TO 1
li_ob(n|)
CASE 10 TO 11
re_ob(n|)
CASE 20 TO 21
li_un(n|)
CASE 30 TO 31
re_un(n|)
ENDSELECT
ENDIF
'
lalt%(n|)=lz%(n|)
lz%(n|)=80*breit%(n|)+tief%(n|)/8
l%=tief%(n|) AND &X111
~C:laeufer3%(lalt%(n|),L:V:bild$,lz%(n|),l%,L:masken%+blink%)
'
IF lz%(n|)=lxt%(n|)
INC gleich%(n|)
IF gleich%(n|)=10
laufweg|(n|)=1
~C:laeufer3%(lalt%(n|),L:V:bild$,lz%(n|),l%,L:masken%+296)
ENDIF
ELSE
gleich%(n|)=0
ENDIF
lxt%(n|)=lz%(n|)
'
alt_tief%(n|)=tief%(n|)
alt_breit%(n|)=breit%(n|)
RETURN
'
PROCEDURE laeufer_wartend(n|)
'
lx%(n|)=tief%(n|)+7 AND &HFFF0 ! touch links,rechts
ly%(n|)=breit%(n|)+15 AND &HFFF0 !Touch oben,unten
' --------------------------------------------------
'
lalt%(n|)=lz%(n|)
lz%(n|)=80*breit%(n|)+tief%(n|)/8
l%=tief%(n|) AND &X111
~C:laeufer3%(lalt%(n|),L:V:bild$,lz%(n|),l%,L:masken%+blink%)
'
alt_tief%(n|)=tief%(n|)
alt_breit%(n|)=breit%(n|)
RETURN
'
PROCEDURE re_un(n|)
schmal|(n|)=0
hoch|(n|)=0
bew|(n|)=1
RETURN
'
PROCEDURE li_un(n|)
schmal|(n|)=0
hoch|(n|)=1
bew|(n|)=2
RETURN
'
PROCEDURE re_ob(n|)
schmal|(n|)=1
hoch|(n|)=0
bew|(n|)=3
RETURN
'
PROCEDURE li_ob(n|)
schmal|(n|)=1
hoch|(n|)=1
bew|(n|)=4
RETURN
'
PROCEDURE ausweichen(n|)
INC auswahl|
IF auswahl|>=3
CLR auswahl|
ENDIF
IF auswahl|=0
CLR raus|
DO
DEC tief%(n|)
DEC breit%(n|)
DEC alt_tief%(n|)
DEC alt_breit%(n|)
lx%(n|)=tief%(n|)+7 AND &HFFF0 ! touch links,rechts
ly%(n|)=breit%(n|)+15 AND &HFFF0 !Touch oben,unten
IF tief%(n|)<=40 OR breit%(n|)<=40
CLR raus|
DO
IF tief%(n|)<620
INC tief%(n|)
INC alt_tief%(n|)
ENDIF
IF breit%(n|)<380
INC breit%(n|)
INC alt_breit%(n|)
ENDIF
EXIT IF raus|=2
lx%(n|)=tief%(n|)+7 AND &HFFF0 ! touch links,rechts
ly%(n|)=breit%(n|)+15 AND &HFFF0 !Touch oben,unten
IF feld2%(ly%(n|)/8,lx%(n|)/8)=0
raus|=2
ENDIF
LOOP
ENDIF
EXIT IF raus|=1
EXIT IF raus|=2
IF feld2%(ly%(n|)/8,lx%(n|)/8)=0
raus|=1
ENDIF
EXIT IF raus|=1
LOOP
IF raus|=1
DEC tief%(n|)
DEC breit%(n|)
li_ob(n|)
ELSE IF raus|=2
INC tief%(n|)
INC breit%(n|)
re_un(n|)
ENDIF
CLR raus|
ELSE IF auswahl|=1
CLR raus|
DO
INC tief%(n|)
INC breit%(n|)
INC alt_tief%(n|)
INC alt_breit%(n|)
lx%(n|)=tief%(n|)+7 AND &HFFF0 ! touch links,rechts
ly%(n|)=breit%(n|)+15 AND &HFFF0 !Touch oben,unten
IF tief%(n|)>=600 OR breit%(n|)>=380
CLR raus|
DO
IF tief%(n|)>=40
DEC tief%(n|)
DEC alt_tief%(n|)
ENDIF
IF breit%(n|)>=40
DEC breit%(n|)
DEC alt_breit%(n|)
ENDIF
EXIT IF raus|=2
lx%(n|)=tief%(n|)+7 AND &HFFF0 ! touch links,rechts
ly%(n|)=breit%(n|)+15 AND &HFFF0 !Touch oben,unten
IF feld2%(ly%(n|)/8,lx%(n|)/8)=0
raus|=2
ENDIF
LOOP
ENDIF
EXIT IF raus|=1
EXIT IF raus|=2
IF feld2%(ly%(n|)/8,lx%(n|)/8)=0
raus|=1
ENDIF
EXIT IF raus|=1
LOOP
IF raus|=1
DEC tief%(n|)
DEC breit%(n|)
li_ob(n|)
ELSE IF raus|=2
INC tief%(n|)
INC breit%(n|)
re_un(n|)
ENDIF
CLR raus|
ELSE IF auswahl|=2
CLR raus|
DO
INC tief%(n|)
DEC breit%(n|)
INC alt_tief%(n|)
DEC alt_breit%(n|)
lx%(n|)=tief%(n|)+7 AND &HFFF0 ! touch links,rechts
ly%(n|)=breit%(n|)+15 AND &HFFF0 !Touch oben,unten
IF tief%(n|)>=620 OR breit%(n|)<=40
CLR raus|
DO
IF tief%(n|)>=40
DEC tief%(n|)
DEC alt_tief%(n|)
ENDIF
IF breit%(n|)<380
INC breit%(n|)
INC alt_breit%(n|)
ENDIF
EXIT IF raus|=2
lx%(n|)=tief%(n|)+7 AND &HFFF0 ! touch links,rechts
ly%(n|)=breit%(n|)+15 AND &HFFF0 !Touch oben,unten
IF feld2%(ly%(n|)/8,lx%(n|)/8)=0
raus|=2
ENDIF
LOOP
ENDIF
EXIT IF raus|=1
EXIT IF raus|=2
IF feld2%(ly%(n|)/8,lx%(n|)/8)=0
raus|=1
ENDIF
EXIT IF raus|=1
LOOP
IF raus|=1
DEC tief%(n|)
DEC breit%(n|)
li_ob(n|)
ELSE IF raus|=2
INC tief%(n|)
INC breit%(n|)
re_un(n|)
ENDIF
CLR raus|
ELSE
CLR raus|
DO
DEC tief%(n|)
DEC breit%(n|)
INC alt_tief%(n|)
INC alt_breit%(n|)
lx%(n|)=tief%(n|)+7 AND &HFFF0 ! touch links,rechts
ly%(n|)=breit%(n|)+15 AND &HFFF0 !Touch oben,unten
IF tief%(n|)<=40 OR breit%(n|)>=380
CLR raus|
DO
IF tief%(n|)<620
INC tief%(n|)
INC alt_tief%(n|)
ENDIF
IF breit%(n|)>=40
DEC breit%(n|)
DEC alt_breit%(n|)
ENDIF
EXIT IF raus|=2
lx%(n|)=tief%(n|)+7 AND &HFFF0 ! touch links,rechts
ly%(n|)=breit%(n|)+15 AND &HFFF0 !Touch oben,unten
IF feld2%(ly%(n|)/8,lx%(n|)/8)=0
raus|=2
ENDIF
LOOP
ENDIF
EXIT IF raus|=1
EXIT IF raus|=2
EXIT IF feld2%(ly%(n|)/8,lx%(n|)/8)=0
IF feld2%(ly%(n|)/8,lx%(n|)/8)=0
raus|=1
ENDIF
EXIT IF raus|=1
LOOP
IF raus|=1
DEC tief%(n|)
DEC breit%(n|)
li_ob(n|)
ELSE IF raus|=2
INC tief%(n|)
INC breit%(n|)
re_un(n|)
ENDIF
CLR raus|
ENDIF
RETURN
'
'
PROCEDURE init
count%=300
DIM tstx%(4),tsty%(2)
DIM feld%(30,40)
DIM feld2%(70,90)
DEFTEXT 1,0,0,13
DEFFILL 1,2,4
PBOX 0,0,640,400
DEFFILL 1,2,8
PBOX 0,0,640,16
PBOX 0,392,640,400
PBOX 0,0,8,400
DEFFILL 1,0,0
PRBOX 16+8,0,72+8,16
PRBOX 568,0,624,16
COLOR 0
BOX 8,17,639,391
BOX 9,18,638,390
COLOR 1
IF raster|=1
linie=&X101010101010101 !(gut!)
DEFLINE -linie
FOR sch&=3 TO 16*3
DRAW 16,8*sch& TO 632,8*sch&
NEXT sch&
FOR sch&=2 TO 28*3
DRAW 8*sch&,24 TO 8*sch&,384
NEXT sch&
ENDIF
bild$=SPACE$(32000)
bild2$=SPACE$(32000)
BMOVE XBIOS(2),V:bild$,32000
BMOVE XBIOS(2),V:bild2$,32000
RETURN
'
PROCEDURE aufbewahren
SHOWM
FILESELECT "*.*","",bew$
IF bew$>""
IF bew$<>"\"
OPEN "o",#1,bew$
'
PRINT #1,l_zahl%
'
FOR eins&=2 TO 24
FOR zwei&=1 TO 39
PRINT #1,feld%(eins&,zwei&)
NEXT zwei&
NEXT eins&
PRINT #1,x%
PRINT #1,xalt%
PRINT #1,xsuperalt%
PRINT #1,y%
PRINT #1,yalt%
PRINT #1,ysuperalt%
PRINT #1,zufz%
PRINT #1,zalt%
PRINT #1,z%
PRINT #1,t%
PRINT #1,count%
PRINT #1,immercount%
PRINT #1,maus|
'
FOR sch&=1 TO l_zahl%
PRINT #1,tief%(sch&)
PRINT #1,breit%(sch&)
PRINT #1,alt_tief%(sch&)
PRINT #1,alt_breit%(sch&)
PRINT #1,l%
PRINT #1,lalt%(sch&)
PRINT #1,schmal|(sch&)
PRINT #1,hoch|(sch&)
PRINT #1,hinher|(sch&)
PRINT #1,aendern|(sch&)
NEXT sch&
'
PRINT #1,spr%
'
FOR sch&=1 TO l_zahl%
PRINT #1,laufweg|(sch&)
NEXT sch&
'
PRINT #1,bild|
PRINT #1,raster|
'
FOR sch&=1 TO 14
PRINT #1,dummy
NEXT sch&
'
ENDIF
ENDIF
CLOSE #1
HIDEM
RETURN
'
PROCEDURE aufbau
FILESELECT "*.*","",bew$
IF bew$>""
IF bew$<>"\"
OPEN "i",#1,bew$
mass%=LOF(#1)
neu
'
INPUT #1,l_zahl%
'
FOR eins&=2 TO 24
FOR zwei&=1 TO 39
INPUT #1,feld%(eins&,zwei&)
NEXT zwei&
NEXT eins&
'
punkte_setzen
'
'
INPUT #1,x%
INPUT #1,xalt%
INPUT #1,xsuperalt%
INPUT #1,y%
INPUT #1,yalt%
INPUT #1,ysuperalt%
INPUT #1,zufz%
INPUT #1,zalt%
INPUT #1,z%
INPUT #1,t%
INPUT #1,count%
INPUT #1,immercount%
INPUT #1,maus|
'
FOR sch&=1 TO l_zahl%
INPUT #1,tief%(sch&)
INPUT #1,breit%(sch&)
INPUT #1,alt_tief%(sch&)
INPUT #1,alt_breit%(sch&)
INPUT #1,l%
INPUT #1,lalt%(sch&)
INPUT #1,schmal|(sch&)
INPUT #1,hoch|(sch&)
INPUT #1,hinher|(sch&)
INPUT #1,aendern|(sch&)
NEXT sch&
'
INPUT #1,spr%
'
FOR sch&=1 TO l_zahl%
INPUT #1,laufweg|(sch&)
NEXT sch&
'
'
INPUT #1,bild|
INPUT #1,raster|
'
FOR sch&=1 TO 14
INPUT #1,dummy
NEXT sch&
'
FOR eins&=2 TO 24
FOR zwei&=1 TO 39
IF feld%(eins&,zwei&)=100
tst%=80*eins&*16+zwei&/8*16-640
~C:ding2%(L:XBIOS(2),L:V:bild$,L:tst%)
ENDIF
NEXT zwei&
NEXT eins&
count(0)
ENDIF
ENDIF
CLOSE #1
SETMOUSE xalt%,yalt%
RETURN
'
PROCEDURE punkte_setzen
FOR eins&=2 TO 24
FOR zwei&=1 TO 39
' -----------------------------------------------------------
IF feld%(eins&,zwei&)=200
'
treffer_umfeld(eins&,zwei&,0)
'
GOTO neinhier
feld2%(2*eins&,2*zwei&)=200
tst%=80*eins&*16+zwei&/8*16-640
~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%,L:masken%+288)
IF feld%(eins&+1,zwei&)=200
feld2%(2*eins&+1,2*zwei&)=200
'
feld2%(2*eins&+1,2*zwei&-1)=BSET(feld2%(2*eins&+1,2*zwei&-1),0)
IF feld2%(2*eins&+1,2*zwei&-1)=15
inz%=80*2*eins&*8+2*zwei&-640
inz%=inz%+640-1
~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
ENDIF
feld2%(2*eins&+1,2*zwei&+1)=BSET(feld2%(2*eins&+1,2*zwei&+1),1)
IF feld2%(2*eins&+1,2*zwei&+1)=15
inz%=80*2*eins&*8+2*zwei&-640
inz%=inz%+640+1
~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
ENDIF
'
~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%+640,L:masken%+288)
ENDIF
IF feld%(eins&-1,zwei&)=200
feld2%(2*eins&-1,2*zwei&)=200
'
feld2%(2*eins&-1,2*zwei&-1)=BSET(feld2%(2*eins&-1,2*zwei&-1),0)
IF feld2%(2*eins&-1,2*zwei&-1)=15
inz%=80*2*eins&*8+2*zwei&-640
inz%=inz%-640-1
~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
ENDIF
feld2%(2*eins&-1,2*zwei&+1)=BSET(feld2%(2*eins&-1,2*zwei&+1),1)
IF feld2%(2*eins&-1,2*zwei&+1)=15
inz%=80*2*eins&*8+2*zwei&-640
inz%=inz%-640+1
~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
ENDIF
'
~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%-640,L:masken%+288)
ENDIF
IF feld%(eins&,zwei&+1)=200
feld2%(2*eins&,2*zwei&+1)=200
'
feld2%(2*eins&-1,2*zwei&+1)=BSET(feld2%(2*eins&-1,2*zwei&+1),2)
IF feld2%(2*eins&-1,2*zwei&+1)=15
inz%=80*2*eins&*8+2*zwei&-640
inz%=inz%-640+1
~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
ENDIF
feld2%(2*eins&+1,2*zwei&+1)=BSET(feld2%(2*eins&+1,2*zwei&+1),3)
IF feld2%(2*eins&+1,2*zwei&+1)=15
inz%=80*2*eins&*8+2*zwei&-640
inz%=inz%+640+1
~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
ENDIF
'
~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%+1,L:masken%+288)
ENDIF
IF feld%(eins&,zwei&-1)=200
feld2%(2*eins&,2*zwei&-1)=200
'
feld2%(2*eins&-1,2*zwei&-1)=BSET(feld2%(2*eins&-1,2*zwei&-1),2)
IF feld2%(2*eins&-1,2*zwei&-1)=15
inz%=80*2*eins&*8+2*zwei&-640
inz%=inz%-640-1
~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
ENDIF
feld2%(2*eins&+1,2*zwei&-1)=BSET(feld2%(2*eins&+1,2*zwei&-1),3)
IF feld2%(2*eins&+1,2*zwei&-1)=15
inz%=80*2*eins&*8+2*zwei&-640
inz%=inz%+640-1
~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
ENDIF
'
~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%-1,L:masken%+288)
ENDIF
ELSE
ENDIF
neinhier:
' ---------------------------------------------------------
NEXT zwei&
NEXT eins&
RETURN
'
PROCEDURE neu
count%=300
immercount%=0
CLR laufweg1|,laufweg2|,laufweg3|,laufweg4|
ERASE tstx%(),tsty%(),feld%(),feld2%()
DIM tstx%(4),tsty%(2)
DIM feld%(30,40),feld2%(70,90)
IF bild|=0
DEFFILL 1,2,4
PBOX 0,0,640,400
DEFFILL 1,2,8
PBOX 0,0,640,16
PBOX 0,392,640,400
PBOX 0,0,8,400
DEFFILL 1,0,0
PRBOX 16+8,0,72+8,16
PRBOX 568,0,624,16
COLOR 0
BOX 8,17,639,391
BOX 9,18,638,390
COLOR 1
IF raster|=1
FOR sch&=3 TO 16*3
DRAW 16,8*sch& TO 632,8*sch&
NEXT sch&
FOR sch&=2 TO 28*3
DRAW 8*sch&,24 TO 8*sch&,384
NEXT sch&
ENDIF
bild$=SPACE$(32000)
bild2$=SPACE$(32000)
BMOVE XBIOS(2),V:bild$,32000
BMOVE XBIOS(2),V:bild2$,32000
ELSE IF bild|=1
BMOVE zeichnung%,XBIOS(2),32000
DEFFILL 1,2,8
PBOX 0,0,8,400
PBOX 16,0,72,16
DEFFILL 1,0,0
PRBOX 16+8,0,72+8,16
COLOR 0
BOX 8,17,639,391
BOX 9,18,638,390
COLOR 1
IF raster|=1
FOR sch&=3 TO 16*3
DRAW 16,8*sch& TO 632,8*sch&
NEXT sch&
FOR sch&=2 TO 28*3
DRAW 8*sch&,24 TO 8*sch&,384
NEXT sch&
ENDIF
BMOVE XBIOS(2),V:bild$,32000
BMOVE XBIOS(2),V:bild2$,32000
ENDIF
RSET immercount$=STR$(immercount%)
TEXT 72*8,13,immercount$
'
pos1%=RND(0)*600+20
pos2%=RND(0)*360+20
FOR sch&=1 TO l_zahl%
tief%(sch&)=pos1%
breit%(sch&)=pos2%
NEXT sch&
'
spr%=0
RETURN
'
PROCEDURE copyright
nomen$=SPACE$(80)
n%=V:nomen$
FOR sch&=0 TO 79
BYTE{n%+sch&}=BYTE{nomen%+sch&}-17
NEXT sch&
~FORM_ALERT(1,nomen$)
RETURN
'
PROCEDURE bild(an|)
IF an|
BMOVE zeichnung%,XBIOS(2),32000
DEFFILL 1,2,8
PBOX 0,0,8,400
PBOX 16,0,72,16
DEFFILL 1,0,0
PRBOX 16+8,0,72+8,16
COLOR 0
BOX 8,17,639,391
BOX 9,18,638,390
COLOR 1
IF raster|=1
FOR sch&=3 TO 16*3
DRAW 16,8*sch& TO 632,8*sch&
NEXT sch&
FOR sch&=2 TO 28*3
DRAW 8*sch&,24 TO 8*sch&,384
NEXT sch&
ENDIF
BMOVE XBIOS(2),V:bild$,32000
BMOVE XBIOS(2),V:bild2$,32000
ELSE
DEFFILL 1,2,4
PBOX 0,0,640,400
DEFFILL 1,2,8
PBOX 0,0,640,16
PBOX 0,392,640,400
PBOX 0,0,8,400
DEFFILL 1,0,0
PRBOX 16+8,0,72+8,16
PRBOX 568,0,624,16
COLOR 0
BOX 8,17,639,391
BOX 9,18,638,390
COLOR 1
IF raster|=1
linie=&X101010101010101 !(gut!)
DEFLINE -linie
FOR sch&=3 TO 16*3
DRAW 16,8*sch& TO 632,8*sch&
NEXT sch&
FOR sch&=2 TO 28*3
DRAW 8*sch&,24 TO 8*sch&,384
NEXT sch&
ENDIF
bild$=SPACE$(32000)
bild2$=SPACE$(32000)
BMOVE XBIOS(2),V:bild$,32000
BMOVE XBIOS(2),V:bild2$,32000
ENDIF
'
punkte_setzen
'
FOR eins&=2 TO 24
FOR zwei&=1 TO 39
IF feld%(eins&,zwei&)=100
tst%=80*eins&*16+zwei&/8*16-640
~C:ding2%(L:XBIOS(2),L:V:bild$,L:tst%)
ENDIF
NEXT zwei&
NEXT eins&
count(0)
RSET immercount$=STR$(immercount%)
TEXT 72*8,13,immercount$
RETURN
'
PROCEDURE platz_suchen
spr%=1
~C:sprite4z%(zalt%,L:V:bild$,z%,t%,L:masken%+sprite%(spr%),L:masken%+loch%(spr%))
DO
IF maus|=1
maus
EXIT IF MOUSEK
ELSE IF maus|=0
joystick
EXIT IF STRIG(1)
ENDIF
xsuperalt%=xalt%
ysuperalt%=yalt%
xalt%=x%
yalt%=y%
'
tx1%=(x%+7)/16
tx2%=(x%+7+8)/16
tx3%=(x%+7+16)/16
tx4%=(x%+7+24)/16
ty1%=(y%+15)/16
ty2%=(y%+23)/16
'
t%=x% AND &X1111
z%=y%*80+x%/8
z%=BCLR(z%,0)
IF maus|=1
~C:sprite4z%(zalt%,L:V:bild$,z%,t%,L:masken%+sprite%(spr%),L:masken%+loch%(spr%))
ELSE
VSYNC
~C:sprite4z%(zalt%,L:V:bild$,z%,t%,L:masken%+sprite%(spr%),L:masken%+loch%(spr%))
ENDIF
zalt%=z%
IF maus|=0
EXIT IF STRIG(1)
ELSE IF maus|=1
EXIT IF MOUSEK
ENDIF
LOOP
tstx%(1)=x%+7 AND &HFFF0
tstx%(2)=x%+7+8 AND &HFFF0
tstx%(3)=x%+7+16 AND &HFFF0
tstx%(4)=x%+7+24 AND &HFFF0
tsty%(1)=y%+15 AND &HFFF0
tsty%(2)=y%+23 AND &HFFF0
FOR sch&=1 TO 4
IF feld2%(tsty%(1)/8,tstx%(sch&)/8)=200
nein|=1
ENDIF
IF feld%(tsty%(1)/16,tstx%(sch&)/16)=100
nein|=1
ENDIF
IF feld%(tsty%(2)/16,tstx%(sch&)/16)=100
nein|=1
ENDIF
IF feld2%(tsty%(2)/8,tstx%(sch&)/8)=200
nein|=1
ENDIF
NEXT sch&
IF nein|=1
CLR nein|
IF maus|=0
REPEAT
UNTIL STRIG(1)=0
ELSE IF maus|=1
REPEAT
UNTIL MOUSEK=0
ENDIF
platz_suchen
ELSE
spr%=0
ENDIF
FOR sch&=1 TO l_zahl%
IF laufweg|(sch&)=0
ausweichen(sch&)
ENDIF
NEXT sch&
zeit%=TIMER
count%=count_ceep%
RETURN
'
'
PROCEDURE l_block '(wird nicht mehr gebraucht)
' FOR sch&=0 TO 2
' tst%=80*MIN(368,lblock_tsty%)+f4&-640+sch&
' feld2%(f3&,f4&+sch&)=200
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%,L:masken%+288)
' ~XBIOS(32,L:zisch%)
' NEXT sch&
' feld2%(MAX(1,f3&-1),f4&+1)=BSET(feld2%(f3&-1,f4&+1),2)
' IF feld2%(MAX(1,f3&-1),f4&+1)=15
' inz%=640*(f3&-1)+f4&+1-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
'
' FOR sch&=0 TO 2 STEP 2
' tst%=80*MIN(368,lblock_tsty%)+f4&+sch&
' feld2%(f3&+1,f4&+sch&)=200
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%,L:masken%+288)
' NEXT sch&
' feld2%(f3&+1,f4&+1)=15 ! Innenfeld
' inz%=640*(f3&+1)+f4&+1-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' '
' feld2%(f3&+1,MAX(1,f4&)-1)=BSET(feld2%(f3&+1,MAX(1,f4&)-1),0)
' IF feld2%(f3&+1,f4&-1)=15
' inz%=640*(f3&+1)+f4&-1-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' feld2%(f3&+1,MAX(1,f4&)+3)=BSET(feld2%(f3&+1,MAX(1,f4&)+3),1)
' IF feld2%(f3&+1,f4&+3)=15
' inz%=640*(f3&+1)+f4&+3-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' '
' FOR sch&=0 TO 2
' tst%=80*MIN(368,lblock_tsty%)+f4&+640+sch&
' feld2%(f3&+2,f4&+sch&)=200
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%,L:masken%+288)
' NEXT sch&
' feld2%(f3&+3,f4&+1)=BSET(feld2%(f3&+3,f4&+1),3)
' IF feld2%(f3&+3,f4&+1)=15
' inz%=640*(f3&+3)+f4&+1-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' '
' ' Umfeld:
' ' -----------------------------------------------
' IF feld%(MAX(0,f1&-1),f2&)=200 ! oben, links
' feld2%(MAX(1,f3&-1),f4&)=200
' '
' feld2%(MAX(1,f3&-1),f4&-1)=BSET(feld2%(MAX(1,f3&-1),f4&-1),0)
' IF feld2%(MAX(1,f3&-1),f4&-1)=15
' inz%=640*(MAX(1,f3&-1))+(f4&-1)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' feld2%(MAX(1,f3&-1),f4&+1)=BSET(feld2%(MAX(1,f3&-1),f4&+1),1)
' IF feld2%(MAX(1,f3&-1),(f4&+1))=15
' inz%=640*(MAX(1,f3&-1))+(f4&+1)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' '
' tst%=80*lblock_tsty%+f4&-640
' ~C:treffer2%(L:XBIOS(2),L:V:bild$,L:tst%-640,L:masken%+288)
' ~XBIOS(32,L:zisch%)
' ENDIF
' IF feld%(MAX(0,f1&-1),MIN(40,f2&+1))=200 ! oben, rechts
' feld2%(MAX(1,f3&-1),MIN(78,f4&+2))=200
' '
' feld2%(MAX(1,f3&-1),MIN(78,f4&+2)-1)=BSET(feld2%(MAX(1,f3&-1),MIN(78,f4&+2)-1),0)
' IF feld2%(MAX(1,f3&-1),MIN(78,f4&+2)-1)=15
' inz%=640*(MAX(1,f3&-1))+(MIN(78,f4&+2)-1)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' feld2%(MAX(1,f3&-1),MIN(78,f4&+2)+1)=BSET(feld2%(MAX(1,f3&-1),MIN(78,f4&+2)+1),1)
' IF feld2%(MAX(1,f3&-1),MIN(78,f4&+2)+1)=15
' inz%=640*(MAX(1,f3&-1))+(MIN(78,f4&+2)+1)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' '
' tst%=80*lblock_tsty%+f4&-638
' ~C:treffer2%(L:XBIOS(2),L:V:bild$,L:tst%-640,L:masken%+288)
' ~XBIOS(32,L:zisch%)
' ENDIF
' IF feld%(f1&,MAX(0,f2&-1))=200 ! links, oben
' feld2%(f3&,MAX(2,f4&-1))=200
' '
' feld2%(f3&-1,MAX(2,f4&-1))=BSET(feld2%(f3&-1,MAX(2,f4&-1)),2)
' IF feld2%(f3&-1,MAX(2,f4&-1))=15
' inz%=640*(f3&-1)+MAX(2,f4&-1)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' feld2%(f3&+1,MAX(2,f4&-1))=BSET(feld2%(f3&+1,MAX(2,f4&-1)),3)
' IF feld2%(f3&+1,MAX(2,f4&-1))=15
' inz%=640*(f3&+1)+MAX(2,f4&-1)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' '
' tst%=80*lblock_tsty%+f4&-1
' ~C:treffer2%(L:XBIOS(2),L:V:bild$,L:tst%-640,L:masken%+288)
' ~XBIOS(32,L:zisch%)
' ENDIF
' IF feld%(f1&+1,MAX(0,f2&-1))=200 ! links, unten
' feld2%(f3&+2,MAX(2,f4&-1))=200
' '
' feld2%(f3&+2-1,MAX(2,f4&-1))=BSET(feld2%(f3&+2-1,MAX(2,f4&-1)),2)
' IF feld2%(f3&+2-1,MAX(2,f4&-1))=15
' inz%=640*(f3&+2-1)+MAX(2,f4&-1)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' feld2%(f3&+2+1,MAX(2,f4&-1))=BSET(feld2%(f3&+2+1,MAX(2,f4&-1)),3)
' IF feld2%(f3&+2+1,MAX(2,f4&-1))=15
' inz%=640*(f3&+2+1)+MAX(2,f4&-1)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' '
' tst%=80*lblock_tsty%+f4&+1279
' ~C:treffer2%(L:XBIOS(2),L:V:bild$,L:tst%-640,L:masken%+288)
' ~XBIOS(32,L:zisch%)
' ENDIF
' IF feld%(MIN(25,f1&+2),f2&)=200 ! unten, links
' feld2%(MIN(48,f3&+3),f4&)=200
' '
' feld2%(MIN(48,f3&+3),f4&-1)=BSET(feld2%(MIN(48,f3&+3),f4&-1),0)
' IF feld2%(MIN(48,f3&+3),MAX(2,f4&-1))=15
' inz%=640*(MIN(48,f3&+3))+MAX(2,f4&-1)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' feld2%(MIN(48,f3&+3),f4&+1)=BSET(feld2%(MIN(48,f3&+3),f4&+1),1)
' IF feld2%(MIN(48,f3&+3),MAX(2,f4&+1))=15
' inz%=640*(MIN(48,f3&+3))+MAX(2,f4&+1)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' '
' tst%=80*lblock_tsty%+f4&+1920
' ~C:treffer2%(L:XBIOS(2),L:V:bild$,L:tst%-640,L:masken%+288)
' ~XBIOS(32,L:zisch%)
' ENDIF
' IF feld%(MIN(25,f1&+2),MIN(40,f2&+1))=200 ! unten, rechts
' feld2%(MIN(48,f3&+3),MIN(78,f4&+2))=200
' '
' feld2%(MIN(48,f3&+3),MIN(78,f4&+2)-1)=BSET(feld2%(MIN(48,f3&+3),MIN(78,f4&+2)-1),0)
' IF feld2%(MIN(48,f3&+3),MIN(78,f4&+2)-1)=15
' inz%=640*(MIN(48,f3&+3))+MIN(78,f4&+2)-1-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' feld2%(MIN(48,f3&+3),MIN(78,f4&+2)+1)=BSET(feld2%(MIN(48,f3&+3),MIN(78,f4&+2)+1),1)
' IF feld2%(MIN(48,f3&+3),MIN(78,f4&+2)+1)=15
' inz%=640*(MIN(48,f3&+3))+MIN(78,f4&+2)+1-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' '
' tst%=80*lblock_tsty%+f4&+1922
' ~C:treffer2%(L:XBIOS(2),L:V:bild$,L:tst%-640,L:masken%+288)
' ~XBIOS(32,L:zisch%)
' ENDIF
' IF feld%(f1&,MIN(40,f2&+2))=200 ! rechts, oben
' feld2%(f3&,MIN(78,f4&+3))=200
' '
' feld2%(f3&-1,MIN(78,f4&+3))=BSET(feld2%(f3&-1,MIN(78,f4&+3)),2)
' IF feld2%(f3&-1,MIN(78,f4&+3))=15
' inz%=640*(f3&-1)+MIN(78,f4&+3)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' feld2%(f3&+1,MIN(78,f4&+3))=BSET(feld2%(f3&+1,MIN(78,f4&+3)),3)
' IF feld2%(f3&+1,MIN(78,f4&+3))=15
' inz%=640*(f3&+1)+MIN(78,f4&+3)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' '
' tst%=80*lblock_tsty%+f4&+3
' ~C:treffer2%(L:XBIOS(2),L:V:bild$,L:tst%-640,L:masken%+288)
' ~XBIOS(32,L:zisch%)
' ENDIF
' IF feld%(MIN(25,f1&+1),MIN(40,f2&+2))=200 ! rechts, unten
' feld2%(MIN(48,f3&+2),MIN(78,f4&+3))=200
' '
' feld2%(MIN(48,f3&+2)-1,MIN(78,f4&+3))=BSET(feld2%(MIN(48,f3&+2)-1,MIN(78,f4&+3)),2)
' IF feld2%(MIN(48,f3&+2)-1,MIN(78,f4&+3))=15
' inz%=640*(MIN(48,f3&+2)-1)+MIN(78,f4&+3)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' feld2%(MIN(48,f3&+2)+1,MIN(78,f4&+3))=BSET(feld2%(MIN(48,f3&+2)+1,MIN(78,f4&+3)),3)
' IF feld2%(MIN(48,f3&+2)+1,MIN(78,f4&+3))=15
' inz%=640*(MIN(48,f3&+2)+1)+MIN(78,f4&+3)-640
' ~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
' ENDIF
' '
' tst%=80*lblock_tsty%+f4&+1283
' ~C:treffer2%(L:XBIOS(2),L:V:bild$,L:tst%-640,L:masken%+288)
' ~XBIOS(32,L:zisch%)
' ENDIF
CLR lblock_tsty%
RETURN
'
'
PROCEDURE masken
CLR mas
RESTORE lauf
DO
READ lauf|
BYTE{masken%+mas}=lauf|
INC mas
EXIT IF mas=496
LOOP
lauf:
' Blinker:-----------------------------
DATA &X00000000
DATA &X00100000
DATA &X00111110
DATA &X00111100
DATA &X00111100
DATA &X01111100
DATA &X00000100
DATA &X00000000
'
DATA &X00000000
DATA &X01111110
DATA &X01111110
DATA &X01100110
DATA &X01100110
DATA &X01111110
DATA &X01111110
DATA &X00000000
'
DATA &X11111111
DATA &X10000001
DATA &X10111101
DATA &X10111101
DATA &X10111101
DATA &X10111101
DATA &X10000001
DATA &X11111111
'
DATA &X10000010
DATA &X00001101
DATA &X01011000
DATA &X01111100
DATA &X00111110
DATA &X00011010
DATA &X10110000
DATA &X01000001
' Ende Blinker ----------------------------------mas=32
'
' Sprite normal: (masken%+32)
DATA &X11111111,&X11111111,&X11111111,&X11111111
DATA &X10000000,&X00000000,&X00000000,&X00000011
DATA &X10000000,&X00000000,&X00000000,&X00000111
DATA &X10011111,&X11111111,&X11111111,&X11111111
DATA &X10011111,&X11111111,&X11111111,&X11110111
DATA &X10011111,&X11111111,&X11111111,&X11100111
DATA &X10011100,&X00000000,&X00000000,&X00100111
DATA &X10011100,&X00000000,&X00000000,&X00100111
DATA &X10011100,&X00000000,&X00000000,&X00100111
DATA &X10011100,&X00000000,&X00000000,&X00100111
DATA &X10011111,&X11111111,&X11111111,&X11100111
DATA &X10011000,&X00000000,&X00000000,&X00000111
DATA &X10010000,&X00000000,&X00000000,&X00000111
DATA &X10111111,&X11111111,&X11111111,&X11111111
DATA &X11111111,&X11111111,&X11111111,&X11111111
DATA &X11111111,&X11111111,&X11111111,&X11111111
'
' Sprite Loch: (masken%+96)
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000011,&X11111111,&X11111111,&X11000000
DATA &X00000011,&X11111111,&X11111111,&X11000000
DATA &X00000011,&X11111111,&X11111111,&X11000000
DATA &X00000011,&X11111111,&X11111111,&X11000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
'
' sprite Fragezeichen: (masken%+160)
DATA &X11111111,&X11111111,&X11111111,&X11111111
DATA &X10000000,&X00000000,&X00000000,&X00000001
DATA &X10111111,&X11111111,&X11111111,&X11111101
DATA &X10100000,&X00000000,&X00000000,&X00000101
DATA &X10100000,&X00000000,&X00000000,&X00000101
DATA &X10100000,&X00000000,&X00000000,&X00000101
DATA &X10100000,&X00000000,&X00000000,&X00000101
DATA &X10100000,&X00000000,&X00000000,&X00000101
DATA &X10100000,&X00000000,&X00000000,&X00000101
DATA &X10100000,&X00000000,&X00000000,&X00000101
DATA &X10100000,&X00000000,&X00000000,&X00000101
DATA &X10100000,&X00000000,&X00000000,&X00000101
DATA &X10100000,&X00000000,&X00000000,&X00000101
DATA &X10111111,&X11111111,&X11111111,&X11111101
DATA &X10000000,&X00000000,&X00000000,&X00000001
DATA &X11111111,&X11111111,&X11111111,&X11111111
'
' sprite Fragezeichen-Loch: (masken%+224)
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00011111,&X11111111,&X11111111,&X11111000
DATA &X00010000,&X00000000,&X00000000,&X11111000
DATA &X00010000,&X00000000,&X00000111,&X11111000
DATA &X00010011,&X11111111,&X11111111,&X11111000
DATA &X00010011,&X11111111,&X11111111,&X11111000
DATA &X00010111,&X11111111,&X11111111,&X11111000
DATA &X00011111,&X11111111,&X11111111,&X11111000
DATA &X00011111,&X11111111,&X11111111,&X11111000
DATA &X00011111,&X11111111,&X11111111,&X11111000
DATA &X00011111,&X11111111,&X11111111,&X11111000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
DATA &X00000000,&X00000000,&X00000000,&X00000000
' masken%+288: (fr treffer% und treffer2%)
DATA &X11111111
DATA &X11111111
DATA &X11100111
DATA &X11010011
DATA &X11001111
DATA &X11111111
DATA &X11111111
DATA &X11111111
' masken%+296: Lufer-Tod
DATA &X11111111
DATA &X11100111
DATA &X11100111
DATA &X10000001
DATA &X10000001
DATA &X11100111
DATA &X11100111
DATA &X11111111
' masken%+304: fr Innen (Schild)
DATA &X11000011
DATA &X10111101
DATA &X01100110
DATA &X01000010
DATA &X01000110
DATA &X01101110
DATA &X10111101
DATA &X11000011
' masken%+312: 1. Alternative fr Innen (Ding, schattig)
DATA &X11111111
DATA &X11000111
DATA &X10000011
DATA &X10000111
DATA &X10101011
DATA &X11010111
DATA &X11111111
DATA &X11111111
' masken%+320: 2. Alternative fr innen (Kugel/Diagonalrand)
DATA &X11011011
DATA &X10111101
DATA &X01100110
DATA &X11000111
DATA &X11001111
DATA &X01111110
DATA &X10111101
DATA &X11011011
' masken%+328: 3. Alternative fr Innen (Schneeflocke mit Kugel)
DATA &X01011010
DATA &X11000011
DATA &X00011000
DATA &X10101101
DATA &X10111101
DATA &X00011000
DATA &X11000011
DATA &X01011010
' masken%+336: 4. Alternative fr Innen (Grokugel)
DATA &X01111110
DATA &X11000111
DATA &X10000011
DATA &X10000011
DATA &X10000011
DATA &X11000111
DATA &X11111111
DATA &X01111110
' masken%+344: 5. Alternative fr innen (weie Grokugel)
DATA &X10000001
DATA &X00000100
DATA &X00000010
DATA &X00000010
DATA &X00000010
DATA &X01000110
DATA &X00111100
DATA &X10000001
' masken%+352 6. Alternative fr Innen (weie Feld)
DATA &X11000011
DATA &X10000001
DATA &X00000000
DATA &X00000000
DATA &X00000000
DATA &X00000000
DATA &X10000001
DATA &X11000011
' masken%+360
DATA &X00000000
DATA &X00000000
DATA &X00000000
DATA &X00000000
DATA &X00000000
DATA &X00000000
DATA &X00000000
DATA &X00000000
' masken%+368
'
' Sprite Loch: (masken%+368)
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
DATA &X00000000,&X11111111,&X11111111,&X00000000
'
' Sprite Loch: (masken%+432)
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
DATA &X11111111,&X00000000,&X00000000,&X11111111
' masken%+496
'
CLR mas
DIM sprite%(5)
DIM loch%(5)
sprite%(0)=32
loch%(0)=96
sprite%(1)=160
loch%(1)=224
RETURN
'
'
'
PROCEDURE weiss(wx%,wy%) !=weie Kugel
zufz%=1280*wx%+2*wy%-640
~C:ding2%(L:XBIOS(2),L:V:bild$,L:zufz%)
RETURN
'
'
PROCEDURE tst_innen(plus%)
inz%=1280*tuy%+tux%*2-640
inz%=inz%+plus%
~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:innen%)
RETURN
'
PROCEDURE tst_weiss(tst_uy%,tst_ux%,w_plus%)
' inz%=1280*tst_uy%+tst_ux%*2-640
inz%=1280*tst_uy%/2+tst_ux%-640
inz%=inz%+w_plus%
~C:treffer%(L:XBIOS(2),L:V:bild$,L:inz%,L:masken%+360)
RETURN
'
PROCEDURE treffer_umfeld(tuy%,tux%,tuzaehler&)
' --------------------------
' Treffer selbst:
feld%(tuy%,tux%)=200
feld2%(tuy%*2,tux%*2)=200
tst%=1280*tuy%+tux%*2-640
~C:treffer2%(L:XBIOS(2),L:V:bild$,L:tst%,L:masken%+288)
~XBIOS(32,L:zisch%)
' --------------------------
' Treffer Umfeld:
IF feld%(tuy%+1,tux%)=200
feld2%(tuy%*2+1,tux%*2)=200
feld2%(tuy%*2+1,tux%*2-1)=BSET(feld2%(tuy%*2+1,tux%*2-1),0)
IF feld2%(tuy%*2+1,tux%*2-1)=15
tst_innen(+640-1)
15_umfeld(tuy%*2+1,tux%*2-1)
ENDIF
feld2%(tuy%*2+1,tux%*2+1)=BSET(feld2%(tuy%*2+1,tux%*2+1),1)
IF feld2%(tuy%*2+1,tux%*2+1)=15
tst_innen(+640+1)
15_umfeld(tuy%*2+1,tux%*2+1)
ENDIF
~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%+640,L:masken%+288)
' ~XBIOS(32,L:zisch%)
IF tuzaehler&
count(20)
ENDIF
ENDIF
IF feld%(tuy%-1,tux%)=200
feld2%(tuy%*2-1,tux%*2)=200
feld2%(tuy%*2-1,tux%*2-1)=BSET(feld2%(tuy%*2-1,tux%*2-1),0)
IF feld2%(tuy%*2-1,tux%*2-1)=15
tst_innen(-640-1)
15_umfeld(tuy%*2-1,tux%*2-1)
ENDIF
feld2%(tuy%*2-1,tux%*2+1)=BSET(feld2%(tuy%*2-1,tux%*2+1),1)
IF feld2%(tuy%*2-1,tux%*2+1)=15
tst_innen(-640+1)
15_umfeld(tuy%*2-1,tux%*2+1)
ENDIF
~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%-640,L:masken%+288)
' ~XBIOS(32,L:zisch%)
IF tuzaehler&
count(20)
ENDIF
ENDIF
IF feld%(tuy%,tux%+1)=200
feld2%(tuy%*2,tux%*2+1)=200
feld2%(tuy%*2-1,tux%*2+1)=BSET(feld2%(tuy%*2-1,tux%*2+1),2)
IF feld2%(tuy%*2-1,tux%*2+1)=15
tst_innen(-640+1)
15_umfeld(tuy%*2-1,tux%*2+1)
ENDIF
feld2%(tuy%*2+1,tux%*2+1)=BSET(feld2%(tuy%*2+1,tux%*2+1),3)
IF feld2%(tuy%*2+1,tux%*2+1)=15
tst_innen(+640+1)
15_umfeld(tuy%*2+1,tux%*2+1)
ENDIF
~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%+1,L:masken%+288)
' ~XBIOS(32,L:zisch%)
IF tuzaehler&
count(20)
ENDIF
ENDIF
IF feld%(tuy%,tux%-1)=200
feld2%(tuy%*2,tux%*2-1)=200
feld2%(tuy%*2-1,tux%*2-1)=BSET(feld2%(tuy%*2-1,tux%*2-1),2)
IF feld2%(tuy%*2-1,tux%*2-1)=15
tst_innen(-640-1)
15_umfeld(tuy%*2-1,tux%*2-1)
ENDIF
feld2%(tuy%*2+1,tux%*2-1)=BSET(feld2%(tuy%*2+1,tux%*2-1),3)
IF feld2%(tuy%*2+1,tux%*2-1)=15
tst_innen(+640-1)
15_umfeld(tuy%*2+1,tux%*2-1)
ENDIF
~C:treffer%(L:XBIOS(2),L:V:bild$,L:tst%-1,L:masken%+288)
' ~XBIOS(32,L:zisch%)
IF tuzaehler&
count(20)
ENDIF
ENDIF
' -------------------------------------------------
RETURN
'
PROCEDURE 15_umfeld(uy%,ux%)
GOTO nein
IF feld2%(uy%+2,ux%)=15
tst_weiss(uy%,ux%,0)
tst_weiss(uy%,ux%,640)
tst_weiss(uy%,ux%,1280)
ENDIF
IF feld2%(uy%,ux%+2)=15
tst_weiss(uy%,ux%,0)
tst_weiss(uy%,ux%,1)
tst_weiss(uy%,ux%,2)
ENDIF
IF feld2%(uy%-2,ux%)=15
tst_weiss(uy%,ux%,0)
tst_weiss(uy%,ux%,-640)
tst_weiss(uy%,ux%,-1280)
ENDIF
IF feld2%(uy%,ux%-2)=15
tst_weiss(uy%,ux%,0)
tst_weiss(uy%,ux%,-1)
tst_weiss(uy%,ux%,-2)
ENDIF
nein:
RETURN