CLS
SCREEN 12
CLS




DIM a$(90)
DIM y(6000), x(6000)
DIM u(6000), i(6000)
zoom = 8
wl = 2: wr = 2: cl = 14:
clip1 = 0: clip2 = 1
spx = 1: fx = 100: fy = 100
rf = 1: lim = 50
z = 4: sp = 40: bgr = 8
wlc = 1: rlc = 1
lv = 3: lvo = lv
cl1 = 3: ncl1 = cl: ncl2 = cl1
it$ = "3"
zeit = 0
wl$ = "2"
trn = 1: ix = 1: iy = 1: pl = 0
le$ = "NONE": pl$(3) = "-1-": pl$(4) = ""
pl$(1) = " -1- ": pl$(2) = " -2- "
FOR f = 1 TO 26
a$(f) = CHR$(f + 96)
PRINT a$(f);
NEXT

GOSUB ras
GOSUB options



raster:


px = 161: py = 101
ux = 300: uy = 150
lx = -zoom: ly = 0
rx = zoom: ry = 0
GOSUB ras
GOSUB punkte




DO
g$ = INKEY$
pz = pz + 1
IF pz < sp GOTO po
pz = 0


fcl = fcl + 1: IF fcl > 15 THEN fcl = 5
IF fcl = bgr THEN fcl = fcl + 1
IF spx THEN PAINT (fx, fy), fcl, bgr


x(wlc) = px: px = px + rx
IF pl = 2 OR pl = 0 THEN
IF px > 624 THEN IF clip1 THEN px = 17 ELSE lose = 1: GOTO weck
IF px < zoom THEN IF clip1 THEN px = 623 ELSE lose = 1: GOTO weck
y(wlc) = py: py = py + ry
IF py > 465 THEN IF clip1 THEN py = 17 ELSE lose = 1: GOTO weck
IF py < zoom THEN IF clip1 THEN py = 457 ELSE lose = 1: GOTO weck
END IF
u(rlc) = ux: ux = ux + lx
IF pl = 2 OR pl = 1 THEN
IF ux > 620 THEN IF clip2 THEN ux = 17 ELSE lose = 1: GOTO weck
IF ux < zoom * 2 THEN IF clip2 THEN ux = 623 ELSE lose = 1: GOTO weck
i(rlc) = uy: uy = uy + ly
IF uy > 460 THEN IF clip2 THEN uy = 17 ELSE lose = 1: GOTO weck
IF uy < zoom * 2 THEN IF clip2 THEN uy = 465 ELSE lose = 1: GOTO weck
END IF
wlc = wlc + 1
IF wlc > 5000 THEN wlc = 1
IF wlc < wl THEN wlo = 5000 - wl + wlc + 1 ELSE wlo = wlc - wl - 1
IF wlo < 1 THEN wlo = 1

rlc = rlc + 1
IF rlc > 5000 THEN rlc = 1
IF rlc < wr THEN rlo = 5000 - wr + rlc + 1 ELSE rlo = rlc - wr - 1
IF rlo < 1 THEN rlo = 1


cur1 = POINT(px, py)
cur2 = POINT(ux, uy)
SELECT CASE cur1
CASE cl: lose = 1: GOTO weck
CASE cl1: lose = 1: GOTO weck
CASE ncl1: lose = 1: GOTO weck
CASE ncl2: lose = 1: GOTO weck
END SELECT
SELECT CASE cur2
CASE cl: lose = 2: GOTO weck
CASE cl1: lose = 2: GOTO weck
CASE ncl1: lose = 2: GOTO weck
CASE ncl2: lose = 2: GOTO weck
END SELECT


