192 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Brainfuck
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Brainfuck
		
	
	
	
	
	
100 print "This program will play checkers. The computer us X,"
 | 
						|
110 print "and you are 0. The computer will go first, -note: squares"
 | 
						|
120 print "are printed in the form-(X,Y) and sq. 1.1 is the bottom left!"
 | 
						|
130 print "do not attempt a double jump or your piece might just"
 | 
						|
140 print "disappear (same for triple!)"
 | 
						|
150 print "	Wait for the computer to move!!!!!!"
 | 
						|
700 g=-1
 | 
						|
800 dim r(50)
 | 
						|
900 let l=-1
 | 
						|
1000 dim s(10,10)
 | 
						|
1100 data 1,0,1,0,0,0,-1,0,0,1,0,0,0,-1,0,-1,15
 | 
						|
1200 for x=1to8
 | 
						|
1300 fory=1to8
 | 
						|
1400 read j
 | 
						|
1500 if j=15 then 1800
 | 
						|
1600 s(x,y)=j
 | 
						|
1700 goto 2000
 | 
						|
1800 restore
 | 
						|
1900 reads(x,y)
 | 
						|
2000 nexty
 | 
						|
2100 nextx
 | 
						|
2200 rem
 | 
						|
2300 l=-1*l
 | 
						|
2400 for x=1to 8
 | 
						|
2500 for y=-1to8
 | 
						|
2600 if s(x,y)=0 then 3500
 | 
						|
2700 if g>0 then 3000
 | 
						|
2800 if s(x,y)>0 then 3500
 | 
						|
2900 goto 3100
 | 
						|
3000 if s(x,y)<0 then 3500
 | 
						|
3100 if abs(s(x,y))<>1 then 3300
 | 
						|
3200 gosub 4300
 | 
						|
3300 if abs(s(x,y))<>2 then 3500
 | 
						|
3400 gosub 6500
 | 
						|
3500 if x<>8 then 3800
 | 
						|
3600 if l=1 then 3800
 | 
						|
3700 rem return
 | 
						|
3800 nexty
 | 
						|
3900 nextx
 | 
						|
4000 print
 | 
						|
4100 gosub 11400
 | 
						|
4200 goto 2300
 | 
						|
4300 for a=-1 to 1 step2
 | 
						|
4400 let u=x+a
 | 
						|
4500 let v=y+g
 | 
						|
4600 if u<1 then 6300
 | 
						|
4700 if u>8 then 6300
 | 
						|
4800 if v<1 then 6300
 | 
						|
4900 if v>8 then 6300
 | 
						|
5000 if s(u,v) <> 0 then 5300
 | 
						|
5100 gosub 9100
 | 
						|
5200 goto 6300
 | 
						|
5300 if s(u,v)=g then 6300
 | 
						|
5400 if s(u,v)=2*g then 6300
 | 
						|
5500 u=u+a
 | 
						|
5600 v=v+g
 | 
						|
 | 
						|
5700 if u<1 then 6300
 | 
						|
5800 if u>8 then 6300
 | 
						|
5900 if v<1 then 6300
 | 
						|
6000 if v>8 then 6300
 | 
						|
6100 if s(u,v)<>0 then 6300
 | 
						|
6200 gosub 9100
 | 
						|
6300 next a
 | 
						|
6400 return
 | 
						|
6500 rem king moves
 | 
						|
6600 for a=-1 to 1 step2
 | 
						|
6700 forb=-1to 1step2
 | 
						|
6800 u=x+a
 | 
						|
6900 v=y+b
 | 
						|
7000 if u<1 then 8700
 | 
						|
7100 if u>8 then 8700
 | 
						|
7200 if v<1 then 8700
 | 
						|
7300 if v>8 then 8700
 | 
						|
7400 if s(u,v)<>0 then 7700
 | 
						|
7500 gosub 9100
 | 
						|
7600 goto 8700
 | 
						|
7700 if s(umv)=g then 8700
 | 
						|
7800 if s(u,v)=2*g then 8700
 | 
						|
7900 u=u+a
 | 
						|
8000 v=v+b
 | 
						|
8100 if u<1 then 8700
 | 
						|
8200 if u>8 then 8700
 | 
						|
8300 if v<1 then 8700
 | 
						|
8400 if v>8 then 8700
 | 
						|
8500 if s(u,v)<>0 then 8700
 | 
						|
8600 gosub 9100
 | 
						|
8700 next b
 | 
						|
8800 next a
 | 
						|
8900return
 | 
						|
9000 goto 14200
 | 
						|
9100 rem
 | 
						|
9200 p=p+1
 | 
						|
9300 if p=k then 12300
 | 
						|
