LABİRENT
Retro bilgisayarBu ayki BASIC programımız bir fare labirenti oluşturan basit bir oyun. Programı yazıp kaydettikten sonra çalıştırın. Oyunun başında size labirentin yatay ve düşey boyutları soruluyor. Bunları yanıtladıktan sonra oyunu oynamaya başlayabilirsiniz. Amacınız en kısa yoldan labirentin çıkışını bulmak. Eğer kaybolursanız 'BAKIŞ' seçeneğiyle labirentin tamamını üstten görebilirsiniz. Başarılar.

SCREEN 1,840,200.3,2
WINDOW 2,,,0,1
WINDOW 3,"LABİRENT!",(0,0)-(410,186),0, 1
PALETTE 4..2,.2,.2
COLOR 1,4
CLS
WIND0W OUTPUT 2
Yc1 = 10
yc2 - 15
x = 515: y = 94 ‘Sol yon okunun baslangici
COLOR 3
LINE (x,y)-STEP(-30,0) ‘sol yon okunun çizimi
LINE -STEP(0,-3)
LINE -STEP(-10,5)
LINE -STEP(lO,5)
LINE -STEP(0,-3)
LINE -STEP(30,0)
LINE -STEP(0,-4)
PAINT STEP(-2,2),3
LINE (x+15,y)-STEP(30,0)
LINE -STEP(0,-3)
LINE -STEP(10,5)
LINE -STEP(-10,5)
LINE -STEP(0,-3)
LINE -STEP(-30,Û)
LINE -STEP(0,-4)
PAINT STEP(2,2),3
LOCATE yc1
PRINT PTAB(x-8)"HAREKET";
LOCATE yc2
PRINT PTAB(x-8)"BAKIS" ;
WINDOW OUTPUT 3
100
zz = FRE (0)
200
GOTO 6400
800
n = 2 : a = h : b = v : f f = 2 ' ( f - 1 )
900
CLS
1000 z = m(a,b) * ff
1200 IF FN m(2 / 16) - 0 THEN 1600
1300 rl = - 1: GOSUB 5400
1400 GOTO 2000
1600 w = m(a + s,b - r) * ff
1700 IF FN m(w / 128) = 0 THEN 2000
1800 rl = - 1: GOSUB 4600
2000 IF FN m(z / 64) = 0 THEN 2400
2100 rl = 1: GOSUB 5400
2200 GOTO 2800
2400 w - m(a - s,b + r> * ff
2500 IF FN m(w / 128) = O THEN 2600
2600 rl = 1: GOSUB 4600
2300 IF FN m(z / 128) = 1 THEN 3400
3000 n = n + 1: IF n > 8 THEN 3500
3100
a = a + r:b = b + s: IF b < 2 THEN 3500
3200 GOTO 1000
3400
GOSUB 3800
3500 RETURN
3800
PSET (vx + dx(n),yu(n))
3900 LINE -(vx + dx(n),yd(n))
4000
LINE –(vx - dx(n),yd(n))
4100
LINE -(vx - dx(n),yu(n))
4200
LINE -(vx + dx(n),yu(n))
4300
RETURN
4600
PSET (vx + rl * dx(n - l),yu(n))
4700
LINE -(vx + rl * dx<n),yu(n))
4800
LINE -(vx 4 rl * dx(n),yd(n))
4900
LINE -(vx + rl * dx(n - l),yd(n))
5000
RETURN
5400
PSET (vx + rl * dx(n - l),yu(n - i))
5500
LINE -(.vx + rl * dx(n),yu(n).)
5600
LINE - ( vx + r 1 * dx(n ).. yd( n ))
5700
LINE -(vx + rl * dx(n - l),yd(n - 1)>
5800 IF n > 2 THEN LINE (vx + rl * dx(n - l),yu(n – 1))
5900
RETURN
6000 REM hata sesi
BEEP
6300
RETURN
6400 RANDOMIZE T1MER
0500 DEF FN m(x) = INT (x) - INT ( INT (x) / 2) * 2
6600
fx = 36: INPUT "LÜTFEN LABİRENT BOYUTUNU GİRİN (h,v) ";h,v: PRINT
6700 h = INT (h):v - INT (v)
6800 IF h - 2 AND h < 31 AND v > 2 AND v < 31 THEN 7000
6900 PRINT "2<h<31 -- 2<v<3l": GOSUB 6000: GOTO 6600
7000 n = h * v - l:h - h + l:v = v + l:d - l:nm = 0
IF switch THEN ERASE m,w
7100 DIM m(32,32),w(400) : switch = 1
7200 FOR j - 1 TO v i- l:m(l,j) = 4:m(h + 1,0) = 1: NEXT j
7300 mx - 403:my = 183:vx = INT (mx / 2):vy = INT (my / 2):x - vx
7500 FOR j - 1 TO 8:dx(.i) = x:yu(j) - INT (vy - x * vy / vx)
7600 yd(j) = INT (vy + x * (my - vy) / vx):x = INT (x * 7 / 10): NEXT j
7700 FOR i = 2 TO h:m(i,v + 1) = 8:m(i,l) = 2
7800 FOR j - 2 TO v:m(i,j) = 15: NEXT j,İ
8500 r = INT (h / 2 + l):s = INT (v / 2 + l):m(r,s) = 15
8600 PRINT "labirenti oluşturuyorum.": GOSUB 6000
8900 FOR iw = 1 TO n
9000 i - 0
9100 IF m(r - l,s) < 15 THEN 9300
9200 i = i + l:c(i) = 1
9300 IF m(r,s - 1) < 15 THEN 9500
9400
i = i + l:c(i) = 2
9500
IF m(r + l/s) < 15 THEN 9700
9600
i = i + l:c(i) = 3
9700
IF m(r,s + 1) < 15 THEN 9900
9800
i = i + l:c(i) = 4
9900
IF i = 0 THEN 12300
10000 IF i < > 1 THEN i = INT ( RND (1) * i) + 1
10100 ON c(i) GOTO 10300,10800,11300,11800
10300 m(r,s) = m(r,s) - FN m(m(r,s))
10400 r = r - 1
10500 m(r,s) = m(r,s) - FN m(m(r,s) / 4) * 4
10600 GOTO 13400
10800 m(r,s) = m(r,s) - FN m(m(r,s) / 8) * 8
10900 s = s - 1
11000 m(r,s) = m(r,s) - FN m(m(r,s) / 2) * 2
11100 GOTO 13400
11300 m(r,s) = m(r,s) - FN m(m(r,s) / 4) * 4
11400 r = r + 1
11500 m(r,s) = m(r,s) - FN m(m(r,s))
11600 GOTO 13400
11800 m(r,s) = m(r,s) - FN m(m(r,s) / 2) * 2
11900 s = s + 1
12000 m(r,s) = m(r,s) - FN m(m(r,s) / 8) * 8
12100 GOTO 13400
12300 IF d - - 1 THEN 12700
12400 IF r < > h THEN 13100
12500 IF s < > v THEN 13000
12600 r = 2:s = 2: GOTO 13200
12700 IF r < > 2 THEN 13100
12800 IF s < > v THEN 13000
12900 r = h:s = 2: GOTO 13200
13000 s = s + l:d = - d : GOTO 13200
13100 r = 6 + d
13200 IF m(r,s) - 15 THEN 12300
13300 GOTO 9000
13400 NEXT iw
13500 mh = h:mv - v
13700 i = INT ( RND (1) * (mh - 1)) + 2
13800 m(i,l) = O
13900 m(i,2) = m(i,2) - FN tn(m(i,2) / 8) * S
14000 h - INT ( RND ( 1) * (mh - 1)) + 2
14100 hl = h:vl = v
1420ü G03UB 6000
14300 FRINT "labirent tamamlandi.": GOSUB 6000
14400 GOTO 17000
14700 hz = INT (mx / mh):vz - INT (my / mv)
14800 CLS
14900 PSET (1 + hz, 1 + vz)
15000 LINE -(1 + hz,mv * vz + 1)
15100 FOR j = 1 TO mv: FOR i - 2 TO mh
15200 it - m(i,.i):x - i * hz + l:y = j * vz + 1
15300 IF FN m{n / 2.) = 0 THEN 15700
15500 PSET (x,y)
15600 LINE -<x - hz,y)
15700 IF FN m(n / 4) - 0 THEN 16100
15900 PSET (x,y)
16000
LINE -<x,y - vz)
16100
NEXT i,j
16300
x - h * hz - i:y = v * vz - 1
COLOR 3
16400
PSET (x + l,y + 1)
16500
LINE -(x - hz + 2,y - vz + 2)
16600
PSET (x - hz + 2,y + 1)
1S700
LINE –(x + l,y - vz + 2)
16800 RETURN
17000 FOR x = 1 TO mh: FOR y = 1 TO mv
17100 m(x,y) = m(x,y) + m(x,y) * 16
17200 NEXT y,x
17500 f = INT ( RND (1) * 4) + 1
17600 ON f GOTO 17700,17800,17900,18000
17700 r = 0:s = - 1: GOTO 18100
17800 r = l:s = 0: GOTO 18100
17900 r = 0:s = 1: GOTO 18100
18000 r = - l:s = 0
18100 GOSUB 800
18200 '
18300 IF MOUSE(0) = 0 THEN GOTO 18300
mox = MOUSE(5)
moy = MOUSE(6)
IF mox > 474 AND mox < 516 AND moy > 82 AND moy < 90 THEN 19100
IF mox > 529 AND mox < 571 AND moy > 82 AND moy < 90 THEN 19400
IF mox > 507 AND mox < 540 AND moy > 70 AND moy < 80 THEN 20100
IF mox > 507 AND mox < 540 AND moy > 110 AND moy < 120 THEN 21300
GOTO 18300
18900 GOSUB 6000: GOTO 18300
19100 f = f - 1: IF f < 1 THEN f - 4
19200 GOTO 19500
19400 f - f + 1: IF f > 4 THEN f = 1
19500 ON f GOTO 19600,19700,19800,19900
19600 r = 0:s = - 1: GOTO 21000
19700 r = l:s = 0: GOTO 21000
19800 r = 0:s = 1: GOTO 21000
19900 r = - l:s = 0: GOTO 21000
20100 a = m(h,v)
20200 t = z * 2 ^ ( f - l ) : t = FN m(t / 128)
20300 IF t = 0 THEN 20600
205ÜÜ GOSUB 6000: GOTO 18300
20600 nm = nm + 1
\
WINDOW OUTPUT 2
LOCATE 23
PRINT PTAB(510)"HAREKET"nm
WIND0W OUTPUT 3
20700 IF nm < 400 THEN w(nm) = f
20800 h - h + r:v - v + s
20900 IF v = 2 THEN 21500
21000 GOSUB 300
23100 GOTO 18300
21300 GOSUB 14700
21400 GOTO 18300
21500 WIND0W OUTPUT 3:CL3 : FRINT "tebrikler, "nm" adimda isi basardiniz."
FOR zzz = 0 TO 6000:NEXT zzz
21600 GOSUB 6000: GOSUB 6000: GOSUB 6000
21700 v = vl:h = hl: GOSUB 14700
21900 x - INT (h * hz - hz / 2) + 1:y = INT (v * vz - vz / 2)+1
COLOR 3
22000 PSET (x,y)
22100 FOR n - 1 TO nm
22200 IF n > 400 THEN 22900
22300 f = w(n)
22400 IF f = 1 THEN v - v - 1
22500 IF f = 2 THEN h = h + 1
2260Ü IF f = 3 THEN-v = v + 1
22700 IF f = 4 THEN h = h - 1
22800 LINE –(INT (h * hz - hz / 2) + 1, INT (v * vz - vz / 2) + 1)
22900 NEXT n
COLOR 1,4
23000 IF MOUSE(0) = 0 THEN 23000
GOTO 6400