IF pl = 2 OR pl = 0 AND POINT(px, py) <> 0 THEN
SELECT CASE POINT(px, py)
CASE 1
cl = 1: GOSUB punkte
CASE 2
wl = wl + 10: pnt(1) = pnt(1) + 20
cl = 2: GOSUB punkte
CASE 3:
wl = wl + 2: pnt(1) = pnt(1) + 30
cl = 3: GOSUB punkte
CASE 4: ' wl = wl + 4: pnt(1) = pnt(1) + 20
cl = 4: GOSUB punkte
CASE 5: wl = wl + 3: pnt(1) = pnt(1) + 15: cl = 5: GOSUB punkte
CASE 6:  pnt(1) = pnt(1) + 4
cl = 6: GOSUB punkte
CASE 7: wl = wl + 5: pnt(1) = pnt(1) + 25: cl = 7: GOSUB punkte
CASE 8:  wl = wl + 5: pnt(1) = pnt(1) + 2
cl = 8: GOSUB punkte
CASE 9:  wl = wl + 5: pnt(1) = pnt(1) + 5
cl = 9: GOSUB punkte
CASE 10: wl = wl + 10:  pnt(1) = pnt(1) + 4
cl = 10: GOSUB punkte
CASE 11: wl = wl + 10: pnt(1) = pnt(1) + 20: cl = 11: GOSUB punkte
CASE 12: wl = wl + 2:  pnt(1) = pnt(1) + 2
cl = 12: GOSUB punkte
CASE 13: wl = wl + 10: pnt(1) = pnt(1) + 20: cl = 13: GOSUB punkte
CASE 14: wl = wl + 2: pnt(1) = pnt(1) + 3
cl = 14: GOSUB punkte
CASE 15
clip1 = 1: pnt(1) = pnt(1) + 50
cl = 15: GOSUB punkte
END SELECT
IF wl >= lim THEN win = 1: GOTO weck
END IF

IF pl = 2 OR pl = 1 AND POINT(ux, uy) <> 0 THEN
SELECT CASE POINT(ux, uy)
CASE 1
cl1 = 1: GOSUB punkte
CASE 2
wr = wr + 10: pnt(2) = pnt(2) + 20
cl1 = 2: GOSUB punkte
CASE 3:
wr = wr + 2: pnt(2) = pnt(2) + 30
cl1 = 3: GOSUB punkte
CASE 4: ' wr = wr + 4: pnt(2) = pnt(2) + 20
cl1 = 4: GOSUB punkte
CASE 5: wr = wr + 3: pnt(2) = pnt(2) + 15: cl1 = 5: GOSUB punkte
CASE 6:  pnt(2) = pnt(2) + 4
cl1 = 6: GOSUB punkte
CASE 7: wr = wr + 5: pnt(2) = pnt(2) + 25: cl1 = 7: GOSUB punkte
CASE 8: wr = wr + 5: pnt(2) = pnt(2) + 2
cl1 = 8: GOSUB punkte
CASE 9:  pnt(2) = pnt(2) + 5
cl1 = 9: GOSUB punkte
CASE 10: wr = wr + 10:  pnt(2) = pnt(2) + 4
cl1 = 10: GOSUB punkte
CASE 11: wr = wr + 10: pnt(2) = pnt(2) + 20: cl1 = 11: GOSUB punkte
CASE 12: wr = wr + 2:  pnt(2) = pnt(2) + 2
cl1 = 12: GOSUB punkte
CASE 13: wr = wr + 10: pnt(2) = pnt(2) + 20: cl1 = 13: GOSUB punkte
CASE 14: wr = wr + 2: pnt(2) = pnt(2) + 3
cl1 = 14: GOSUB punkte
CASE 15:
clip2 = 1: pnt(2) = pnt(2) + 50
cl1 = 15: GOSUB punkte
END SELECT

IF wr >= lim THEN win = 2: GOTO weck

END IF





po:
SELECT CASE g$
CASE "y"
IF lx = 0 THEN lx = -zoom: ly = 0
CASE "c"
IF lx = 0 THEN lx = zoom: ly = 0
CASE "x"
IF ly = 0 THEN ly = zoom: lx = 0
CASE "d"
IF ly = 0 THEN ly = -zoom: lx = 0

END SELECT

SELECT CASE RIGHT$(g$, 1)

CASE "o"
GOSUB options: GOTO raster

CASE "K"
IF rx = 0 THEN rx = -zoom: ry = 0
CASE "M"
IF rx = 0 THEN rx = zoom: ry = 0
CASE "P"
IF ry = 0 THEN ry = zoom: rx = 0
CASE "H"
IF ry = 0 THEN ry = -zoom: rx = 0


CASE ELSE
END SELECT

rf = INT(RND(1) * 20000)

SELECT CASE rf
CASE 1000 TO 1001
spx = 0
CASE 2000 TO 2001
clip1 = 0
CASE 2003 TO 2004
clip2 = 0

CASE 8000 TO 8050
fx = INT(RND(1) * 400 + 20): fy = INT(RND(1) * 350 + 50)
spx = 1
CASE 8000 TO 8015
vx = INT(RND(1) * 400 + 20): vy = INT(RND(1) * 350 + 50)
IF vx = fx AND vy = fy THEN vx = vx + zoom
rcl = INT(RND(1) * 16)
IF rcl = cl OR rcl = cl1 OR rcl = bgr THEN rcl = 0
PAINT (vx, vy), rcl, bgr: IF rcl <> 0 THEN ocl = rcl
END SELECT

