'Catch the Kreis
'by Dregen Rocks
'copyright 2001
'Version 1.72


'---Unterprogramme definieren---
DECLARE SUB ginit ()                        'Diverse Werte einlesen
DECLARE SUB logo2 ()                        'Zweites Intro
DECLARE SUB optio ()                        'Optionsmen
DECLARE SUB prefer ()                       'Prferenzen vor einem Spiel
DECLARE SUB arena ()                        'Spielfeld zeichnen
DECLARE SUB prefight ()                     'Ankndigung
DECLARE SUB player ()                       'Die Spielersteuerung
DECLARE SUB ki ()                           'Anders: Die A.I.
DECLARE SUB kimalen ()                      'Das O wird gemalt
DECLARE SUB messen ()                       'Zeitmesser
DECLARE SUB events ()                       'Ereignisse
DECLARE SUB winwin ()                       'Was passiert bei Gewinn?
DECLARE SUB high ()                         'Highscore-Anzeige
DECLARE SUB highkey (s!)                    'Highscore-Verschlsselung
DECLARE FUNCTION Zufall! (tief!, hoch!)     'Generierung einer Zufi-Zahl
DECLARE FUNCTION blocked! (i1!, i2!)        'Ist ein Feld blockiert?
'------

'---Variablen deklarieren---

'Die KI-Umgebung
TYPE ki
    xdir AS SINGLE
    odir AS SINGLE
    deep AS SINGLE
    xran AS SINGLE
END TYPE

DIM SHARED Kreis AS ki

'Pausenwerte
DIM SHARED pganz, p AS LONG

'Die Positionen der Protagonisten
DIM SHARED sx(0 TO 1) AS SINGLE
DIM SHARED sy(0 TO 1) AS SINGLE

'Das Spielfeld definieren
TYPE Spielfeld
    xda AS SINGLE                            'Ist das X vorhanden?
    oda AS SINGLE                            'Ist das O vorhanden?
    bda AS SINGLE                            'Ist eine Barriere da?
    tda AS SINGLE                            'Teleporter vorhanden?
    fda AS SINGLE                            'Falle vorhanden?
    dda AS SINGLE                            'Alkoholiker-Feld da?
END TYPE

'Teleporter definieren
TYPE teleporter
    x AS SINGLE
    y AS SINGLE
END TYPE
DIM SHARED tp(0 TO 300) AS teleporter
DIM SHARED tanzahl AS INTEGER

'Jedes einzelne Feld
DIM SHARED box(-1 TO 30, -1 TO 19) AS Spielfeld
DIM SHARED Title$, Creator$, CFarbe%, Dedicated$, Dedicated2$

'Grafikspeicher fr die Symbole
DIM SHARED symbol(0 TO 100, 0 TO 1) AS INTEGER
DIM SHARED tpgraf(0 TO 100, 0 TO 3) AS INTEGER
DIM SHARED ttgraf(0 TO 100, 0 TO 1) AS INTEGER
DIM SHARED drgraf(0 TO 100, 0 TO 3) AS INTEGER
DIM SHARED blgraf(0 TO 100) AS INTEGER

'Indizes fr die Animationen
DIM SHARED tti, tpi, dri AS INTEGER

'Promille-Zhler... ;-)
DIM SHARED xwrongmove AS INTEGER

'Fr das Logo2
DIM SHARED letter(0 TO 200, 1 TO 15)
DIM SHARED posx(1 TO 15)
DIM SHARED posy(1 TO 15)
DIM SHARED posd(1 TO 15)
                                
'Damit das Programm auch immer wei, wo das Spiel spielt
DIM SHARED feld AS SINGLE
DIM SHARED afeld AS SINGLE
LET afeld = 21                              'WICHTIG!!!

'Zur Zeitberechnung
DIM SHARED Zeit, zz1 AS LONG

'Bremsfaktor
DIM SHARED bfaktor, bremse AS SINGLE

'Gerade in einer Falle?
DIM SHARED intrap, spenalty, zpenalty AS INTEGER

'Highscore definieren
TYPE Eintrag
    callsign AS STRING * 10                         'Name
    bestzeit AS INTEGER                             'Zeit
END TYPE

'Highscores
DIM SHARED heintrag(0 TO 10, 0 TO afeld) AS Eintrag
DIM SHARED score

'Fr das Coding der Highscore
DIM SHARED cs(1 TO 10, 1 TO 10, 0 TO afeld) AS INTEGER
DIM SHARED bz(1 TO 10, 0 TO afeld) AS INTEGER
DIM SHARED tile(1 TO 10) AS STRING * 1

DIM SHARED eing$
DIM SHARED xmove, omove AS SINGLE
DIM SHARED treffer
DIM SHARED ex

'---Variablen Ende---

'---Programm beginnt---
ginit
logo2

'---HAUPTSCHLEIFE---
Game:

optio

'Spiel initialisieren
arena

Zeit = 0
bremse = 0
treffer = 0
bfalle = 0
box(0, 0).xda = 1
box(28, 17).oda = 1
sx(0) = 0
sy(0) = 0
sx(1) = 28
sy(1) = 17
tti = 1
tpi = 1
dri = 0
bfaktor = 1
ex = 0
zz1 = VAL(RIGHT$(TIME$, 2))
xwrongmove = 0
PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET
PUT (sx(1) * 11 + 1, sy(1) * 11 + 1), symbol(0, 1), PSET

'---HAUPTSCHLEIFE DES EIGENTLICHEN SPIELS---
DO
   
    IF intrap = 1 THEN GOTO passen
    eing$ = INKEY$
    player
passen:
   
    IF bremse >= bfaktor THEN
        ki
        kimalen
        bremse = 0
    END IF

    messen

    events
   
    bremse = bremse + 1
    IF ex = 1 THEN GOTO newgame

    eing$ = ""

LOOP UNTIL treffer = 1

winwin

newgame:
GOTO Game

'---HAUPTSCHLEIFE ENDE---


'---GRAFIKEN---
symbol:
DATA 14,43,20,20,20,20,20,43,14
DATA 43,14,43,20,20,20,43,14,43
DATA 20,43,14,43,20,43,14,43,20
DATA 20,20,43,14,43,14,43,20,20
DATA 20,20,20,43,14,43,20,20,20
DATA 20,20,43,14,43,14,43,20,20
DATA 20,43,14,43,20,43,14,43,20
DATA 43,14,43,20,20,20,43,14,43
DATA 14,43,20,20,20,20,20,43,14

Kreis:
DATA 20,20,04,04,04,04,04,20,20
DATA 20,04,12,12,12,12,12,04,20
DATA 04,12,04,04,04,04,04,12,04
DATA 04,12,04,20,20,20,04,12,04
DATA 04,12,04,20,20,20,04,12,04
DATA 04,12,04,20,20,20,04,12,04
DATA 04,12,04,04,04,04,04,12,04
DATA 20,04,12,12,12,12,12,04,20
DATA 20,20,04,04,04,04,04,20,20

teleporter1:
DATA 20,20,20,20,20,20,20,20,20
DATA 20,20,20,20,20,20,20,20,20
DATA 20,20,20,20,20,20,20,20,20
DATA 20,20,20,09,09,09,20,20,20
DATA 20,20,20,09,01,09,20,20,20
DATA 20,20,20,09,09,09,20,20,20
DATA 20,20,20,20,20,20,20,20,20
DATA 20,20,20,20,20,20,20,20,20
DATA 20,20,20,20,20,20,20,20,20

