DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦a3875c8ad⟧ TextFile

    Length: 2944 (0xb80)
    Types: TextFile
    Names: »NIMM.BAS«

Derivation

└─⟦69a509965⟧ Bits:30005211 CR8 BASIC Games
    └─ ⟦this⟧ »NIMM.BAS« 

TextFile

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»