IF pl = 0 OR pl = 2 THEN
IF clip1 THEN PAINT (x(wlc - 1), y(wlc - 1)), cl, bgr: PAINT (px, py), fcl, bgr ELSE PAINT (px, py), cl, bgr
IF trn THEN PAINT (x(wlo), y(wlo)), 0, bgr
END IF

IF pl = 2 OR pl = 1 THEN

IF clip2 THEN PAINT (u(rlc - 1), i(rlc - 1)), cl1, bgr: PAINT (ux, uy), fcl, bgr ELSE PAINT (ux, uy), cl1, bgr
IF trn = 1 THEN PAINT (u(rlo), i(rlo)), 0, bgr
END IF

LOOP UNTIL g$ = CHR$(27)

GOTO ende

ras:
CLS
FOR f = 16 TO 624 STEP zoom
LINE (f, 16)-(f, 464), bgr
NEXT
FOR f = 16 TO 464 STEP zoom
LINE (16, f)-(624, f), bgr

NEXT
RETURN
reini:
FOR f = 0 TO 50
x(f) = 161: y(f) = 101
NEXT
RETURN



options:
LINE (160, 160)-(480, 320), 3, B
PAINT (170, 170), 0, 3
LINE (160, 160)-(480, 320), bgr, B
sp$ = STR$(sp): ip$ = STR$(cl)
qwahl:

i$ = "": COLOR 7
LOCATE 12, 30: PRINT "SNAKY / TRON OPTIONEN"
LOCATE 20, 30: PRINT "ESC-Taste zum Beenden"
IF ix = 3 AND iy = 1 THEN COLOR 15
LOCATE 16, 22: PRINT "Geschwindikeit:"; sp; "    "
COLOR 7: IF ix = 4 AND iy = 1 THEN COLOR 15
LOCATE 17, 22: PRINT "Raster:"; zoom;
SELECT CASE zoom
CASE 16
PRINT "(29x39)"
CASE 8
PRINT "(58x78)"
CASE 4
PRINT "(116x156)"
CASE 2
PRINT "(232x312)"
END SELECT
COLOR 7: IF ix = 1 AND iy = 2 THEN COLOR 15
LOCATE 14, 44: PRINT "Leben:"; lv
COLOR 7: IF ix = 1 AND iy = 1 THEN COLOR 15
LOCATE 14, 22: PRINT "Name : "; RIGHT$(pl$(3), 13)
COLOR 7: IF ix = 2 AND iy = 1 THEN COLOR 15
LOCATE 15, 22: PRINT "Name : "; pl$(4)


COLOR 7: IF ix = 2 AND iy = 2 THEN COLOR 15
LOCATE 15, 44: PRINT "Modus: "; : IF trn = 1 THEN PRINT "SNAKY" ELSE PRINT "TRON "
COLOR 7: IF ix = 3 AND iy = 2 THEN COLOR 15
LOCATE 16, 44: PRINT "Limit:"; lim; "  "
COLOR 7: IF ix = 4 AND iy = 2 THEN COLOR 15
LOCATE 17, 44: PRINT "LEVEL:"; le$
COLOR 7: IF ix = 5 THEN COLOR 15
LOCATE 18, 22: PRINT "START IT UP"
COLOR 7
DO UNTIL i$ <> ""
i$ = INKEY$

LOOP
IF i$ <> RIGHT$(i$, 1) THEN
SELECT CASE RIGHT$(i$, 1)
CASE "H"
ix = ix - 1: IF ix < 1 THEN ix = 5: iy = iy - 1: IF iy < 1 THEN iy = 2
CASE "K"
iy = iy - 1: IF iy < 1 THEN iy = 1
CASE "M"
iy = iy + 1: IF iy > 2 THEN iy = 2
CASE "P"
ix = ix + 1: IF ix > 5 THEN ix = 1: iy = 1
CASE ELSE
END SELECT
END IF
IF i$ = CHR$(27) GOTO ende

IF ASC(i$) = 13 AND ix = 5 THEN GOSUB ras: GOSUB reini: RETURN
IF ASC(i$) = 13 AND ix = 2 AND iy = 2 THEN trn = trn + 1: IF trn > 1 THEN trn = 0
IF ASC(i$) = 13 AND ix = 4 AND iy = 1 THEN
zoom = zoom * 2: IF zoom > 16 THEN zoom = 2
GOSUB ras: GOTO options
END IF
IF ix = 3 AND iy = 1 THEN
IF ASC(i$) > 47 AND ASC(i$) < 59 THEN sp$ = sp$ + i$: sp = VAL(sp$): IF LEN(sp$) > 3 THEN sp$ = i$: sp = VAL(sp$)


