A large commit.
[pdp8.git] / sw / src / basic / NIMBLE.BA
diff --git a/sw/src/basic/NIMBLE.BA b/sw/src/basic/NIMBLE.BA
new file mode 100644 (file)
index 0000000..1c28789
--- /dev/null
@@ -0,0 +1,190 @@
+10 REM GAME OF NIMBLE
+80 PRINT "NEED INSTRUCTIONS ";
+90 GOSUB 1900
+100 IF A$="N" GOTO 290
+110 PRINT
+120 PRINT "IN THIS GAME OF NIMBLE TWO PLAYERS ARE CONFRONTED WITH P"
+130 PRINT "(2<P<7) PILES OF OBJECTS WITH N(I) ((0<I<P),(0<=N(I)<64))"
+140 PRINT "OBJECTS IN PILE I. EACH PLAYER IN TURN MUST SELECT ONE"
+150 PRINT "PILE AND TAKE ANY QUANTITY FROM THAT PILE FROM 1 TO ALL."
+160 PRINT "THE PLAYER TO TAKE THE LAST OBJECT IS THE WINNER."
+170 PRINT "THE GAME IS BEGUN WITH A COIN TOSS-THE WINNER OF THAT TOSS"
+190 PRINT "HAS THE RIGHT TO INDICATE A PREFERENCE FOR GOING FIRST"
+200 PRINT "OR SECOND."
+210 PRINT "YOU INDICATE YOUR MOVE BY P,Q WHERE P=THE PILE NUMBER,"
+220 PRINT "AND Q=THE QUANTITY."
+260 PRINT "GOOD LUCK ! ! !"
+290 DIM G(6,6),V(6),N(6),P(6),W(6)
+300 PRINT "PICK A NUMBER ";
+310 INPUT X
+320 PRINT "THANK YOU"
+330 FOR I=1 TO X
+340 T=RND(1)
+350 NEXT I
+360 I9=6
+370 J9=6
+380 FOR I=1 TO I9
+390 V(I)=2**(I-1)
+400 NEXT I
+410 FOR K=1 TO 6
+415 N(K)=0\N(K)=0
+416 NEXT K
+420 FOR I=1 TO 6
+430 FOR J=1 TO 6
+431 G(I,J)=0
+432 NEXT J
+433 NEXT I
+440 I9=6
+450 PRINT "SHOULD I SET UP GAME ";
+460 GOSUB 1900
+470 IF A$="N" GOTO 590
+480 PRINT "INDICATE DIFFICULTY LEVEL (1-5) ";
+490 INPUT I9
+500 IF I9>63 GOTO 480
+510 IF I9<1 GOTO 480
+520 I9=I9+1
+530 N=INT(RND(1)*(J9-2))+3
+540 FOR J=1 TO N
+550 N(J)=INT(RND(1)*(2*V(I9)-1))+1
+560 GOSUB 1700
+570 NEXT J
+580 GOTO 730
+590 PRINT "HOW MANY PILES ";
+600 PRINT "(3-";J9;")";
+610 INPUT N
+620 IF N<3 GOTO 600
+630 IF N>9 GOTO 600
+640 PRINT "HOW MANY IN PILE NO.";
+650 FOR J=1 TO N
+660 PRINT J;
+670 INPUT N(J)
+680 IF N(J)<2*V(I9) GOTO 710
+690 PRINT "SELECT NUMBERS LESS THAN ";2*V(I9)
+700 GOTO 660
+710 GOSUB 1700
+720 NEXT J
+730 S=1
+740 PRINT "I AM ABOUT TO TOSS A COIN-CALL H OR T ";
+750 T1=INT(2*RND(1))
+760 INPUT A$
+770 IF A$="H" GOTO 810
+780 IF A$="T" GOTO 810
+790 PRINT "DON'T BE A WISE GUY-CALL H OR T ";
+800 GOTO 760
+810 IF T1=0 GOTO 840
+820 C$="H"
+830 GOTO 850
+840 C$="T"
+850 PRINT "THE TOSS WAS ";C$
+860 GOSUB 1780
+870 IF C$=A$ GOTO 900
+880 PRINT "MY CHOICE - PONDER PONDER PONDER - ";
+890 GOSUB 940
+900 PRINT "YOUR CHOICE-DO YOU WANT TO GO FIRST ";
+910 GOSUB 1900
+920 IF A$="Y" GOTO 970
+930 GOTO 990
+940 FOR I=1 TO I9
+950 IF P(I)=1 GOTO 990
+960 NEXT I
+970 PRINT "YOU GO FIRST - ";
+980 GOTO 1010
+990 PRINT "I GO FIRST - ";
+1000 S=(S-1)**2
+1010 IF S=1 GOTO 1400
+1020 FOR I= I9 TO 1 STEP -1
+1030 IF P(I)=1 GOTO 1100
+1040 NEXT I
+1050 J=INT(N*RND(1))+1
+1060 IF N(J)=0 GOTO 1050
+1070 T=INT(N(J)*RND(1))+1
+1080 PRINT "MY MOVE IS ";J;", ";T
+1090 GOTO 1560
+1100 T=V(I)
+1110 FOR J = 1 TO N
+1120 IF G(I,J)=1 GOTO 1140
+1130 NEXT J
+1140 G(I,J)=0
+1150 P(I)=0
+1160 FOR K=1 TO I
+1170 IF P(K)=0 GOTO 1210
+1180 T=T+(2*G(K,J)-1)*V(K)
+1190 G(K,J)=(G(K,J)-1)**2
+1200 P(K)=0
+1210 NEXT K
+1220 PRINT "MY MOVE IS ";J;", ";T
+1230 REM WAS PRINT FORMAT
+1240 N(J)=N(J)-T
+1250 FOR J=1 TO N
+1260 IF N(J)<>0 GOTO 1370
+1270 NEXT J
+1280 IF S=1 GOTO 1310
+1290 PRINT "I WIN !!!      ";
+1300 GOTO 1320
+1310 PRINT "YOU WIN !!!      ";
+1320 W(S+1)=W(S+1)+1
+1330 PRINT "PLAY AGAIN ";
+1340 GOSUB 1900
+1350 IF A$="N" GOTO 1970
+1360 GOTO 410
+1370 IF S=1 GOTO 1000
+1380 GOSUB 1800
+1390 GOTO 1000
+1400 PRINT "YOUR MOVE ";
+1410 INPUT J,T
+1420 IF J>=1 GOTO 1460
+1430 PRINT "PICK A PLIE FROM 1 TO ";N;
+1440 INPUT J
+1450 GOTO 1420
+1460 IF J>N GOTO 1430
+1470 IF N(J)>0 GOTO 1510
+1480 PRINT "THAT PILE IS EMPTY"
+1490 GOSUB 1800
+1500 GOTO 1400
+1510 IF T>=1 GOTO 1550
+1520 PRINT "PICK A QUANTITY FROM 1 TO ";N(J);
+1530 INPUT T
+1540 GOTO 1510
+1550 IF T>N(J) GOTO 1520
+1560 N(J)=N(J)-T
+1570 T=N(J)
+1580 FOR I=I9 TO 1 STEP -1
+1590 IF V(I)>T GOTO 1650
+1600 T=T-V(I)
+1610 IF G(I,J)=1 GOTO 1680
+1620 G(I,J)=1
+1630 P(I)=(P(I)-1)**2
+1640 GOTO 1680
+1650 IF G(I,J)=0 GOTO 1680
+1660 G(I,J)=0
+1670 P(I)=(P(I)-1)**2
+1680 NEXT I
+1690 GOTO 1250
+1700 T=N(J)
+1710 FOR I=I9 TO 1 STEP -1
+1720 IF V(I)>T GOTO 1760
+1730 G(I,J)=1
+1740 T=T-V(I)
+1750 P(I)=(P(I)-1)**2
+1760 NEXT I
+1770 RETURN
+1780 PRINT "THERE ARE ";N;" PILES"
+1800 PRINT
+1810 FOR X=1 TO N
+1820 PRINT X;
+1830 NEXT X
+1840 PRINT
+1850 FOR X=1 TO N
+1860 PRINT N(X);
+1870 NEXT X
+1880 PRINT
+1890 RETURN
+1900 INPUT A$
+1910 IF A$<>"N" GOTO 1930
+1920 RETURN
+1930 IF A$<>"Y" GOTO 1950
+1940 RETURN
+1950 PRINT "ANSWER ONLY Y OR N";
+1960 GOTO 1900
+1970 PRINT "  FINAL SCORE - ME ";W(1),"YOU ";W(2)
+1990 END