|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 2944 (0xb80) Types: TextFile Names: »NIMM.BAS«
└─⟦69a509965⟧ Bits:30005211 CR8 BASIC Games └─ ⟦this⟧ »NIMM.BAS«
1 REM PROGRAM NIMM.BAS 10 REM MR A WILLIAM'S GAME OF NIMM 20 DIM R(10),S(8) 30 PRINT "****** THE GAME OF NIMM ******" 40 PRINT "DO YOU KNOW HOW TO PLAY "; 50 INPUT Y$ 60 IF Y$="YES" THEN 80 70 GOSUB 240 80 PRINT "HOW MANY PILES (MIN=2,MAX=10)"; 90 INPUT A 100 IF A<2 THEN 80 110 PRINT "INPUT THE NO. FOR EACH PILE (MAX=128,MIN=3)" 120 FOR B=1 TO A 130 PRINT "PILE ";B; 140 INPUT R(B) 150 IF R(B)>128 THEN 130 160 IF R(B)<3 THEN 130 170 NEXT B 180 PRINT "DO YOU WISH TO GO FIRST "; 190 INPUT Y$ 200 IF Y$="YES" THEN 220 210 GOSUB 360 220 GOSUB 880 230 GO TO 210 240 REM** INSTRUCTIONS FOR PLAY ** 250 PRINT "THE GAME OF NIMM IS PLAYED WITH PILES OF MATCHES,YOU MAY" 260 PRINT "REMOVE AS MANY MATCHES AS YOU WISH (BUT AT LEAST 1)" 270 PRINT "FROM ANY PILE. THE OBJECT OF THE GAME IS TO MAKE YOUR" 280 PRINT "OPPONENT (IN THIS CASE THE COMPUTER ) TAKE THE LAST" 290 PRINT "MATCH ........ GOOD LUCK ......" 300 PRINT 310 PRINT 320 PRINT 330 PRINT 340 RETURN 350 PRINT 360 REM** MACHINE MOVES ** 370 LET T=1 380 FOR Z=1 TO 2 390 FOR E=1 TO A 400 LET J=R(E) 410 FOR F=1 TO J 420 FOR B=1 TO 8 430 S(B)=0 440 NEXT B 450 LET R(E)=R(E)-F 460 FOR G=1 TO A 470 LET L=R(G) 480 FOR H=1 TO 8 490 LET K=2^(8-H) 500 IF R(G)<K THEN 560 510 LET R(G)=R(G)-K 520 IF S(H)=0 THEN 550 530 LET S(H)=0 540 GO TO 560 550 LET S(H)=1 560 NEXT H 570 LET R(G)=L 580 NEXT G 590 LET W=0 600 FOR M=1 TO 8 610 IF S(M)=0 THEN 630 620 LET W=W+1 630 NEXT M 640 LET V=0 650 GOSUB 1110 660 IF V<=0 THEN 730 670 IF T<>1 THEN 700 680 IF V<>1 OR W<>1 THEN 730 690 GO TO 710 700 IF W<>0 THEN 730 710 GOSUB 1170 720 RETURN 730 LET R(E)=R(E)+F 740 NEXT F 750 LET R(E)=J 760 NEXT E 770 LET T=0 780 NEXT Z 790 LET F=1 800 FOR E=1 TO A 810 IF R(E)=0 THEN 850 820 LET R(E)=R(E)-F 830 GOSUB 1170 840 RETURN 850 NEXT E 860 PRINT "SHOULD NOT REACH HERE !!!" 870 STOP 880 REM**PLAYER MAKES A MOVE ** 890 PRINT "INPUT THE NO. OF THE PILE AND THE NO. OF MATCHES TO TAKE" 900 PRINT "PILE "; 910 INPUT D 920 IF D<1 OR D>A THEN 900 930 PRINT "NO. TO TAKE "; 940 INPUT E 950 IF E<1 THEN 930 960 IF E>R(D) THEN 900 970 LET R(D)=R(D)-E 980 LET V=0 990 GOSUB 1110 1000 IF V<>1 THEN 1050 1010 PRINT "PLAYER WINS" 1020 PRINT 1030 PRINT 1040 PRINT 1050 IF V>0 THEN 1100 1060 PRINT "MACHINE WINS" 1070 PRINT 1080 PRINT 1090 PRINT 1100 RETURN 1110 REM** COUNT THE NO. OF MATCHES LEFT ** 1120 FOR C=1 TO A 1130 IF R(C)=0 THEN 1150 1140 LET V=V+R(C) 1150 NEXT C 1160 RETURN 1170 REM** OUTPUT MACHINES MOVE ** 1180 PRINT " I TAKE ";F;" FROM PILE ";E 1190 PRINT "CURRENT PILE STATES ARE:-" 1200 FOR Q=1 TO A 1210 PRINT "PILE ";Q;R(Q) 1220 NEXT Q 1230 PRINT 1240 LET V=0 1250 GOSUB 1110 1260 IF V<>1 THEN 1310 1270 PRINT "MACHINE WINS " 1280 PRINT 1290 PRINT 1300 PRINT 1310 RETURN 1320 END «eof»