teleporter2:
DATA 20,20,20,20,20,20,20,20,20
DATA 20,20,20,20,20,20,20,20,20
DATA 20,20,01,01,01,01,01,20,20
DATA 20,20,01,09,09,09,01,20,20
DATA 20,20,01,09,01,09,01,20,20
DATA 20,20,01,09,09,09,01,20,20
DATA 20,20,01,01,01,01,01,20,20
DATA 20,20,20,20,20,20,20,20,20
DATA 20,20,20,20,20,20,20,20,20

teleporter3:
DATA 20,20,20,20,20,20,20,20,20
DATA 20,09,09,09,09,09,09,09,20
DATA 20,09,01,01,01,01,01,09,20
DATA 20,09,01,09,09,09,01,09,20
DATA 20,09,01,09,01,09,01,09,20
DATA 20,09,01,09,09,09,01,09,20
DATA 20,09,01,01,01,01,01,09,20
DATA 20,09,09,09,09,09,09,09,20
DATA 20,20,20,20,20,20,20,20,20

teleporter4:
DATA 01,01,01,01,01,01,01,01,01
DATA 01,09,09,09,09,09,09,09,01
DATA 01,09,01,01,01,01,01,09,01
DATA 01,09,01,09,09,09,01,09,01
DATA 01,09,01,09,01,09,01,09,01
DATA 01,09,01,09,09,09,01,09,01
DATA 01,09,01,01,01,01,01,09,01
DATA 01,09,09,09,09,09,09,09,01
DATA 01,01,01,01,01,01,01,01,01

falle1:
DATA 06,06,06,06,06,06,06,06,06,06,06
DATA 06,06,06,06,06,00,00,06,00,00,06
DATA 06,00,00,06,06,06,06,06,06,06,06
DATA 06,06,06,06,00,00,06,00,00,06,06
DATA 06,06,06,06,06,06,06,06,06,06,06
DATA 06,06,00,00,00,06,02,06,02,02,06
DATA 06,06,06,06,06,06,02,06,02,06,02
DATA 06,06,06,06,06,06,06,02,06,02,06
DATA 06,00,00,06,06,06,06,02,02,02,06
DATA 06,06,06,06,06,00,00,06,06,06,06
DATA 06,06,06,06,06,06,06,06,06,06,06

falle2:
DATA 06,06,06,06,06,06,06,06,06,06,06
DATA 06,00,00,06,00,00,06,06,06,06,06
DATA 06,06,06,06,06,06,06,06,00,00,06
DATA 06,06,06,06,00,00,06,00,00,06,06
DATA 06,00,00,00,06,06,06,06,06,06,06
DATA 06,06,06,06,06,02,06,02,02,06,06
DATA 06,06,06,06,06,06,02,06,02,06,02
DATA 06,06,06,06,06,06,06,02,06,02,06
DATA 06,06,06,06,06,06,06,02,02,02,06
DATA 06,06,00,00,06,00,00,06,06,06,06
DATA 06,06,06,06,06,06,06,06,06,06,06

drunk1:
DATA 20,20,20,20,45,20,20,20,20
DATA 20,20,20,45,45,45,20,20,20
DATA 20,20,45,45,45,45,45,20,20
DATA 20,04,04,45,45,45,04,04,20
DATA 04,04,04,45,45,45,04,04,04
DATA 20,04,04,04,04,04,04,04,20
DATA 20,20,04,04,04,04,04,20,20
DATA 20,20,20,04,04,04,20,20,20
DATA 20,20,20,20,04,20,20,20,20

drunk2:
DATA 20,20,20,20,04,20,20,20,20
DATA 20,20,20,04,04,04,20,20,20
DATA 20,20,04,04,04,04,45,20,20
DATA 20,04,04,04,45,45,45,45,20
DATA 04,04,04,04,45,45,45,45,45
DATA 20,04,04,04,45,45,45,45,20
DATA 20,20,04,04,04,04,45,20,20
DATA 20,20,20,04,04,04,20,20,20
DATA 20,20,20,20,04,20,20,20,20

drunk3:
DATA 20,20,20,20,04,20,20,20,20
DATA 20,20,20,04,04,04,20,20,20
DATA 20,20,04,04,04,04,04,20,20
DATA 20,04,04,04,04,04,04,04,20
DATA 04,04,04,45,45,45,04,04,04
DATA 20,04,04,45,45,45,04,04,20
DATA 20,20,45,45,45,45,45,20,20
DATA 20,20,20,45,45,45,20,20,20
DATA 20,20,20,20,45,20,20,20,20

drunk4:
DATA 20,20,20,20,04,20,20,20,20
DATA 20,20,20,04,04,04,20,20,20
DATA 20,20,45,04,04,04,04,20,20
DATA 20,45,45,45,45,04,04,04,20
DATA 45,45,45,45,45,04,04,04,04
DATA 20,45,45,45,45,04,04,04,20
DATA 20,20,45,04,04,04,04,20,20
DATA 20,20,20,04,04,04,20,20,20
DATA 20,20,20,20,04,20,20,20,20

block:
DATA 65,65,65,65,65,65,65,65,65,65,65
DATA 65,04,04,04,04,07,04,04,04,04,65
DATA 65,04,04,04,04,07,04,04,04,04,65
DATA 65,07,07,07,07,07,07,07,07,07,65
DATA 65,04,07,04,04,04,04,07,04,04,65
DATA 65,04,07,04,04,04,04,07,04,04,65
DATA 65,07,07,07,07,07,07,07,07,07,65
DATA 65,04,04,04,04,07,04,04,04,04,65
DATA 65,04,04,04,04,07,04,04,04,04,65
DATA 65,07,07,07,07,07,07,07,07,07,65
DATA 65,65,65,65,65,65,65,65,65,65,65

letters:
DATA "C",14,"a",14,"t",14,"c",14,"h",14
DATA " ",0
DATA "t",1,"h",1,"e",1
DATA " ",0
DATA "K",4, "r",4,"e",4,"i",4,"s",4

'---GRAFIKEN ENDE---

SUB arena

OPEN "ctkdat/bozen.ctk" FOR INPUT AS #2

'Bis zum aktuellen Level lesen
IF feld <> 0 THEN
    FOR i = 1 TO feld
        INPUT #2, Title$
        INPUT #2, Creator$
        INPUT #2, CFarbe$
        INPUT #2, Dedicated$
        INPUT #2, Dedicated2$
        FOR y = 0 TO 17: FOR x = 0 TO 28
            INPUT #2, dummy
        NEXT x: NEXT y
    NEXT i
END IF

'---DATEN EINLESEN---
tanzahl = 1

INPUT #2, Title$
INPUT #2, Creator$
INPUT #2, CFarbe$
INPUT #2, Dedicated$
INPUT #2, Dedicated2$
CFarbe% = VAL(CFarbe$)

prefight

'---SPIELFELD AUFBAUEN---
CLS
LINE (0, 0)-(319, 198), 20, BF

