Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-01 - decus/20-0020/nonam1.gam
There are 2 other files named nonam1.gam in the archive. Click here to see a list.
1780     END;
1790 FOR I:=0 STEP 1 UNTIL 99 DO
1800     IF MF[I]=100 THEN MF[I]:=0;
1810 SL:=EVEN:=YS:=MS:=0;
1820 ML:=YL:=7;
1830 PRINT("WHO FIRST (0=YOU, 1=ME)",NTAB,NCR);
1840 READATA(TTY,I);
1850 IF I<>1 THEN GOTO YRTRN;
1860 MYTRN:
1870 ROUND;
1880 IF ML+MS>100 THEN
1890     BEGIN
1900     PRINT("I WIN");
1910     GOTO SS
1920     END;
1930 MS:=MS+ML;
1940 FOR S:=1,2,3,4 DO
1950     IF Y[S,-1]<>0 AND Y[S,1]<>0 THEN
1960          BEGIN
1970          L:=G[S];
1980          FOR N:=1 STEP 1 UNTIL ST[Y[S,1],0] DO
1990               FOR D:=0,1,2,3 DO
2000                    BEGIN
2010                    SWITCH H:=ILLEG,BLANK,FULL;
2020                    SQ:=ST[Y[S,1],N];
2030                    FOR I:=1 STEP 1 UNTIL 8 DO  P[I,1]:=-1;
2040                    W:=0;
2050                    DIR:=NE[D];
2060                    NX:=SQ;
2070               OTHWAY: DT:=0;
2080                    SW:=1;
2090               RV:  NM:=1;
2100                    FOR I:=0 STEP 1 UNTIL L DO  Z[I]:=Y[S,I];
2110                    FOR I:=1 STEP 1 UNTIL Y[S,0] DO  
2120                         IF Z[I]=YF[NX] THEN
2130                              BEGIN
2140                              Z[I]:=0;
2150                              Z[0]:=Z[0]-1;
2160                              I:=L;
2170                              END;
2180               MORE: NOW:=NX;
2190                    GOTO H[EX(YF,NOW,DIR,NX)+2];
2200               FULL: IF Z[0]<>0 THEN
2210                         FOR I:=1 STEP 1 UNTIL L DO
2220                              IF Z[I]=YF[NX] THEN
2230                                   BEGIN
2240                                   Z[I]:=0;
2250                                   Z[0]:=Z[0]-1;
2260                                   GOTO OKAY;
2270                                   END;
2280                    IF YF[NX]>99 THEN GOTO BLANK;
2290               ILLEG: IF SW<0 THEN GOTO REVSQ;
2300                    SW:=-1;
2310                    NX:=NOW;
2320                    DIR:=-DIR;
2330                    GOTO RV;
2340               BLANK: DT:=DT+SW;
2350                    DIS:=ABS(DT);
2360                    P[W+DIS,1]:=NX;
2370                    P[W+DIS,2]:=PR[DIS]*(L*Y[S,0])^2;
2380                    GOTO OK;
2390               OKAY: DT:=DT+SW;
2400                    DIS:=ABS(DT);
2410               OK:  NM:=NM+1;
2420                    IF NM<L THEN GOTO MORE;
2430                    IF Z[0]>0 THEN
2440               REVSQ:    FOR I:=W+1 STEP 1 UNTIL W+4 DO
2450                              P[I,1]:=-1;
2460                    IF SQ>-1 THEN
2470                         BEGIN
2480                         W:=4;
2490                         NX:=SQ;
2500                         SQ:=-1;
2510                         DIR:=NE[D+4];
2520                         GOTO OTHWAY;
2530                         END;
2540                    FOR I:=1,2,3,4 DO
2550                         FOR J:=5,6,7,8 DO
2560                              IF P[I,1]=P[J,1] THEN P[J,1]:=-1;
2570                    FOR I:=1 STEP 1 UNTIL 8 DO
2580                         BEGIN
2590                         J:=P[I,1];
2600                         IF J<>-1 THEN YF[J]:=YF[J]+P[I,2];
2610                         END;
2620                    END;
2630          END;
2640 FOR I:=1 STEP 1 UNTIL ML DO
2650     BEGIN
2660     II:=0;
2670     FOR J:=1 STEP 1 UNTIL 99 DO
2680          IF (YF[II]<YF[J])
2690               OR  YF[II]=YF[J] AND RANDOM<.33 THEN
2700                    II:=J;
2710     IF YF[II]<100 THEN GOTO OUT;
2720     YF[II]:=SL;
2730     ST[SL,I]:=II;
2740     END;
2750 OUT:
2760 FOR J:=0 STEP 1 UNTIL 99 DO
2770     IF YF[J]>99 THEN YF[J]:=0;
2780 IF I<=ML THEN
2790     BEGIN
2800     XY1:=1;
2810     FOR J:=1,2,3,4 DO
2820          IF Y[J,1]=0 THEN XY1:=G[J];
2830     DIS:=0;
2840     FOR II:=1 STEP 1 UNTIL ML DO
2850          BEGIN
2860     A:   XY:=MD(100);
2870          IF YF[XY]<>0 THEN GOTO A;
2880          FOR D:=0 STEP 1 UNTIL 7 DO
2890               BEGIN
2900               NOW:=XY;
2910               FOR JJ:=2 STEP 1 UNTIL XY1 DO
2920                    IF EX(YF,NOW,NE[D],N)=0
2930                         THEN NOW:=NX
2940                              ELSE GOTO O2;
2950               GOTO O1;
2960          O2:  END;
2970          DIS:=DIS+1;
2980          IF DIS>10 THEN XY1:=1;
2990          GOTO A;
3000     O1:  IF II+1<=ML AND XY1>1 THEN
3010               BEGIN
3020               JJ:=XY+NE[D];
3030               ST[SL,II]:=JJ;
3040               YF[JJ]:=SL;
3050               II:=II+1;
3060               END;
3070         
3080          ST[SL,II]:=XY;
3090          YF[XY]:=SL;
3100          END;
3110     END;
3120 PRINT("MY SHOTS ARE",NTAB,NCR);
3130 FOR I:=1 STEP 1 UNTIL ML DO  PRINT(ST[SL,I],NTAB,NCR);
3140 PRINT;
3150 ST[SL,0]:=ML;
3160 GOTO REP;
3170 R1: PRINT("REPEAT ",NTAB,NCR);
3180 REP:
3190 PRINT("REPORT",NTAB,NCR);
3200 READATA(TTY,HIT[1],HIT[2],HIT[3],HIT[4]);
3210 IF HIT[1]+HIT[2]+HIT[3]+HIT[4]>ML THEN GOTO R1;
3220 FOR I:=1 STEP 1 UNTIL 4 DO
3230     IF HIT[I]+Y[I,0]>G[I] THEN GO TO R1;
3240 FOR I:=1,2,3,4 DO
3250     IF Y[I,-1]<>0 THEN
3260          BEGIN
3270          IF Y[I,0]+HIT[I]=G[I] THEN Y[I,-1]:=0;
3280          FOR II:=1 STEP 1 UNTIL HIT[I] DO
3290               Y[I,Y[I,0]+II]:=SL;
3300          Y[I,0]:=Y[I,0]+HIT[I];
3310          END;
3320 YL:=0;
3330 FOR I:=1,2,3,4 DO YL:=YL+Y[I,-1];
3340 IF YL=0 THEN
3350     BEGIN
3360     PRINT("I WIN");
3370     GOTO TD;
3380     END;
3390 YRTRN:
3400 ROUND;
3410 IF YL+YS>100 THEN
3420     BEGIN
3430     PRINT("YOU WIN");
3440     ML:=YL;
3450     MS:=YS;
3460     GOTO TD;
3470     END;
3480 I:=MD(100);
3490 PRINT("YOUR",NTAB,YL,NTAB,"SHOTS, ",NTAB,NCR);
3500 IF YL<ML THEN PRINT("O LOSING ONE")
3510      ELSE IF I<25 THEN PRINT("JOHN PAUL")
3520          ELSE IF I<50 THEN PRINT("LORD NELSON")
3530               ELSE IF I<75 THEN PRINT("LIEF")
3540                    ELSE PRINT("SIR FRANCIS");
3550 YS:=YS+YL;
3560 FOR I:=0,1,2,3,4 DO HIT[I]:=0;
3570 IF            YL=1 THEN READATA(TTY,Z[1])
3580  ELSE      IF YL=2 THEN READATA(TTY,Z[1],Z[2])
3590   ELSE     IF YL=3 THEN READATA(TTY,Z[1],Z[2],Z[3])
3600    ELSE    IF YL=4 THEN READATA(TTY,Z[1],Z[2],Z[3],Z[4])
3610     ELSE   IF YL=5 THEN READATA(TTY,Z[1],Z[2],Z[3],Z[4],Z[5])
3620      ELSE  IF YL=6 THEN READATA(TTY,Z[1],Z[2],Z[3],Z[4],Z[5],Z[6])
3630       ELSE              READATA(TTY,Z[1],Z[2],Z[3],Z[4],Z[5],Z[6],Z[7]);
3640 FOR K:=1 STEP 1 UNTIL YL DO
3650     BEGIN
3660 GOTO B2;
3670 B1: READATA(TTY,Z[K]);
3680 B2: I:=Z[K];
3690     IF I<0 OR I>99 THEN
3700          BEGIN
3710          PRINT(I,NTAB," IIS OUT OF BOUNDS.");
3720          GOTO B1;
3730          END;
3740     J:=MF[I];
3750     IF J>0 THEN
3760          BEGIN
3770          PRINT(I,NTAB,"WAS TAKEN ON ROUND",NTAB,J);
3780         GOTO B1;
3790          END;
3800     IF J<0 THEN
3810          BEGIN
3820          J:=-J;
3830          HIT[0]:=1;
3840          HIT[J]:=HIT[J]+1;
3850          M[J,0]:=M[J,0]+1;
3860          END;
3870     MF[I]:=SL;
3880     END;
3890 IF HIT[0]=0 THEN PRINT("SPLASH")
3900     ELSE FOR K:=1,2,3,4 DO
3910          IF HIT[K]<>0 THEN
3920               BEGIN
3930               PRINT("YOU HIT MY ",NTAB,NCR);
3940               PS(K);
3950               PRINT(HIT[K],NTAB,"TIMES",NTAB,NCR);
3960               IF M[K,0]=G[K] THEN
3970                    BEGIN
3980                    PRINT(" AND SANK IT",NTAB,NCR);
3990                    M[K,-1]:=0;
4000                    END;
4010               B;
4020               END;
4030 ML:=0;
4040 FOR I:=1,2,3,4 DO ML := ML+M[I,-1];
4050 IF ML<>0 THEN GOTO MYTRN;
4060 B;
4070 B;
4080 PRINT("YOU WIN");
4090 GOTO TD;
4100 SS:
4110 PRINT(100-MS,NTAB,"SQUARES LEFT FOR",NTAB,ML,NTAB,"SHOTS");
4120 TD:
4130 PRINT("MY SHIPS:");
4140 FOR K:=1,2,3,4 DO
4150     BEGIN
4160     PS(K);
4170     FOR J:=1 STEP 1 UNTIL G[K] DO PRINT(M[K,J],NTAB,NCR);
4180     B;
4190     END;
4200 END