LABİRENT

Bu 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