FOR y = 0 TO 17
    FOR x = 0 TO 28
        INPUT #2, B
        IF B = 1 THEN
            PUT (x * 11, y * 11), blgraf(0), PSET
            box(x, y).bda = 1
            box(x, y).tda = 0
            box(x, y).fda = 0
            box(x, y).dda = 0
            box(x, y).oda = 0
            box(x, y).xda = 0
        ELSEIF B = 2 THEN
            PUT (x * 11 + 1, y * 11 + 1), tpgraf(0, 0), PSET
            box(x, y).bda = 0
            box(x, y).tda = 1
            box(x, y).fda = 0
            box(x, y).dda = 0
            box(x, y).oda = 0
            box(x, y).xda = 0
            tp(tanzahl).x = x
            tp(tanzahl).y = y
            tanzahl = tanzahl + 1
        ELSEIF B = 3 THEN
            PUT (x * 11, y * 11), ttgraf(0, 0), PSET
            box(x, y).bda = 0
            box(x, y).tda = 0
            box(x, y).fda = 1
            box(x, y).dda = 0
            box(x, y).oda = 0
            box(x, y).xda = 0
        ELSEIF B = 4 THEN
            PUT (x * 11 + 1, y * 11 + 1), drgraf(0, 0), PSET
            box(x, y).bda = 0
            box(x, y).tda = 0
            box(x, y).fda = 0
            box(x, y).dda = 1
            box(x, y).oda = 0
            box(x, y).xda = 0
        ELSE
            box(x, y).bda = 0
            box(x, y).tda = 0
            box(x, y).fda = 0
            box(x, y).dda = 0
            box(x, y).oda = 0
            box(x, y).xda = 0
        END IF
    NEXT x
NEXT y
tanzahl = tanzahl - 1
LINE (0, 0)-(319, 198), 54, B 'Auenrahmen

CLOSE #2

END SUB

FUNCTION blocked (x, y)
IF x < 0 OR y < 0 THEN
    blocked = 1
    EXIT FUNCTION
ELSEIF x > 28 OR y > 17 THEN
    blocked = 1
    EXIT FUNCTION
ELSEIF box(x, y).bda = 1 THEN
    blocked = 1
    EXIT FUNCTION
ELSEIF box(x, y).xda = 1 THEN
    blocked = 1
    EXIT FUNCTION
ELSE
    blocked = 0
END IF

END FUNCTION

SUB events
    FOR y = 0 TO 17
        FOR x = 0 TO 28
           
            '---Objektsteuerung---
            'Beamer
            IF omove = 1 THEN
                IF box(x, y).tda = 1 AND box(x, y).oda = 1 THEN
                    FOR s = tanzahl TO 1 STEP -1
                        IF x = tp(s).x AND y = tp(s).y THEN EXIT FOR
                    NEXT s
                    d = s + 5
                    IF d > tanzahl THEN
                        d = (d - tanzahl)
                        IF d = s THEN d = s + 4
                        IF d > tanzahl THEN d = (d - tanzahl)
                    END IF
                    box(x, y).oda = 0: box(tp(d).x, tp(d).y).oda = 1
                    sx(1) = tp(d).x: sy(1) = tp(d).y
                    Kreis.odir = 0
                    omove = 0
                END IF
            END IF
            IF xmove = 1 THEN
                IF box(x, y).tda = 1 AND box(x, y).xda = 1 THEN
                    FOR s = tanzahl TO 1 STEP -1
                        IF x = tp(s).x AND y = tp(s).y THEN EXIT FOR
                    NEXT s
                    d = s + 5
                    IF d > tanzahl THEN
                        d = (d - tanzahl)
                        IF d = s THEN d = s + 4
                        IF d > tanzahl THEN d = (d - tanzahl)
                    END IF
                    box(x, y).xda = 0: box(tp(d).x, tp(d).y).xda = 1
                    sx(0) = tp(d).x: sy(0) = tp(d).y
                    xmove = 0
                END IF
            END IF
           
            'Alkoholiker
            IF xmove = 1 THEN
                IF box(x, y).dda = 1 AND box(x, y).xda = 1 THEN
                    xwrongmove = 10
                END IF
            END IF
           
            'Fallen
            IF xmove = 1 AND box(x, y).xda = 1 AND box(x, y).fda = 1 THEN
                intrap = 1
                spenalty = VAL(RIGHT$(TIME$, 2))
                IF spenalty = 59 THEN zpenalty = 0
                IF spenalty < 59 THEN zpenalty = spenalty + 1
            END IF
            IF VAL(RIGHT$(TIME$, 2)) = zpenalty THEN intrap = 0
           
            '---Animationssteuerung---
            IF box(x, y).tda = 1 AND box(x, y).oda = 0 AND box(x, y).xda = 0 THEN
                IF tpi = 0 THEN
                    PUT (x * 11 + 1, y * 11 + 1), tpgraf(0, 0), PSET
                ELSEIF tpi = 1 THEN
                    PUT (x * 11 + 1, y * 11 + 1), tpgraf(0, 1), PSET
                ELSEIF tpi = 2 THEN
                    PUT (x * 11 + 1, y * 11 + 1), tpgraf(0, 2), PSET
                ELSEIF tpi = 3 THEN
                    PUT (x * 11 + 1, y * 11 + 1), tpgraf(0, 3), PSET
                END IF
            END IF
            IF box(x, y).fda = 1 AND box(x, y).oda = 0 AND box(x, y).xda = 0 THEN
                IF tti = 1 THEN
                    PUT (x * 11, y * 11), ttgraf(0, 1), PSET
                ELSE
                    PUT (x * 11, y * 11), ttgraf(0, 0), PSET
                END IF
            END IF
            IF box(x, y).dda = 1 AND box(x, y).oda = 0 AND box(x, y).xda = 0 THEN
                IF dri = 0 THEN
                    PUT (x * 11 + 1, y * 11 + 1), drgraf(0, 0), PSET
                ELSEIF dri = 1 THEN
                    PUT (x * 11 + 1, y * 11 + 1), drgraf(0, 1), PSET
                ELSEIF dri = 2 THEN
                    PUT (x * 11 + 1, y * 11 + 1), drgraf(0, 2), PSET
                ELSEIF dri = 3 THEN
                    PUT (x * 11 + 1, y * 11 + 1), drgraf(0, 3), PSET
                END IF
            END IF

            '---Gewinnberprfung---
            IF box(x, y).xda = 1 AND box(x, y).oda = 1 THEN
                treffer = 1
                box(x, y).xda = 0
                box(x, y).oda = 0
                EXIT SUB
            END IF
           
            '---Abbruch?---
            IF eing$ = CHR$(27) THEN
                box(sx(0), sy(0)).xda = 0
                box(sx(1), sy(1)).oda = 0
                ex = 1
            END IF
        NEXT x
    NEXT y

    IF xmove = 1 THEN xmove = 0
    IF omove = 1 THEN omove = 0

    IF tti = 1 THEN tti = 0 ELSE tti = 1
    tpi = tpi + 1: IF tpi = 4 THEN tpi = 0
    dri = dri + 1: IF dri = 4 THEN dri = 0

END SUB

SUB ginit
CLS
SCREEN 13

'Zusatzfarben
f16 = 668220
PALETTE 16, f16

'Pausenwert bestimmen
p = 0
FOR i = 1 TO 21
    z = 0
    ptime! = TIMER
    WHILE ptime! = TIMER
        z = z + 1
    WEND
    IF i <> 1 THEN p = p + z
NEXT i
pganz = p / 20                    'Pausenwerte

'Symbole einlesen
RESTORE symbol
FOR i% = 0 TO 1
    FOR y = 0 TO 8
        FOR x = 0 TO 8
            READ bit
            PSET (x, y), bit
        NEXT x
    NEXT y
    GET (0, 0)-(8, 8), symbol(0, i%)
NEXT i%

