Pepek - kompjutorski upravljana kornjača


U svojoj najjednostavnijoj izvedbi, Pepek ima samo dva motora - lijevi i desni. Ako ih spojimo na naše robotsko sučelje, možemo se poslužiti donjim QBASIC programom koji mu omogućava da nauči kretanje nekom stazom i da to kasnije ponavlja:

(Autor programa je Borko Boranić)

DIM a(100, 2)
CLS
izlaz = 888: ' ili 956
x = 1
l = 19
GOSUB okvir
GOSUB okvir2
x = 25
l = 21
GOSUB okvir
GOSUB okvir2
x = 50
l = 21
GOSUB okvir
GOSUB okvir2
GOSUB legenda
x = 25
GOSUB radi
x = 50
GOSUB ponavlja
END
' ---------------------------------------------------------------
'
legenda:
y = 6
LOCATE 3, 5: PRINT "P E P E K I."
LOCATE y + 3, 3: PRINT "8 = naprijed"
LOCATE y + 5, 3: PRINT "2 = natrag"
LOCATE y + 7, 3: PRINT "4 = okret lijevo"
LOCATE y + 9, 3: PRINT "6 = okret desno"
LOCATE y + 11, 3: PRINT "Razmaknica = stoj"
LOCATE y + 13, 3: PRINT "Q = prekid u~enja"
LOCATE y + 15, 5: PRINT "ESC = izlaz"
LOCATE 3, 35: PRINT "U~i"
LOCATE 3, 58: PRINT "Ponavlja"
RETURN
' --------------------------------------------------------------
okvir:
y = 7
lin$ = "": raz$ = ""
FOR i = 1 TO l
lin$ = lin$ + CHR$(205)
raz$ = raz$ + CHR$(32)
NEXT i
up$ = CHR$(201) + lin$ + CHR$(187)
dn$ = CHR$(200) + lin$ + CHR$(188)
vt$ = CHR$(186)
LOCATE y, x: PRINT up$
FOR i = 1 TO 15
LOCATE y + i, x: PRINT vt$ + raz$ + vt$
NEXT i
LOCATE y + 16, x: PRINT dn$
RETURN
' ---------------------------------------------------------------
okvir2:
y = 1
lin$ = "": raz$ = ""
FOR i = 1 TO l
lin$ = lin$ + CHR$(205)
raz$ = raz$ + CHR$(32)
NEXT i
up$ = CHR$(201) + lin$ + CHR$(187)
dn$ = CHR$(200) + lin$ + CHR$(188)
vt$ = CHR$(186)
LOCATE y, x: PRINT up$
FOR i = 1 TO j + 3
LOCATE y + i, x: PRINT vt$ + raz$ + vt$
NEXT i
LOCATE y + 4, x: PRINT dn$
RETURN
' ---------------------------------------------------------------
radi:
y = 7
a(0, 1) = 0
a(0, 2) = 0
OUT izlaz, 0
t0 = TIMER
i = 1
DO
q$ = INPUT$(1)
IF q$ = "8" THEN w = 5
IF q$ = "2" THEN w = 10
IF q$ = "4" THEN w = 9
IF q$ = "6" THEN w = 6
IF q$ = " " THEN w = 0
IF q$ = "Q" OR q$ = "q" THEN EXIT DO
IF ASC(q$) = 27 THEN END
a(i, 1) = w
a(i, 2) = TIMER - t0
OUT izlaz, w
LOCATE i + 1 + y, x + 1: PRINT USING "###"; i;
PRINT USING "###"; a(i, 1);
PRINT USING "####.##"; a(i, 2);
PRINT USING "####.##"; a(i, 2) - a(i - 1, 2)
i = i + 1
LOOP
OUT izlaz, 0
a(i, 1) = 0
a(i, 2) = TIMER - t0
n = i - 1
RETURN
' --------------------------------------------------------------
ponavlja:
y = 7
t0 = TIMER
FOR i = 0 TO n
t1 = TIMER
LOCATE i + 1 + y, x + 1: PRINT USING "###"; i;
PRINT USING "###"; a(i, 1);
PRINT USING "####.##"; a(i, 2)
DO
OUT izlaz, a(i, 1)
IF TIMER - t0 >= a(i + 1, 2) THEN EXIT DO
LOOP
LOCATE i + 2 + y, x + 13: PRINT USING "####.##"; TIMER - t1
NEXT i
OUT izlaz, 0
RETURN
' --------------------------------------------------------------