' Vypracovalo c.25 -zrychlovani SPACE-BAR DECLARE FUNCTION getword$ (rad$, NOword!) DECLARE SUB getwords (rad$, w1$, w2$, w3$) DECLARE FUNCTION sou! (hod!) DIM wstep$(70), map(11, 16), zed(100), znacka(25), kajav(100), kajaj(100), kajas(100), kajaz(100) SCREEN 9 '***** Nacitani obrazku ***** LINE (0, 0)-(19, 19), 4, BF GET (0, 0)-(19, 19), zed: CLS LINE (0, 0)-(3, 3), 8, BF: LINE (0, 0)-(3, 3), 7: LINE (3, 0)-(0, 3), 7: LINE (1, 1)-(2, 2), 15, BF GET (0, 0)-(3, 3), znacka: CLS LINE (3, 5)-(18, 20), 9, BF: CIRCLE (10, 5), 5, 1: PAINT (10, 5), 9, 1: LINE (0, 10)-(19, 10), 15: LINE -(10, 5), 15: LINE -(10, 15), 15: LINE -(19, 10), 15 GET (0, 0)-(19, 19), kajav: CLS LINE (3, 5)-(18, 20), 9, BF: CIRCLE (10, 5), 5, 1: PAINT (10, 5), 9, 1: LINE (19, 10)-(0, 10), 15: LINE -(10, 5), 15: LINE -(10, 15), 15: LINE -(0, 10), 15 GET (0, 0)-(19, 19), kajaz: CLS LINE (3, 5)-(18, 20), 9, BF: CIRCLE (10, 5), 5, 1: PAINT (10, 5), 9, 1: LINE (10, 19)-(10, 0), 15: LINE -(5, 10), 15: LINE -(15, 10), 15: LINE -(10, 0), 15 GET (0, 0)-(19, 19), kajas: CLS LINE (3, 5)-(18, 20), 9, BF: CIRCLE (10, 5), 5, 1: PAINT (10, 5), 9, 1: LINE (10, 0)-(10, 19), 15: LINE -(5, 10), 15: LINE -(15, 10), 15: LINE -(10, 19), 15 GET (0, 0)-(19, 19), kajaj: CLS '**** Nastaveni *** kajax = 1: kajay = 15 smer = 1 LOCATE 1, 1 '**** Nacitani jednotlivych kroku *** prgagain: INPUT "Jmeno souboru s programem : ", fil$ IF fil$ = "" THEN GOTO prgagain OPEN fil$ FOR INPUT AS #1 st = 0 DO LINE INPUT #1, rad$ getwords rad$, w1$, w2$, w3$ IF w1$ <> "" THEN wstep$(st) = w1$: st = st + 1 IF w2$ <> "" THEN wstep$(st) = w2$: st = st + 1 IF w3$ <> "" THEN wstep$(st) = w3$: st = st + 1 LOOP UNTIL EOF(1) CLOSE #1 '**** nacteni mesta *** LOCATE 1, 1 INPUT "Jmeno mesta : ", fil$ IF fil$ <> "" THEN OPEN fil$ FOR INPUT AS #1 FOR y = 1 TO 15 LINE INPUT #1, strin$ FOR x = 1 TO 10 char$ = MID$(strin$, x, 1) num = VAL(char$) IF char$ = "0" OR char$ = " " THEN map(x, y) = 0 IF num >= 1 AND num <= 5 THEN map(x, y) = num + 6 IF UCASE$(char$) = "X" THEN map(x, y) = 1 NEXT x NEXT y CLOSE #1 kajax = 1: kajay = 15 CLS END IF '**** Vykresleni *** GOSUB drawmap '**** ovladani karla *** stp = 0 'STP = krok, ktery se provadi WHILE NOT stp = st pr$ = wstep$(stp) pr2$ = wstep$(stp + 1) pr3$ = wstep$(stp + 2) GOSUB prikaz stp = stp + 1 oldt$ = TIME$ klav$ = INKEY$ IF UCASE$(klav$) = " " THEN FOR qwe = 0 TO 250: NEXT qwe 'ZRYCHLOVANI MEZERNIKEM IF UCASE$(klav$) <> " " THEN DO 'ZPOMELENI NA SEKUNDU LOOP UNTIL TIME$ <> oldt$ OR INKEY$ = " " END IF WEND END prikaz: IF UCASE$(pr$) = "KROK" THEN GOSUB krok 'PRIKAZY IF UCASE$(pr$) = "VLEVO-VBOK" THEN GOSUB vvbok IF UCASE$(pr$) = "POLOZ" THEN GOSUB poloz IF UCASE$(pr$) = "ZVEDNI" THEN GOSUB zvedni IF UCASE$(pr$) = "OPAKUJ" THEN zac = stp + 2 kon = 0 DO w2step$(kon) = wstep$(kon + zac) kon = kon + 1 LOOP UNTIL UCASE$(wstep$(kon + zac)) <> "KONEC" FOR tt = 0 TO VAL(pr2$) pr$ = w2step$(tt) GOSUB prikaz NEXT tt stv = zac + kon END IF IF UCASE$(pr$) = "DOKUD" THEN 'NEFUNKCNI !!! zac = stp + 2 kon = 0 DO w2step$(kon) = wstep$(kon + zac) kon = kon + 1 LOOP UNTIL UCASE$(wstep$(kon + zac)) <> "KONEC" IF UCASE$(pr2$) = "JE" THEN DO yes = 0 xw = kajax: yw = kajay IF smer = 1 THEN wx = kajax + 1 IF smer = 2 THEN wy = kajay + 1 IF smer = 3 THEN wx = kajax - 1 IF smer = 4 THEN wy = kajay - 1 IF UCASE$(pr3$) = "ZED" AND map(wx, wy) = 1 THEN yes = 1 IF UCASE$(pr3$) = "ZNACKA" AND map(wx, wy) > 6 AND map(wx, wy) < 12 THEN yes = 1 IF UCASE$(pr3$) = "SEVER" AND smer = 4 THEN yes = 1 IF UCASE$(pr3$) = "JIH" AND smer = 2 THEN yes = 1 IF UCASE$(pr3$) = "VYCHOD" AND smer = 1 THEN yes = 1 IF UCASE$(pr3$) = "ZAPAD" AND smer = 3 THEN yes = 1 FOR tt = 0 TO kon pr$ = w2step$(tt) GOSUB prikaz NEXT tt LOOP UNTIL yes = 1 END IF IF UCASE$(pr2$) = "NENI" THEN DO yes = 0 xw = kajax: yw = kajay IF smer = 1 THEN wx = kajax + 1 IF smer = 2 THEN wy = kajay + 1 IF smer = 3 THEN wx = kajax - 1 IF smer = 4 THEN wy = kajay - 1 IF UCASE$(pr3$) = "ZED" AND (map(wx, wy) <> 1 AND wx <= 15 AND wx >= 1 AND wy >= 1 OR wy <= 10) THEN yes = 1 IF UCASE$(pr3$) = "ZNACKA" AND map(wx, wy) < 7 AND map(wx, wy) > 11 THEN yes = 1 IF UCASE$(pr3$) = "SEVER" AND smer = 4 THEN yes = 1 IF UCASE$(pr3$) = "JIH" AND smer = 2 THEN yes = 1 IF UCASE$(pr3$) = "VYCHOD" AND smer = 1 THEN yes = 1 IF UCASE$(pr3$) = "ZAPAD" AND smer = 3 THEN yes = 1 FOR tt = 0 TO kon pr$ = w2step$(tt) GOSUB prikaz NEXT tt LOOP UNTIL yes = 1 END IF END IF RETURN zvedni: IF map(kajax, kajay) = 0 THEN PRINT "Chyba - zadna znacka tam neni": GOTO finish GOSUB delkarel znak = map(kajax, kajay) IF znak = 7 THEN map(kajax, kajay) = 0 IF znak > 7 THEN map(kajax, kajay) = znak - 1 GOSUB drawkarel RETURN poloz: IF map(kajax, kajay) = 11 THEN PRINT "Chyba - plny pocet znacek": GOTO finish GOSUB delkarel znak = map(kajax, kajay) IF znak > 6 THEN map(kajax, kajay) = znak + 1 IF znak = 0 THEN map(kajax, kajay) = 7 GOSUB drawkarel RETURN vvbok: GOSUB delkarel smer = smer - 1 IF smer <= 0 THEN smer = 4 GOSUB drawkarel RETURN krok: wx = kajax: wy = kajay IF smer = 1 THEN wx = kajax + 1 IF smer = 2 THEN wy = kajay + 1 IF smer = 3 THEN wx = kajax - 1 IF smer = 4 THEN wy = kajay - 1 IF map(wx, wy) = 1 OR wx < 1 OR wx > 10 OR wy < 1 OR wy > 15 THEN PRINT "Chyba - srazka se zdi": GOTO finish GOSUB delkarel kajax = wx: kajay = wy GOSUB drawkarel RETURN delkarel: xp = sou(kajax): yp = sou(kajay): zn = 0 GOSUB drawpic IF map(kajax, kajay) > 6 AND map(kajax, kajay) < 12 THEN zn = map(kajax, kajay): GOSUB drawpic RETURN drawkarel: GOSUB whatdir GOSUB drawpic IF map(kajax, kajay) > 6 AND map(kajax, kajay) < 12 THEN zn = map(kajax, kajay): GOSUB drawpic RETURN whatdir: zn = smer + 2 xp = sou(kajax) yp = sou(kajay) RETURN drawmap: LINE (0, 0)-(10 * 20 + 4, 15 * 20 + 4), 4, B FOR y = 1 TO 15 FOR x = 1 TO 10 xp = sou(x): yp = sou(y) zn = map(x, y) GOSUB drawpic NEXT x NEXT y GOSUB drawkarel RETURN drawpic: nx = ((xp + 1) / 20) - 2: ny = ((yp + 1) / 20) - 2 IF zn > 6 AND zn < 12 THEN yp = yp + 15 IF zn = 0 THEN LINE (xp, yp)-(xp + 19, yp + 19), 0, BF IF zn = 1 THEN PUT (xp, yp), zed, PSET IF zn = 3 THEN PUT (xp, yp), kajav, PSET IF zn = 4 THEN PUT (xp, yp), kajaj, PSET IF zn = 5 THEN PUT (xp, yp), kajaz, PSET IF zn = 6 THEN PUT (xp, yp), kajas, PSET IF zn > 6 AND zn < 12 THEN FOR t = 0 TO zn - 7 PUT (xp + t * 4, yp), znacka, PSET NEXT t END IF RETURN finish: SLEEP END SUB getwords (rad$, w1$, w2$, w3$) w1$ = "": w2$ = "": w3$ = "" inword$ = "n" NOw = 0 FOR t = 1 TO LEN(rad$) char$ = MID$(rad$, t, 1) IF (ASC(UCASE$(char$)) > 64 AND ASC(UCASE$(char$)) < 91) OR ASC(char$) = 45 THEN IF inword$ = "n" THEN inword$ = "a": NOw = NOw + 1 IF NOw = 1 THEN w1$ = w1$ + char$ IF NOw = 2 THEN w2$ = w2$ + char$ IF NOw = 3 THEN w3$ = w3$ + char$ END IF IF (ASC(UCASE$(char$)) < 65 OR ASC(UCASE$(char$)) > 90) AND ASC(char$) <> 45 THEN inword$ = "n" NEXT t END SUB FUNCTION sou (hod) sou = ((hod - 1) * 20) + 2 END FUNCTION