RESTORE teleporter1
FOR i% = 0 TO 3
    FOR y = 0 TO 8
        FOR x = 0 TO 8
            READ bit
            PSET (x, y), bit
        NEXT x
    NEXT y
    GET (0, 0)-(8, 8), tpgraf(0, i%)
NEXT i%

RESTORE drunk1
FOR i% = 0 TO 3
    FOR y = 0 TO 8
        FOR x = 0 TO 8
            READ bit
            PSET (x, y), bit
        NEXT x
    NEXT y
    GET (0, 0)-(8, 8), drgraf(0, i%)
NEXT i%


RESTORE falle1
FOR i% = 0 TO 1
    FOR y = 0 TO 10
        FOR x = 0 TO 10
            READ bit
            PSET (x, y), bit
        NEXT x
    NEXT y
    GET (0, 0)-(10, 10), ttgraf(0, i%)
NEXT i%

RESTORE block
FOR y = 0 TO 10
    FOR x = 0 TO 10
        READ bit
        PSET (x, y), bit
    NEXT x
NEXT y
GET (0, 0)-(10, 10), blgraf(0)



RESTORE letters
FOR i = 1 TO 15
    READ l$
    READ c%
    COLOR c%
    LOCATE 1, 1: PRINT l$
    GET (0, 0)-(7, 7), letter(0, i)
NEXT i

'Highscore einlesen und decodieren
OPEN "ctkdat/highsc.dat" FOR INPUT AS #1

FOR f = 0 TO afeld
    FOR e = 1 TO 10
        FOR B = 1 TO 10
            IF EOF(1) = -1 THEN EXIT FOR
            INPUT #1, cs(B, e, f)
        NEXT B
        IF EOF(1) = -1 THEN EXIT FOR
        INPUT #1, bz(e, f)
    NEXT e
NEXT f
CLOSE #1
highkey (0)

END SUB

SUB high
DO
    COLOR 15
    LOCATE 15, 1
    INPUT "What Field No. (0-21): ", eing$
LOOP UNTIL VAL(eing$) > -1 AND VAL(eing$) < afeld + 1
feld = VAL(eing$)
CLS
LOCATE 1, 13: COLOR 3: PRINT "Field No. "; feld
COLOR 15
LOCATE 5, 12: PRINT "|     Name      |": LOCATE 5, 27: PRINT "| Score"
LOCATE 6, 5: PRINT "---------------------------------"
FOR i = 1 TO 10
    LOCATE i + 6, 6: COLOR 12: PRINT i; "."
    LOCATE i + 6, 12: COLOR 15: PRINT "|"
    LOCATE i + 6, 15: COLOR 14: PRINT heintrag(i, feld).callsign
    LOCATE i + 6, 27: COLOR 15: PRINT "|"
    LOCATE i + 6, 29: COLOR 4: PRINT heintrag(i, feld).bestzeit
NEXT i
COLOR 14
LOCATE 20, 12: PRINT "(Press any Key)"
DO: LOOP WHILE INKEY$ = ""

END SUB

SUB highkey (s)
IF s = 0 THEN                       'laden
    FOR f = 0 TO afeld              'Felder durchgehen
        FOR e = 1 TO 10             'Eintrge von 1 bis 10 durchgehen
            FOR t = 1 TO 10
                tile(t) = " "
            NEXT t
            FOR B = 1 TO 10         'Zeichen durchgehen
                IF cs(B, e, f) <> 0 THEN tile(B) = CHR$(cs(B, e, f) + 59)
            NEXT B
            heintrag(e, f).callsign = tile(1) + tile(2) + tile(3) + tile(4) + tile(5) + tile(6) + tile(7) + tile(8) + tile(9) + tile(10)
            IF bz(e, f) <> 0 THEN bz(e, f) = bz(e, f) + 137
            heintrag(e, f).bestzeit = bz(e, f)
        NEXT e
    NEXT f
END IF
IF s = 1 THEN
    FOR f = 0 TO afeld              'Felder von 0 bis 10 durchgehen
        FOR e = 1 TO 10             'Eintrge von 1 bis 10 durchgehen
            FOR B = 1 TO 10         'Zeichen durchgehen
                tile(B) = MID$(heintrag(e, f).callsign, B, 1)
                IF tile(B) <> " " THEN
                    cs(B, e, f) = ASC(tile(B)) - 59
                ELSE
                    cs(B, e, f) = 0
                END IF
            NEXT B
            IF heintrag(e, f).bestzeit <> 0 THEN
                bz(e, f) = heintrag(e, f).bestzeit - 137
            ELSE
                bz(e, f) = 0
            END IF
        NEXT e
    NEXT f
END IF
END SUB

SUB ki

Kreis.xdir = 0
Kreis.odir = 0

'Abzhlen in welcher Richtung wieviel Platz ist
FOR room2 = 0 TO 9
    IF sy(1) + (room2 + 1) > 17 THEN EXIT FOR
    IF box(sx(1), sy(1) + (room2 + 1)).bda = 1 THEN EXIT FOR
    IF box(sx(1), sy(1) + (room2 + 1)).xda = 1 THEN EXIT FOR
NEXT room2
FOR room4 = 0 TO 9
    IF sx(1) - (room4 + 1) < 0 THEN EXIT FOR
    IF box(sx(1) - (room4 + 1), sy(1)).bda = 1 THEN EXIT FOR
    IF box(sx(1) - (room4 + 1), sy(1)).xda = 1 THEN EXIT FOR
NEXT room4
FOR room6 = 0 TO 9
    IF sx(1) + (room6 + 1) > 28 THEN EXIT FOR
    IF box(sx(1) + (room6 + 1), sy(1)).bda = 1 THEN EXIT FOR
    IF box(sx(1) + (room6 + 1), sy(1)).xda = 1 THEN EXIT FOR
NEXT room6
FOR room8 = 0 TO 9
    IF sy(1) - (room8 + 1) < 0 THEN EXIT FOR
    IF box(sx(1), sy(1) - (room8 + 1)).bda = 1 THEN EXIT FOR
    IF box(sx(1), sy(1) - (room8 + 1)).xda = 1 THEN EXIT FOR
NEXT room8

'wo ist x?
z1 = sx(0) - sx(1)
z2 = sy(0) - sy(1)

SELECT CASE z1
    CASE IS > 0
        zh = 1
    CASE IS = 0
        zh = 0
    CASE IS < 0
        zh = -1
END SELECT
SELECT CASE z2
    CASE IS > 0
        zv = 1
    CASE IS = 0
        zv = 0
    CASE IS < 0
        zv = -1
END SELECT

'Richtung aus der X kommt
IF zh = -1 AND zv = -1 THEN Kreis.xdir = 7
IF zh = -1 AND zv = 0 THEN Kreis.xdir = 4
IF zh = -1 AND zv = 1 THEN Kreis.xdir = 1
IF zh = 0 AND zv = -1 THEN Kreis.xdir = 8
IF zh = 0 AND zv = 1 THEN Kreis.xdir = 2
IF zh = 1 AND zv = -1 THEN Kreis.xdir = 9
IF zh = 1 AND zv = 0 THEN Kreis.xdir = 6
IF zh = 1 AND zv = 1 THEN Kreis.xdir = 3

'Wie weit ist X entfernt?
IF z1 < 0 THEN z1 = z1 * -1
IF z2 < 0 THEN z2 = z2 * -1
Kreis.xran = z1 + z2

