10 REM GAMNM.ECB 20 REM...GAMNIM...Revised 03-11-81 R.E.H. 100 PRINT "&K&J&J +++++ G A M N I M +++++" 110 PRINT 120 REM.....NAME--GAMNIM 130 REM 140 REM......DESCRIPTION--PLAYS GAME OF NIM. 150 REM 160 REM.....SOURCE--UNKNOWN ---LAST MOD. 6-18-77 R.E.H. 170 REM 180 REM......TYPE "RUN" AND FOLLOW INSTRUCTIONS. 190 REM 200 REM 210 REM......* * * * MAIN PROGRAM * * 220 DIM A(100),B(100,10),D(2) 230 PRINT "THIS IS THE GAME OF NIM." 240 PRINT 250 PRINT "Do you want INSTRUCTIONS ---=>"; 260 INPUT (1,0)Z$: LET Z$=Z$+"N" 270 IF Z$(1,1)="n" THEN 470 275 IF Z$(1,1)="N" THEN 470 ELSE PRINT 280 IF Z$(1,1)="y" THEN 310 285 IF Z$(1,1)="Y" THEN 310 290 PRINT "INCORRECT ANSWER. PLEASE TYPE Y or N" 300 GOTO 240 310 PRINT "THE GAME IS PLAYED WITH A NUMBER OF PILES" 320 PRINT " OF OBJECTS. ANY NUMBER OF OBJECTS ARE" 330 PRINT " REMOVED FROM ONE PILE BY YOU AND THE MACHINE" 340 PRINT " ALTERNATELY. YOU MUST SPECIFY WHETHER WINNING" 350 PRINT "IS DEFINED AS TAKING OR NOT TAKING THE LAST" 360 PRINT "OBJECT. THE NUMBER OF PILES IN THE GAME," 370 PRINT " AND HOW MANY OBJECTS ARE" 380 PRINT 390 PRINT "XXXX---TYPE IN A LETTER TO GO ON---XXXX"; 400 INPUT (1,0)Z$ 410 PRINT 420 PRINT " ARE ORIGINALLY IN EACH PILE. EACH PILE" 430 PRINT " MAY CONTAIN A DIFFERENT NUMBER OF OBJECTS." 440 PRINT "THE MACHINE WILL SHOW ITS MOVE BY LISTING EACH" 450 PRINT "PILE AND THE NUMBER OF OBJECTS REMAINING IN " 460 PRINT " THE PILES AFTER EACH OF IT'S MOVES." 470 PRINT 480 PRINT "ENTER WIN OPTION - 1 TO TAKE LAST," 490 PRINT " 2 TO AVOID THE LAST."; 500 INPUT (1,0)W 510 IF W=1 THEN 530 520 IF W<>2 THEN 480 530 PRINT "ENTER NUMBER of PILES ---=>"; 540 INPUT N 550 IF N>100 THEN 530 560 IF N<1 THEN 530 570 IF N<>INT(N) THEN 530 580 PRINT "ENTER PILE SIZES" 590 FOR I=1 TO N 600 PRINT I; 610 INPUT " ---=>",A(I) 620 IF A(I)>2000 THEN 600 630 IF A(I)<1 THEN 600 640 IF A(I)<>INT(A(I)) THEN 600 650 NEXT I 660 IF W=1 THEN 900 670 LET C=0 680 FOR I=1 TO N 690 IF A(I)=0 THEN 730 700 LET C=C+1 710 IF C=3 THEN 800 720 LET D(C)=I 730 NEXT 740 IF C=2 THEN 880 750 IF A(D(1))>1 THEN 780 760 PRINT "MACHINE LOSES" 770 GOTO 1600 780 PRINT "MACHINE WINS" 790 GOTO 1600 800 LET C=0 810 FOR I=1 TO N 820 IF A(I)>1 THEN 900 830 IF A(I)=0 THEN 850 840 LET C=C+1 850 NEXT I 860 IF C/2<>INT(C/2) THEN 760 870 GOTO 900 880 IF A(D(1))=1 THEN 780 890 IF A(D(2))=1 THEN 780 900 FOR I=1 TO N 910 LET E=A(I) 920 FOR J=1 TO 10 930 LET F=E/2 940 LET B(I,J)=2*(F-INT(F)) 950 LET E=INT(F) 960 NEXT J 970 NEXT I 980 FOR J=10 TO 0 STEP -1 990 LET C=0 1000 LET H=0 1010 FOR I=1 TO N 1020 IF B(I,J)=0 THEN 1070 1030 LET C=C+1 1040 IF A(I)<=H THEN 1070 1050 LET H=A(I) 1060 LET G=I 1070 NEXT 1080 IF C/2<>INT(C/2) THEN 1150 1090 NEXT J 1100 LET E=INT(N*RND(0)+1) 1110 IF A(E)=0 THEN 1100 1120 LET F=INT(A(E)*RND(0)+1) 1130 LET A(E)=A(E)-F 1140 GOTO 1340 1150 LET A(G)=0 1160 FOR J=1 TO 10 1170 LET B(G,J)=0 1180 LET C=0 1190 FOR I=1 TO N 1200 IF B(I,J)=0 THEN 1220 1210 LET C=C+1 1220 NEXT I 1230 LET A(G)=A(G)+2*(C/2-INT(C/2))*(2^J) 1240 NEXT J 1250 IF W=1 THEN 1340 1260 LET C=0 1270 FOR I=1 TO N 1280 IF A(I)>1 THEN 1340 1290 IF A(I)=0 THEN 1310 1300 LET C=C+1 1310 NEXT I 1320 IF C/2<>INT(C/2) THEN 1340 1330 LET A(G)=1-A(G) 1340 PRINT "PILE SIZE" 1350 FOR I=1 TO N 1360 PRINT I;A(I) 1370 NEXT I 1380 IF W=2 THEN 1410 1390 GOSUB 1530 1400 IF Z=1 THEN 780 1410 PRINT "YOUR MOVE - PILE,NUMBER to be REMOVED ---=>"; 1420 INPUT X,Y 1430 IF X>N THEN 1410 1440 IF X<1 THEN 1410 1450 IF X<>INT(X) THEN 1410 1460 IF Y>A(X) THEN 1410 1470 IF Y<1 THEN 1410 1480 IF Y<>INT(Y) THEN 1410 1490 LET A(X)=A(X)-Y 1500 GOSUB 1530 1510 IF Z=1 THEN 760 1520 GOTO 660 1530 LET Z=0 1540 FOR I=1 TO N 1550 IF A(I)=0 THEN 1570 1560 RETURN 1570 NEXT I 1580 LET Z=1 1590 RETURN 1600 PRINT 1610 PRINT " DO YOU WANT TO PLAY AGAIN ? -->"; 1620 INPUT Z$ 1630 IF Z$(1,1)="Y" THEN 240 1640 IF Z$(1,1)="y" THEN 240 1650 END