END IF

IF ix = 1 AND iy = 1 THEN
LOCATE 14, 29: PRINT RIGHT$(pl$(3), 13);
IF ASC(i$) > 31 THEN pl$(3) = pl$(3) + i$
IF ASC(i$) = 8 THEN
IF pl$(3) <> "" THEN pl$(3) = LEFT$(pl$(3), LEN(pl$(3)) - 1)
END IF
LOCATE 14, 29: PRINT RIGHT$(pl$(3), 13); " "
IF pl$(4) = "" AND pl$(3) <> "" THEN pl = 0

END IF

IF ix = 2 AND iy = 1 THEN
LOCATE 15, 29: PRINT RIGHT$(pl$(4), 13);
IF ASC(i$) > 31 THEN pl$(4) = pl$(4) + i$
IF ASC(i$) = 8 THEN
IF pl$(4) <> "" THEN pl$(4) = LEFT$(pl$(4), LEN(pl$(4)) - 1)
END IF
LOCATE 15, 29: PRINT RIGHT$(pl$(4), 13); " "
IF pl$(4) <> "" AND pl$(3) = "" THEN pl = 1
IF pl$(4) <> "" AND pl$(3) <> "" THEN pl = 2

END IF




IF ix = 3 AND iy = 2 THEN
IF ASC(i$) > 47 AND ASC(i$) < 59 THEN lim$ = lim$ + i$: lim = VAL(lim$): IF LEN(lim$) > 3 THEN lim$ = i$: lim = VAL(lim$)
END IF

IF ix = 1 AND iy = 2 THEN
IF i$ = CHR$(13) THEN pl = pl + 1: IF pl > 2 THEN pl = 1
END IF





IF ix = 4 AND iy = 1 THEN
IF ASC(i$) > 47 AND ASC(i$) < 59 THEN ip$ = ip$ + i$
IF VAL(ip$) > 15 THEN ip$ = i$
cl = VAL(ip$)
IF ASC(i$) = 13 THEN cl = cl + 1
IF cl > 15 THEN cl = 1
IF cl = bgr THEN cl = 9
ip$ = STR$(cl)
END IF

IF ix = 5 AND iy = 1 THEN
IF ASC(i$) > 47 AND ASC(i$) < 59 THEN it$ = it$ + i$
IF VAL(it$) > 15 THEN it$ = i$
cl1 = VAL(it$)
IF ASC(i$) = 13 THEN cl1 = cl1 + 1
IF cl1 > 15 THEN cl1 = 1
IF cl1 = bgr THEN cl1 = 9
it$ = STR$(cl1)
END IF





IF ix = 1 AND iy = 2 THEN
IF ASC(i$) > 47 AND ASC(i$) < 59 THEN lv = VAL(i$)
IF ASC(i$) = 45 THEN lv = -1
lvo = lv
END IF




GOTO qwahl

punkte:
LOCATE 1, 3: PRINT pl$(3); pnt(1); "/"; wl
LOCATE 1, 33: PRINT "Limit:"; lim
LOCATE 1, 77 - LEN(pl$(4) + STR$(pnt(1)) + STR$(wl))
PRINT pl$(4); STR$(pnt(1)); " /"; STR$(wl);

LINE (360, 3)-(370, 10), bgr, B
LINE (375, 3)-(385, 10), bgr, B
LINE (390, 3)-(400, 10), bgr, B
LINE (405, 3)-(415, 10), bgr, B

PAINT (362, 5), cl, bgr
PAINT (377, 5), cl1, bgr
PAINT (391, 5), ncl1, bgr
PAINT (406, 5), ncl2, bgr




RETURN



weck:
LOCATE 15, 35
IF win <> 0 THEN PRINT pl$(2 + win); " hat gewonnen !"


IF win = 0 THEN PRINT pl$(2 + lose); " stirbt !"
wl = 2: wr = 2
LINE (272, 224)-(624, 240), bgr, B

pry = INT((py + 10) / 16)
prx = INT((px + 10) / 8)
IF pry < 1 THEN pry = 1
IF prx < 1 THEN prx = 1
IF pry > 29 THEN pry = 29
IF prx > 78 THEN prx = 78




g$ = INPUT$(1)
IF lv = -1 THEN GOTO raster
lv = lv - 1: IF lv > 0 THEN GOTO raster
lv = lvo
GOSUB options: GOTO raster
ende:
SYSTEM