'Geschwindigkeit festsetzen
SELECT CASE Kreis.xran
    CASE IS > 40
        bfaktor = 6
    CASE 31 TO 40
        bfaktor = 5
    CASE 19 TO 30
        bfaktor = 4
    CASE 11 TO 18
        bfaktor = 3
    CASE 5 TO 10
        bfaktor = 2
    CASE 1 TO 4
        bfaktor = 1
END SELECT

'Wenn X diagonal auf O zukommt wird die Sicht der Dinge gendert
IF x.ran < 35 AND Kreis.deep = 3 THEN
    IF Kreis.xdir = 7 THEN
        room4 = room4 - 1
        room8 = room8 - 1
    END IF
    IF Kreis.xdir = 1 THEN
        room4 = room4 - 1
        room2 = room2 - 1
    END IF
    IF Kreis.xdir = 9 THEN
        room6 = room6 - 1
        room8 = room8 - 1
    END IF
    IF Kreis.xdir = 3 THEN
        room6 = room6 - 1
        room2 = room2 - 1
    END IF
END IF

'so, in welche Richtung nun?
'(was fr eine Entscheidungsgewalt...)

SELECT CASE Kreis.xdir
    CASE IS = 1
        IF Kreis.deep = 1 THEN
            IF room6 > 0 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room8 > 0 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room4 > 0 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room2 > 0 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
        END IF
        IF Kreis.deep > 1 THEN
            IF room6 >= room8 AND room6 >= room4 AND room6 >= room2 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room8 >= room6 AND room8 >= room4 AND room6 >= room2 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room4 >= room6 AND room4 >= room8 AND room4 >= room2 THEN
                IF Kreis.xran > 6 THEN
                    Kreis.odir = 4
                    EXIT SUB
                ELSE
                    IF z2 >= z1 THEN
                        IF room8 > 0 THEN
                            Kreis.odir = 8
                            EXIT SUB
                        END IF
                        IF room6 > 0 THEN
                            Kreis.odir = 6
                            EXIT SUB
                        END IF
                        Kreis.odir = 4
                        EXIT SUB
                    END IF
                    IF z1 >= z2 THEN
                        IF room6 > 0 THEN
                            Kreis.odir = 6
                            EXIT SUB
                        END IF
                        IF room8 > 0 THEN
                            Kreis.odir = 8
                            EXIT SUB
                        END IF
                        Kreis.odir = 2
                        EXIT SUB
                    END IF
                END IF
            END IF
            IF room2 >= room6 AND room2 >= room8 AND room2 >= room4 THEN
                IF Kreis.xran > 6 THEN
                    Kreis.odir = 2
                    EXIT SUB
                ELSE
                    IF z2 >= z1 THEN
                        IF room8 > 0 THEN
                            Kreis.odir = 8
                            EXIT SUB
                        END IF
                        IF room6 > 0 THEN
                            Kreis.odir = 6
                            EXIT SUB
                        END IF
                        Kreis.odir = 4
                        EXIT SUB
                    END IF
                    IF z1 >= z2 THEN
                        IF room6 > 0 THEN
                            Kreis.odir = 6
                            EXIT SUB
                        END IF
                        IF room8 > 0 THEN
                            Kreis.odir = 8
                            EXIT SUB
                        END IF
                        Kreis.odir = 2
                        EXIT SUB
                    END IF
                END IF
            END IF
        END IF
    CASE IS = 2
        IF Kreis.deep = 1 THEN
            IF room8 > 0 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room4 > 0 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room6 > 0 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room2 > 0 AND Kreis.xran > 8 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            Kreis.odir = 0
        END IF
        IF Kreis.deep > 1 THEN
            IF room4 > 0 AND room4 >= room8 AND room4 >= room6 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room6 > 0 AND room6 >= room8 AND room6 >= room4 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room8 > 0 AND room8 >= room6 AND room8 >= room4 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room2 > 0 AND Kreis.xran > 8 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            Kreis.odir = 0
        END IF
    CASE IS = 3
        IF Kreis.deep = 1 THEN
            IF room4 > 0 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room8 > 0 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room6 > 0 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room2 > 0 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
        END IF
        IF Kreis.deep > 1 THEN
            IF room8 >= room6 AND room8 >= room4 AND room6 >= room2 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room4 >= room6 AND room4 >= room8 AND room4 >= room2 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room6 >= room8 AND room6 >= room4 AND room6 >= room2 THEN
                IF Kreis.xran > 6 THEN
                    Kreis.odir = 6
                    EXIT SUB
                ELSE
                    IF z2 >= z1 THEN
                        IF room8 > 0 THEN
                            Kreis.odir = 8
                            EXIT SUB
                        END IF
                        IF room4 > 0 THEN
                            Kreis.odir = 4
                            EXIT SUB
                        END IF
                        Kreis.odir = 6
                        EXIT SUB
                    END IF
                    IF z1 >= z2 THEN
                        IF room4 > 0 THEN
                            Kreis.odir = 4
                            EXIT SUB
                        END IF
                        IF room8 > 0 THEN
                            Kreis.odir = 8
                            EXIT SUB
                        END IF
                        Kreis.odir = 6
                        EXIT SUB
                    END IF
                END IF
            END IF
            IF room2 >= room6 AND room2 >= room8 AND room2 >= room4 THEN
                IF Kreis.xran > 6 THEN
                    Kreis.odir = 2
                    EXIT SUB
                ELSE
                    IF z2 >= z1 THEN
                        IF room8 > 0 THEN
                            Kreis.odir = 8
                            EXIT SUB
                        END IF
                        IF room4 > 0 THEN
                            Kreis.odir = 4
                            EXIT SUB
                        END IF
                        Kreis.odir = 2
                        EXIT SUB
                    END IF
                    IF z1 >= z2 THEN
                        IF room4 > 0 THEN
                            Kreis.odir = 4
                            EXIT SUB
                        END IF
                        IF room8 > 0 THEN
                            Kreis.odir = 8
                            EXIT SUB
                        END IF
                        Kreis.odir = 2
                        EXIT SUB
                    END IF
                END IF
            END IF
        END IF
    CASE IS = 4
        IF Kreis.deep = 1 THEN
            IF room6 > 0 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room8 > 0 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room2 > 0 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            IF room4 > 0 AND Kreis.xran > 8 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            Kreis.odir = 0
        END IF
        IF Kreis.deep > 1 THEN
            IF room2 > 0 AND room2 >= room6 AND room2 >= room8 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            IF room8 > 0 AND room8 >= room6 AND room8 >= room2 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room6 > 0 AND room6 >= room2 AND room6 >= room8 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room4 > 0 AND Kreis.xran > 8 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            Kreis.odir = 0
        END IF
    CASE IS = 6
        IF Kreis.deep = 1 THEN
            IF room4 > 0 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room2 > 0 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            IF room8 > 0 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room6 > 0 AND Kreis.xran > 8 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            Kreis.odir = 0
        END IF
        IF Kreis.deep > 1 THEN
            IF room8 > 0 AND room8 >= room4 AND room8 >= room2 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room2 > 0 AND room2 >= room8 AND room2 >= room4 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            IF room4 > 0 AND room4 >= room8 AND room4 >= room2 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room6 > 0 AND Kreis.xran > 8 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            Kreis.odir = 0
        END IF
    CASE IS = 7
        IF Kreis.deep = 1 THEN
            IF room6 > 0 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room2 > 0 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            IF room4 > 0 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room8 > 0 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
        END IF
        IF Kreis.deep > 1 THEN
            IF room6 >= room8 AND room6 >= room4 AND room6 >= room2 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room2 >= room6 AND room2 >= room8 AND room2 >= room4 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            IF room8 >= room6 AND room8 >= room4 AND room6 >= room2 THEN
                IF Kreis.xran > 6 THEN
                    Kreis.odir = 8
                    EXIT SUB
                ELSE
                    IF z2 >= z1 THEN
                        IF room6 > 0 THEN
                            Kreis.odir = 6
                            EXIT SUB
                        END IF
                        IF room2 > 0 THEN
                            Kreis.odir = 2
                            EXIT SUB
                        END IF
                        Kreis.odir = 8
                        EXIT SUB
                    END IF
                    IF z1 >= z2 THEN
                        IF room2 > 0 THEN
                            Kreis.odir = 2
                            EXIT SUB
                        END IF
                        IF room6 > 0 THEN
                            Kreis.odir = 6
                            EXIT SUB
                        END IF
                        Kreis.odir = 8
                        EXIT SUB
                    END IF
                END IF
            END IF
            IF room4 >= room6 AND room4 >= room8 AND room4 >= room2 THEN
                IF Kreis.xran > 6 THEN
                    Kreis.odir = 4
                    EXIT SUB
                ELSE
                    IF z2 >= z1 THEN
                        IF room6 > 0 THEN
                            Kreis.odir = 6
                            EXIT SUB
                        END IF
                        IF room2 > 0 THEN
                            Kreis.odir = 2
                            EXIT SUB
                        END IF
                        Kreis.odir = 4
                        EXIT SUB
                    END IF
                    IF z1 >= z2 THEN
                        IF room2 > 0 THEN
                            Kreis.odir = 2
                            EXIT SUB
                        END IF
                        IF room6 > 0 THEN
                            Kreis.odir = 6
                            EXIT SUB
                        END IF
                        Kreis.odir = 4
                        EXIT SUB
                    END IF
                END IF
            END IF
        END IF
    CASE IS = 8
        IF Kreis.deep = 1 THEN
            IF room2 > 0 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            IF room6 > 0 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room4 > 0 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room8 > 0 AND Kreis.xran > 8 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            Kreis.odir = 0
        END IF
        IF Kreis.deep > 1 THEN
            IF room4 > 0 AND room4 >= room2 AND room4 >= room6 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room6 > 0 AND room6 >= room2 AND room6 >= room4 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room2 > 0 AND room2 >= room6 AND room2 >= room4 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            IF room8 > 0 AND Kreis.xran > 8 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            Kreis.odir = 0
        END IF
    CASE IS = 9
        IF Kreis.deep = 1 THEN
            IF room4 > 0 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room8 > 0 THEN
                Kreis.odir = 8
                EXIT SUB
            END IF
            IF room6 > 0 THEN
                Kreis.odir = 6
                EXIT SUB
            END IF
            IF room2 > 0 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
        END IF
        IF Kreis.deep > 1 THEN
            IF room4 >= room6 AND room4 >= room8 AND room4 >= room2 THEN
                Kreis.odir = 4
                EXIT SUB
            END IF
            IF room2 >= room6 AND room2 >= room8 AND room2 >= room4 THEN
                Kreis.odir = 2
                EXIT SUB
            END IF
            IF room6 >= room8 AND room6 >= room4 AND room6 >= room2 THEN
                IF Kreis.xran > 6 THEN
                    Kreis.odir = 6
                    EXIT SUB
                ELSE
                    IF z2 >= z1 THEN
                        IF room4 > 0 THEN
                            Kreis.odir = 4
                            EXIT SUB
                        END IF
                        IF room2 > 0 THEN
                            Kreis.odir = 2
                            EXIT SUB
                        END IF
                        Kreis.odir = 6
                        EXIT SUB
                    END IF
                    IF z1 >= z2 THEN
                        IF room2 > 0 THEN
                            Kreis.odir = 2
                            EXIT SUB
                        END IF
                        IF room4 > 0 THEN
                            Kreis.odir = 4
                            EXIT SUB
                        END IF
                        Kreis.odir = 6
                        EXIT SUB
                    END IF
                END IF
            END IF
            IF room8 >= room6 AND room8 >= room4 AND room6 >= room2 THEN
                IF Kreis.xran > 6 THEN
                    Kreis.odir = 8
                    EXIT SUB
                ELSE
                    IF z2 >= z1 THEN
                        IF room4 > 0 THEN
                            Kreis.odir = 4
                            EXIT SUB
                        END IF
                        IF room2 > 0 THEN
                            Kreis.odir = 2
                            EXIT SUB
                        END IF
                        Kreis.odir = 8
                        EXIT SUB
                    END IF
                    IF z1 >= z2 THEN
                        IF room2 > 0 THEN
                            Kreis.odir = 2
                            EXIT SUB
                        END IF
                        IF room4 > 0 THEN
                            Kreis.odir = 4
                            EXIT SUB
                        END IF
                        Kreis.odir = 8
                        EXIT SUB
                    END IF
                END IF
            END IF
        END IF
