193 lines
3.9 KiB
Brainfuck
193 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
|
|
17500 rem
|
|
17400 goto 16700
|
|
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
|