ack/lang/basic/test/checker.bas

193 lines
3.9 KiB
QBasic

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