END SELECT


END SUB

SUB kimalen
SELECT CASE Kreis.odir
    CASE IS = 8
        IF blocked(sx(1), sy(1) - 1) = 0 THEN
                LINE (sx(1) * 11 + 1, sy(1) * 11 + 1)-(sx(1) * 11 + 10, sy(1) * 11 + 10), 20, BF
                box(sx(1), sy(1)).oda = 0
                sy(1) = sy(1) - 1 'hoch
                box(sx(1), sy(1)).oda = 1
                omove = 1
                PUT (sx(1) * 11 + 1, sy(1) * 11 + 1), symbol(0, 1), PSET
        END IF
    CASE IS = 4
        IF blocked(sx(1) - 1, sy(1)) = 0 THEN
                LINE (sx(1) * 11 + 1, sy(1) * 11 + 1)-(sx(1) * 11 + 10, sy(1) * 11 + 10), 20, BF
                box(sx(1), sy(1)).oda = 0
                sx(1) = sx(1) - 1 'links
                box(sx(1), sy(1)).oda = 1
                omove = 1
                PUT (sx(1) * 11 + 1, sy(1) * 11 + 1), symbol(0, 1), PSET
        END IF
    CASE IS = 2
        IF blocked(sx(1), sy(1) + 1) = 0 THEN
                LINE (sx(1) * 11 + 1, sy(1) * 11 + 1)-(sx(1) * 11 + 10, sy(1) * 11 + 10), 20, BF
                box(sx(1), sy(1)).oda = 0
                sy(1) = sy(1) + 1 'unten
                box(sx(1), sy(1)).oda = 1
                omove = 1
                PUT (sx(1) * 11 + 1, sy(1) * 11 + 1), symbol(0, 1), PSET
        END IF
    CASE IS = 6
        IF blocked(sx(1) + 1, sy(1)) = 0 THEN
                LINE (sx(1) * 11 + 1, sy(1) * 11 + 1)-(sx(1) * 11 + 10, sy(1) * 11 + 10), 20, BF
                box(sx(1), sy(1)).oda = 0
                sx(1) = sx(1) + 1 'rechts
                box(sx(1), sy(1)).oda = 1
                omove = 1
                PUT (sx(1) * 11 + 1, sy(1) * 11 + 1), symbol(0, 1), PSET
        END IF