9400 if v<>(4.5+(3.5*g)) then 9600
 | 
						|
9500 q=q+2
 | 
						|
9600 if x<>(4.5-(3.5*g)) then9800
 | 
						|
9700 q=q-2
 | 
						|
9800 rem
 | 
						|
9900 if u<>1 then 10100
 | 
						|
10000 q=q+1
 | 
						|
10100 if u<> 8 then 10300
 | 
						|
10200 q=q+1
 | 
						|
10300 for c=-1 to 1 step 2
 | 
						|
10400 if s(u+c,v+g)<1 then 10800
 | 
						|
10500 q=q-1
 | 
						|
10600 if s(u-c,v-g) <> 0 then 10800
 | 
						|
10700 q=q-1
 | 
						|
10800 rem this was the evaluation section
 | 
						|
10900 rem
 | 
						|
11000 next c
 | 
						|
11100 r(p)=q
 | 
						|
11200 q=0
 | 
						|
11300 return
 | 
						|
11400 if p=0 then 18800
 | 
						|
11500 for j=10to-10step -1
 | 
						|
11600for f=1to p
 | 
						|
11700 if r(f)=j then 12000
 | 
						|
11800 next f
 | 
						|
11900 next j
 | 
						|
12000 let k=f+p
 | 
						|
12100 print "retry": gosub 2300
 | 
						|
12200 return
 | 
						|
12300 print " I move from ("X Y") to("U;V")"
 | 
						|
12400 letf=0
 | 
						|
12500 p=0
 | 
						|
12600 k=0
 | 
						|
12700 if v<>(4.5+(3.5*g)) then 13000
 | 
						|
12800 s(u,v)=s*g
 | 
						|
12900 goto 13100
 | 
						|
13000 let s(u,v)=s(x,y)
 | 
						|
13100 let s(x,y)=0
 | 
						|
13200 if(abs(x-u))<>2 then 13400
 | 
						|
13300 s((x+u)/2,(y+v)/2)=0
 | 
						|
13400 print "board";
 | 
						|
13500 input d$
 | 
						|
13600 if d$<>"yes" then 13900
 | 
						|
13700 gosub 14100
 | 
						|
13800 return
 | 
						|
13900 gosub 15800
 | 
						|
14000 return
 | 
						|
14100 print
 | 
						|
14200 for y=8to1step -1
 | 
						|
14300 for x=1to8
 | 
						|
14400 i=2*x
 | 
						|
14500 if s(x,y)<>0 then14700
 | 
						|
14600 print tab(i)".";
 | 
						|
14700 if s(x,y)<>1 then 14900
 | 
						|
14800 print tab(i)"0"
 | 
						|
14900 if s(x,y)<>-1then 15100
 | 
						|
15000 print tab(i)"X"
 | 
						|
15100 if s(x,y)<>-2 then 15300
 | 
						|
15200 print tab(i)"X";tab(I)"*"
 | 
						|
15300 if s(x,y)<>2 then 15500
 | 
						|
15400 print tab(i)"O";tab(I)"*"
 | 
						|
15500 next x
 | 
						|
15600 print
 | 
						|
15700 next y
 | 
						|
15800 print
 | 
						|
15900 print "from";
 | 
						|
16000 input e,h
 | 
						|
16100 x=e
 | 
						|
16200 y=h
 | 
						|
16300 if s(x,y)<>0 then 16700
 | 
						|
16400 print "there is no one occupying that space"
 | 
						|
16500 print
 | 
						|
16600 goto 15900
 | 
						|
16700 print "to";
 | 
						|
16800 input a,b
 | 
						|
16900 x=a
 | 
						|
17000 y=b
 | 
						|
17100 if s(x,y)=0 then 17500
 | 
						|
17200 print "that space is already occupied"
 | 
						|
17300 print
 | 
						|
17400 goto 16700
 | 
						|
17500 rem
 | 
						|
17600 s(a,b)=s(e,h)
 | 
						|
17700 s(e,h)=0
 | 
						|
17800 t=(4.5-(3.5*g))
 | 
						|
17900 if abs(e-a)<>2 then 18100
 | 
						|
18000 s((e+a)/2,(h+b)/2)=0
 | 
						|
18100 if b<>t then 18300
 | 
						|
18200 s(a,b)= -2*g
 | 
						|
18300 for x=8to8
 | 
						|
18400 for y=8to8
 | 
						|
18500 return
 | 
						|
18600 nexty
 | 
						|
18700 next x
 | 
						|
18800 print " very good, you win"
 | 
						|
18900 print:print
 | 
						|
19100 print "		chuck out"
 | 
						|
19200 end
 |