END SELECT
PUT (sx(1) * 11 + 1, sy(1) * 11 + 1), symbol(0, 1), PSET
END SUB

SUB logo2
CLS

VIEW (60, 50)-(260, 150), , 3
y = 46
FOR i1 = 1 TO 15
    PUT (i1 * 8 + 36, y), letter(0, i1)
NEXT i1

COLOR 10
LOCATE 21, 13: PRINT "since March 2001"
LOCATE 22, 17: PRINT "Ver. 1.72"
COLOR 11
LOCATE 23, 15: PRINT "Press (Enter)"
SLEEP
COLOR 11
LOCATE 23, 10: PRINT "Press (Esc) to continue"

posx(1) = 44: posy(1) = 46
posx(2) = 52: posy(2) = 46
posx(3) = 60: posy(3) = 46
posx(4) = 68: posy(4) = 46
posx(5) = 76: posy(5) = 46
posx(7) = 92: posy(7) = 46
posx(8) = 100: posy(8) = 46
posx(9) = 108: posy(9) = 46
posx(11) = 124: posy(11) = 46
posx(12) = 132: posy(12) = 46
posx(13) = 140: posy(13) = 46
posx(14) = 148: posy(14) = 46
posx(15) = 156: posy(15) = 46

RANDOMIZE TIMER
DO
FOR i1 = 1 TO 20
    IF i1 = 1 THEN
        FOR i3 = 1 TO 15
            posd(i3) = INT(RND * 8) + 1
        NEXT i3
    END IF
FOR i2 = 1 TO 15
    IF i2 = 6 OR i2 = 10 THEN i2 = i2 + 1
    LINE (posx(i2), posy(i2))-(posx(i2) + 8, posy(i2) + 8), 0, BF
    SELECT CASE posd(i2)
        CASE IS = 1
            IF posy(i2) - 1 > 0 THEN
                posy(i2) = posy(i2) - 1
            ELSE
                posd(i2) = INT(RND * 8) + 1
            END IF
        CASE IS = 2
            IF posy(i2) - 1 > 0 AND posx(i2) + 1 < 193 THEN
                posy(i2) = posy(i2) - 1
                posx(i2) = posx(i2) + 1
            ELSE
                posd(i2) = INT(RND * 8) + 1
            END IF
        CASE IS = 3
            IF posx(i2) + 1 < 193 THEN
                posx(i2) = posx(i2) + 1
            ELSE
                posd(i2) = INT(RND * 8) + 1
            END IF
        CASE IS = 4
            IF posy(i2) + 1 < 93 AND posx(i2) + 1 < 193 THEN
                posy(i2) = posy(i2) + 1
                posx(i2) = posx(i2) + 1
            ELSE
                posd(i2) = INT(RND * 8) + 1
            END IF
        CASE IS = 5
            IF posy(i2) + 1 < 93 THEN
                posy(i2) = posy(i2) + 1
            ELSE
                posd(i2) = INT(RND * 8) + 1
            END IF
        CASE IS = 6
            IF posy(i2) + 1 < 93 AND posx(i2) - 1 > 0 THEN
                posy(i2) = posy(i2) + 1
                posx(i2) = posx(i2) - 1
            ELSE
                posd(i2) = INT(RND * 8) + 1
            END IF
        CASE IS = 7
            IF posx(i2) - 1 > 0 THEN
                posx(i2) = posx(i2) - 1
            ELSE
                posd(i2) = INT(RND * 8) + 1
            END IF
        CASE IS = 8
            IF posy(i2) - 1 > 0 AND posx(i2) - 1 > 0 THEN
                posy(i2) = posy(i2) - 1
                posx(i2) = posx(i2) - 1
            ELSE
                posd(i2) = INT(RND * 8) + 1
            END IF
    END SELECT
    PUT (posx(i2), posy(i2)), letter(0, i2), PSET
NEXT i2
ptime! = TIMER: WHILE ptime! = TIMER: WEND
NEXT i1
LOOP UNTIL INKEY$ = CHR$(27)

VIEW

END SUB

SUB messen

IF zz1 <> VAL(RIGHT$(TIME$, 2)) THEN
    zz1 = VAL(RIGHT$(TIME$, 2))
    Zeit = Zeit + 1
END IF

END SUB

SUB optio
optiostart:
CLS
COLOR 4
PAINT (0, 0), 200
LOCATE 1, 1: PRINT "Welcome!"
LOCATE 3, 1: PRINT "Do you want to..."
'LOCATE 8, 5: PRINT "(1)    play?"
COLOR 14
LOCATE 9, 5: PRINT "(2)    look at the highscore?"
COLOR 11
LOCATE 11, 5: PRINT "(3)    leave the game?"
COLOR 4
LOCATE 20, 3: PRINT "Let me know YOUR opinion:"
LOCATE 21, 3: PRINT "webmaster@dregenrocks.de"
DO
eing$ = INKEY$
SELECT CASE eing$
    CASE IS = "1"
        prefer
        EXIT SUB
    CASE IS = "2"
        high
        GOTO optiostart
    CASE IS = "3"
        OPEN "ctkdat/highsc.dat" FOR OUTPUT AS #1
        highkey (1)
        FOR f = 0 TO afeld
            FOR e = 1 TO 10
                FOR B = 1 TO 10
                    WRITE #1, cs(B, e, f)
                NEXT B
                WRITE #1, bz(e, f)
            NEXT e
        NEXT f
        CLOSE #1
        END
END SELECT
f = INT(RND * 200) + 1
COLOR f
LOCATE 8, 5: PRINT "(1)    play?"
LOOP
END SUB

SUB player

'Betrunkenheitszustand
IF xwrongmove > 0 THEN
    SELECT CASE eing$
        CASE IS = CHR$(0) + CHR$(80)
            IF sy(0) - 1 >= 0 AND box(sx(0), sy(0) - 1).bda <> 1 THEN
                LINE (sx(0) * 11 + 1, sy(0) * 11 + 1)-(sx(0) * 11 + 10, sy(0) * 11 + 10), 20, BF
                box(sx(0), sy(0)).xda = 0
                sy(0) = sy(0) - 1 'hoch (eigentlich runter)
                box(sx(0), sy(0)).xda = 1
                xmove = 1
                PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET
            END IF
        CASE IS = CHR$(0) + CHR$(77)
            IF sx(0) - 1 >= 0 AND box(sx(0) - 1, sy(0)).bda <> 1 THEN
                LINE (sx(0) * 11 + 1, sy(0) * 11 + 1)-(sx(0) * 11 + 10, sy(0) * 11 + 10), 20, BF
                box(sx(0), sy(0)).xda = 0
                sx(0) = sx(0) - 1 'links (eigentlich rechts)
                box(sx(0), sy(0)).xda = 1
                xmove = 1
                PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET
            END IF
        CASE IS = CHR$(0) + CHR$(72)
            IF sy(0) + 1 < 18 AND box(sx(0), sy(0) + 1).bda <> 1 THEN
                LINE (sx(0) * 11 + 1, sy(0) * 11 + 1)-(sx(0) * 11 + 10, sy(0) * 11 + 10), 20, BF
                box(sx(0), sy(0)).xda = 0
                sy(0) = sy(0) + 1 'runter (eigentlich hoch)
                box(sx(0), sy(0)).xda = 1
                xmove = 1
                PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET
            END IF
        CASE IS = CHR$(0) + CHR$(75)
            IF sx(0) + 1 < 29 AND box(sx(0) + 1, sy(0)).bda <> 1 THEN
                LINE (sx(0) * 11 + 1, sy(0) * 11 + 1)-(sx(0) * 11 + 10, sy(0) * 11 + 10), 20, BF
                box(sx(0), sy(0)).xda = 0
                sx(0) = sx(0) + 1 'rechts (eigentlich links)
                box(sx(0), sy(0)).xda = 1
                xmove = 1
                PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET
            END IF
    END SELECT
    IF xmove = 1 THEN xwrongmove = xwrongmove - 1
    PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET
    EXIT SUB
END IF

SELECT CASE eing$
    CASE IS = CHR$(0) + CHR$(80)
        IF sy(0) + 1 < 18 AND box(sx(0), sy(0) + 1).bda <> 1 THEN
            LINE (sx(0) * 11 + 1, sy(0) * 11 + 1)-(sx(0) * 11 + 10, sy(0) * 11 + 10), 20, BF
            box(sx(0), sy(0)).xda = 0
            sy(0) = sy(0) + 1 'runter
            box(sx(0), sy(0)).xda = 1
            xmove = 1
            PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET
        END IF
    CASE IS = CHR$(0) + CHR$(77)
        IF sx(0) + 1 < 29 AND box(sx(0) + 1, sy(0)).bda <> 1 THEN
            LINE (sx(0) * 11 + 1, sy(0) * 11 + 1)-(sx(0) * 11 + 10, sy(0) * 11 + 10), 20, BF
            box(sx(0), sy(0)).xda = 0
            sx(0) = sx(0) + 1 'rechts
            box(sx(0), sy(0)).xda = 1
            xmove = 1
            PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET
        END IF
    CASE IS = CHR$(0) + CHR$(72)
        IF sy(0) - 1 >= 0 AND box(sx(0), sy(0) - 1).bda <> 1 THEN
            LINE (sx(0) * 11 + 1, sy(0) * 11 + 1)-(sx(0) * 11 + 10, sy(0) * 11 + 10), 20, BF
            box(sx(0), sy(0)).xda = 0
            sy(0) = sy(0) - 1 'hoch
            box(sx(0), sy(0)).xda = 1
            xmove = 1
            PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET
        END IF
    CASE IS = CHR$(0) + CHR$(75)
        IF sx(0) - 1 >= 0 AND box(sx(0) - 1, sy(0)).bda <> 1 THEN
            LINE (sx(0) * 11 + 1, sy(0) * 11 + 1)-(sx(0) * 11 + 10, sy(0) * 11 + 10), 20, BF
            box(sx(0), sy(0)).xda = 0
            sx(0) = sx(0) - 1 'links
            box(sx(0), sy(0)).xda = 1
            xmove = 1
            PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET
        END IF
END SELECT
PUT (sx(0) * 11 + 1, sy(0) * 11 + 1), symbol(0, 0), PSET


END SUB

SUB prefer
CLS

COLOR 9
Kreis.deep = -1
DO
    LOCATE 4, 3: PRINT "                                  "
    LOCATE 4, 3: INPUT "Difficulty (1, 2 or 3): ", Kreis.deep
LOOP WHILE Kreis.deep < 1 OR Kreis.deep > 3
feld = -1
COLOR 2
DO
    COLOR 10
    LOCATE 11, 3: PRINT "Field No.0 is an empty test field"
    COLOR 2
    LOCATE 12, 3: PRINT "No.1 to No.10 : For the beginners"
    COLOR 14
    LOCATE 13, 3: PRINT "No.11 to No.20: For the advanced ones"
    COLOR 12
    LOCATE 14, 3: PRINT "No.21 to No.21: For the experts"
    COLOR 15
    LOCATE 6, 3: PRINT "What Field No. ?"
    LOCATE 7, 3: PRINT "0 -"; afeld; ": "
    LOCATE 8, 3: PRINT "                "
    LOCATE 8, 3: INPUT "", feld
LOOP UNTIL feld >= 0 AND feld <= afeld
END SUB

SUB prefight
CLS
COLOR 15: LOCATE 2, 11: PRINT "NAME OF THE FIELD:"
z = 20 - (LEN(Title$) / 2)
COLOR 10: LOCATE 4, z: PRINT Title$
COLOR 15: LOCATE 8, 17: PRINT "AUTHOR:"
z = 20 - (LEN(Creator$) / 2)
COLOR CFarbe%: LOCATE 10, z: PRINT Creator$
IF Dedicated$ = "" THEN GOTO enddedict
COLOR 15: LOCATE 14, 14: PRINT "DEDICATED TO"
z = 20 - (LEN(Dedicated$) / 2)
COLOR 9: LOCATE 16, z: PRINT Dedicated$
IF Dedicated2$ = "" THEN GOTO enddedict
z = 20 - (LEN(Dedicated2$) / 2)
COLOR 9: LOCATE 17, z: PRINT Dedicated2$
enddedict:
COLOR 15: LOCATE 22, 9: PRINT "Press any Key to Start"
DO: LOOP WHILE INKEY$ = ""
END SUB

SUB winwin
CLS

FOR c = 32 TO 40
    LOCATE 2, 14
    COLOR c
    PRINT "You have won !!!"
    ptime! = TIMER: WHILE ptime! = TIMER: WEND
NEXT c
 LOCATE 3, 14: PRINT "In "; Zeit; " seconds!"
ptime! = TIMER: WHILE ptime! = TIMER: WEND

score = Zeit / Kreis.deep

COLOR 15
LOCATE 5, 1: PRINT "----------------------------------------"
COLOR 6
LOCATE 6, 6: PRINT "  "; Zeit; "   seconds"
LOCATE 7, 6: PRINT "/ "; Kreis.deep; "   difficulty"
LOCATE 9, 6: PRINT "SCORE: "; score
COLOR 15
LOCATE 10, 1: PRINT "----------------------------------------"

FOR i = 1 TO 10
    IF score < heintrag(i, feld).bestzeit OR heintrag(i, feld).bestzeit = 0 THEN
        IF i = 1 THEN
            LOCATE 12, 6
            COLOR 45: PRINT "Congratulations!!!"
            LOCATE 13, 6: PRINT "You have got the best Score!!!"
            ptime! = TIMER: WHILE ptime! = TIMER: WEND
        ELSE
            LOCATE 12, 6
            COLOR 55: PRINT "Congratulations!!!"
            LOCATE 13, 6: PRINT "You have got one of the best Scores!!!"
            ptime! = TIMER: WHILE ptime! = TIMER: WEND
        END IF
        FOR j = 10 TO i STEP -1
            heintrag(j, feld).callsign = heintrag(j - 1, feld).callsign
            heintrag(j, feld).bestzeit = heintrag(j - 1, feld).bestzeit
        NEXT j
        DO
        LOCATE 15, 1
        COLOR 10
        INPUT "Your Name (max.10 symbols): ", eing$
        LOOP UNTIL LEN(eing$) < 11 AND LEN(eing$) > 0
        heintrag(i, feld).callsign = eing$
        heintrag(i, feld).bestzeit = score
        EXIT SUB
    END IF
NEXT i

COLOR 15: LOCATE 18, 1: PRINT "(press ESC to continue)"
DO: LOOP UNTIL INKEY$ = CHR$(27)

END SUB

FUNCTION Zufall (tief, hoch)
RANDOMIZE TIMER
Zufall = INT((hoch - tief + 1) * RND + tief)
END FUNCTION

