Back to Main page.
Back to Main tapes page.
10 RM:MADE BY BILL MCFADDEN ON 11-14-77
20 REM:ALL RIGHTS RESERVED
30 REM:BENSON POLYTECHNIC HIGH SCHOOL
40 REM:GAME OF 6 STEPS
50 DIM A[6,6],B[6,6],C[6],D[6],R[6],S[6],X[6,6],Y[6],Z[6],A$[72]
60 DIM B$[72],C$[72],C0$[72],E$[72],S$[15]
70 FILES *,*
80 ASSIGN "6INSTR.B920",1,Z9
90 ASSIGN "6SCORE.B920",2,Z8
100 GOTO 360
110 MAT X=A
120 MAT Y=R
130 MAT Z=C
140 V=V2
150 RETURN
160 MAT A=X
170 MAT R=Y
180 MAT C=Z
190 V2=V
200 RETURN
210 MAT X=B
220 MAT Y=S
230 MAT Z=D
240 V=V1
250 RETURN
260 MAT B=X
270 MAT S=Y
280 MAT D=Z
290 V1=V
300 RETURN
310 D=INT(6*RND(0)+1)
320 D1=INT(6*RND(0)+1)
330 RETURN
340 PRINT "?"C$"?"
350 GOTO 520
360 PRINT "This is the game of 6 Steps."
370 S$="X 0605050403030"
380 V1=V2=Q=Q1=Q3=0
390 MAT A=ZER
400 MAT B=A
410 MAT C=ZER
420 MAT D=C
430 MAT R=C
440 MAT S=C
450 PRINT " Type 'I' for instructions."
460 PRINT "Name: ";
470 LINPUT B$
480 X=POS(B$," ")
490 B$=B$[1,X-1+((LEN(B$)+1)* NOT X)]
500 IF LEN(B$)<2 OR LEN(B$)>16 THEN 460
510 REM:ENTER COMMAND
520 IF NOT Q THEN 600
530 Q=Q+1
540 IF (Q/2)-1 ";
610 LINPUT C$
620 C$=UPS$(C$)
630 C0$=C$[POS(C$,"/")+1]
640 S6=0
650 IF C$="" THEN 870
660 GOTO POS("BPOQSIHRC",C$[1,1]) OF 1590,1810,360,1960,2330,2410,2480,870,3020
670 IF C$#'6'18'1'20'1'20'1'20 THEN 340
675 REM:RESULTS PRINTOUT
680 IF Z8>2 THEN 520
690 IF END #2 THEN 770
700 READ #2,1
710 PRINT LIN(-2)"NAME"TAB(22)"SCO BON TOT COMP: SCO BON TOT"
720 READ #2;A$,S,S1,S2,S3
730 IMAGE20A,2X,3(3D,2X),7X,3(3D,2X)
740 PRINT USING 730;A$,S,S1-S,S1,S2,S3-S2,S3
750 S6=S6+1
760 GOTO 720
770 PRINT LIN(-1)"NUMBER OF ENTRIES ="S6
780 IF Z8 THEN 520
790 PRINT "CLEAR FILE ? ";
800 LINPUT A$
810 IF A$#"Y" THEN 520
820 FOR X=1 TO REC(2)
830 PRINT #2,X; END
840 NEXT X
850 GOTO 520
860 REM:ROLL
870 Z=0
880 GOSUB 310
890 IMAGE#," rolls (",d,",",d,")"
900 E=(A[D,D1]=0)
910 E1=(A[D1,D]=0)
920 REM: IS PLAYER'S BOARD FULL?
930 FOR X=1 TO 6
940 FOR Y=1 TO 6
950 IF A[X,Y]=0 THEN 1020
960 NEXT Y
970 NEXT X
975 IF Q AND Q1 THEN 3080
980 PRINT LIN(1)"Your board is full--";
1010 GOTO 1970
1020 IF Q THEN 3080
1030 PRINT B$;
1040 PRINT USING 890;D,D1
1050 GOTO E+E1-(D=D1) OF 1360,1490
1060 REM:CROSS OUT A SQUARE
1070 PRINT LIN(1)"Which square to cross out ? ";
1080 LINPUT A$
1090 IF A$="" THEN 1200
1100 X=POS(A$,",")
1110 IF X<2 OR LEN(A$)<3 THEN 1070
1120 CONVERT A$[1,X-1] TO F,1070
1130 CONVERT A$[X+1] TO F1,1070
1140 IF F<1 OR F>6 OR F1<1 OR F1>6 OR INT(F)#F OR INT(F1)#F1 THEN 1070
1150 IF A[F,F1]=0 THEN 1290
1160 PRINT "That square has been taken."
1170 Z=Z+1
1180 IF Z<2 THEN 1070
1190 Z=0
1200 PRINT "These squares are unused:"
1210 FOR X=1 TO 6
1220 PRINT LIN(1)"Step"X": ";
1230 FOR Y=1 TO 6
1240 IF A[X,Y]#0 THEN 1260
1250 PRINT USING "#,dx";Y
1260 NEXT Y
1270 NEXT X
1280 GOTO 1070
1290 A[F,F1]=-1
1300 PRINT "OK"
1310 GOSUB 110
1320 GOSUB 3980
1330 GOSUB 160
1340 GOTO 3080
1350 REM:MANDATORY CIRCLE
1360 PRINT " and is forced to circle ";
1370 IF E=0 THEN 1420
1380 IMAGE"(",D,",",D,")."
1390 PRINT USING 1380;D,D1
1400 A[D,D1]=1
1410 GOTO 1440
1420 PRINT USING 1380;D1,D
1430 A[D1,D]=1
1440 GOSUB 110
1450 GOSUB 4260
1460 GOSUB 160
1470 GOTO 3080
1480 REM:CHOICE TO CIRCLE
1490 PRINT LIN(1)"Which square to circle ";
1500 INPUT F,F1
1510 IF F<1 OR F>6 OR F1<1 OR F1>6 THEN 1490
1520 IF (F=D AND F1=D1) OR (F=D1 AND F1=D) THEN 1550
1530 PRINT "You did not roll that combination."
1540 GOTO 1490
1550 PRINT "OK"
1560 A[F,F1]=1
1570 GOTO 1440
1580 REM:BOARD
1590 IF C0$=C$ THEN 1620
1600 GOTO POS("IMC",C0$[1,1]) OF 1620,1620,1660
1610 GOTO 340
1620 MAT X=A
1630 PRINT LIN(-2)"BOARD FOR "UPS$(B$)":"LIN(-1)
1640 GOSUB 1710
1650 IF C0$#C$ THEN 520
1660 MAT X=B
1670 PRINT LIN(-2)"BOARD FOR COMPUTER:"LIN(-1)
1680 GOSUB 1710
1690 GOTO 520
1700 REM:BOARD PRINTOUT
1710 FOR X=1 TO 6
1720 FOR Y=1 TO 6
1730 CONVERT Y TO S$[2,2]
1740 PRINT TAB((Y*2)+(X*2)-4);S$[X[X,Y]+2,X[X,Y]+2];
1750 NEXT Y
1760 PRINT TAB(23)"STEP"X
1770 NEXT X
1780 PRINT TAB(10)"*"LIN(-2)
1790 RETURN
1800 REM:PRINT A SAMPLE BOARD
1810 PRINT LIN(-3)
1820 FOR X=1 TO 6
1830 FOR Y=1 TO 6
1840 PRINT USING "#,D";TAB((Y*2)+(X*2)-4),Y
1850 NEXT Y
1860 PRINT TAB(23)"STEP"X
1870 NEXT X
1880 PRINT TAB(10)"*"
1890 PRINT LIN(-1)"BONUS SCORES:"TAB(24)"DIAGONAL 3'S"TAB(46)"50"
1900 PRINT TAB(24)"DIAGONAL 4'S"TAB(46)"40"
1910 PRINT "ANY STEP 1 TO 6"TAB(17)"50"TAB(24)"DIAGONAL 5'S"TAB(46)"30"
1920 PRINT "DIAGONAL 1'S"TAB(17)"60"TAB(24)"DIAGONAL 6'S"TAB(46)"30"
1930 PRINT "DIAGONAL 2'S"TAB(17)"50"TAB(24)"* 6 STEPS (VERTICAL)"TAB(46)"100"LIN(-3)
1940 GOTO 520
1950 REM:QUIT/END OF GAME
1960 PRINT "Thought you couldn't take it!"
1970 PRINT "The game is over!"
1980 IF C0$[1,1]="N" THEN 2300
1990 PRINT "Here are the results:"
2000 MAT X=A
2010 PRINT LIN(-2)"BOARD FOR "UPS$(B$)":"LIN(-1)
2020 GOSUB 1710
2030 GOSUB 2630
2040 IF Z8 THEN 2170
2050 IF END #2 THEN 2160
2060 READ #2,1
2070 LOCK #2
2080 IF TYP(2)=3 THEN 2110
2090 ADVANCE #2;1,S3
2100 GOTO 2080
2110 IF C$[1,1]#"Q" THEN 2130
2120 B$[LEN(B$)+1]=" Q"
2130 IF NOT Q3 THEN 2150
2140 B$[LEN(B$)+1]=" C"
2150 PRINT #2;B$,S1,S, END
2160 UNLOCK #2
2170 MAT X=B
2180 PRINT LIN(-1)"BOARD FOR COMPUTER:"LIN(-1)
2190 GOSUB 1710
2200 GOSUB 2670
2210 IF Z8 THEN 2300
2220 IF END #2 THEN 2290
2230 READ #2,1
2240 LOCK #2
2250 IF TYP(2)=3 THEN 2280
2260 ADVANCE #2;1,S3
2270 GOTO 2250
2280 PRINT #2;S1,S, END
2290 UNLOCK #2
2300 PRINT "Thanks for playing 6 steps!"
2310 STOP
2320 REM:STATISTICS
2330 IF C0$=C$ THEN 2360
2340 GOTO POS("IMC",C0$[1,1]) OF 2360,2360,2380
2350 GOTO 340
2360 GOSUB 2630
2370 IF C0$#C$ THEN 520
2380 GOSUB 2670
2390 GOTO 520
2400 REM:HELP
2410 IF Z9>2 THEN 2470
2420 READ #1,1
2430 IF END #1 THEN 2480
2440 READ #1;A$
2450 PRINT A$
2460 GOTO 2440
2470 PRINT "Complete instructions not available now."
2480 PRINT LIN(-1)"COMMANDS AVAILABLE:"
2490 PRINT " Push 'RETURN' to roll"
2500 PRINT "B Get a board of the game as it stands"
2510 PRINT "H Get a list of commands"
2520 PRINT "I Get instructions"
2530 PRINT "O Start the game over"
2540 PRINT "P Have a blank score card printed out"
2550 PRINT "Q Quit playing"
2560 PRINT "S Get current statistics"
2570 PRINT "The 'B' and 'S' commands can be shortened by"
2580 PRINT "using '/I' for player's board and statistics"
2590 PRINT "and '/C' for computer's board and statistics."
2600 PRINT "For example, 'B/C' will give you the computer's board."LIN(-5)
2610 GOTO 520
2620 REM:STATISTICS FOR PLAYER
2630 GOSUB 110
2640 PRINT LIN(-1)"STATISTICS FOR "B$":"LIN(-1)
2650 GOTO 2710
2660 REM:STATISTICS FOR COMPUTER
2670 GOSUB 210
2680 PRINT LIN(-1)"STATISTICS FOR COMPUTER:"LIN(-1)
2690 GOTO 2710
2700 REM:STATISTICS PRINTOUT
2710 S=S1=0
2720 FOR X=1 TO 6
2730 S1=S
2740 FOR Y=1 TO 6
2750 S=S+(Y*(X[X,Y]=1))
2760 NEXT Y
2770 IMAGE"Step ",D,": ",DD," Points."
2780 PRINT USING 2770;X,S-S1
2790 NEXT X
2800 IMAGE"Total = ",DD," Points."
2810 PRINT USING 2800;S
2820 PRINT LIN(-1)"BONUS SCORES:"LIN(-1)
2830 S1=S
2840 FOR X=1 TO 6
2850 IF Y[X]#1 THEN 2880
2860 PRINT USING 2770;X,50
2870 S=S+50
2880 NEXT X
2890 FOR X=1 TO 6
2900 CONVERT S$[(X*2)+2,(X*2)+3] TO S2
2910 IF Z[X]#1 THEN 2950
2920 IMAGE"Diagonal ",D,"'s: ",DD," Points."
2930 PRINT USING 2920;X,S2
2940 S=S+S2
2950 NEXT X
2960 IF V#1 THEN 2990
2970 PRINT "6 Steps: 100 Points."
2980 S=S+100
2990 PRINT "Total Bonus Points ="S-S1
3000 PRINT LIN(-1)"Total Score ="S;LIN(1)"-------------------------"
3010 RETURN
3020 Q=Q3=1
3030 Q1=0
3040 Q2=999999.
3050 CONVERT C0$ TO Q2,520
3060 GOTO 520
3070 REM:COMPUTER'S TURN
3080 GOSUB 310
3090 IF NOT Q THEN 3160
3100 IF Q1 THEN 3150
3110 Q1=1
3120 GOSUB 110
3130 PRINT B$;
3140 GOTO 3180
3150 Q1=0
3160 PRINT "Computer";
3170 GOSUB 210
3180 PRINT USING 890;D,D1
3190 E=(X[D,D1]=0)
3200 E1=(X[D1,D]=0)
3210 GOTO E+E1-(D=D1) OF 3440,3580
3220 REM:COMPUTER CROSS OUT A SQUARE
3230 W=999999.
3240 FOR X=1 TO 6
3250 FOR Y=1 TO 6
3260 IF X[X,Y]#0 THEN 3320
3270 GOSUB 3740
3280 IF R>W THEN 3320
3290 W=R
3300 X0=X
3310 Y0=Y
3320 NEXT Y
3330 NEXT X
3340 IMAGE" and crosses out (",d,",",d,")."
3350 PRINT USING 3340;X0,Y0
3360 X[X0,Y0]=-1
3370 GOSUB 3980
3380 IF NOT Q1 OR NOT Q THEN 3410
3390 GOSUB 160
3400 GOTO 520
3410 GOSUB 260
3420 GOTO 520
3430 REM:MANDATORY CIRCLE
3440 PRINT " and is forced to circle ";
3450 IF E=0 THEN 3490
3460 PRINT USING 1380;D,D1
3470 X[D,D1]=1
3480 GOTO 3510
3490 PRINT USING 1380;D1,D
3500 X[D1,D]=1
3510 GOSUB 4260
3520 IF NOT Q1 OR NOT Q THEN 3550
3530 GOSUB 160
3540 GOTO 520
3550 GOSUB 260
3560 GOTO 520
3570 REM:CHOICE CIRCLE
3580 X=D
3590 Y=D1
3600 GOSUB 3740
3610 R0=R
3620 X=D1
3630 Y=D
3640 GOSUB 3740
3650 PRINT " and circles ";
3660 IF (R0=R AND D1R THEN 3700
3670 PRINT USING 1380;D1,D
3680 X[D1,D]=1
3690 GOTO 3510
3700 PRINT USING 1380;D,D1
3710 X[D,D1]=1
3720 GOTO 3510
3730 REM:AVERAGING SECTION
3740 S=0
3750 X[X,Y]=1
3760 CONVERT S$[(Y*2)+2,(Y*2)+3] TO S1
3770 FOR X1=1 TO 6
3780 S=S+(X[X1,Y]=1)
3790 NEXT X1
3800 S=S*(Z[Y]>-1)
3810 R1=(S/6)*S1
3820 S=0
3830 FOR Y1=1 TO 6
3840 S=S+(X[X,Y1]=1)
3850 NEXT Y1
3860 S=S*(Y[X]>-1)
3870 R2=(S/6)*50
3880 S=S0=0
3890 FOR X1=1 TO 6
3900 S=S+(X[X1,7-X1]=1)
3910 S0=S0+((X=X1) AND (Y=7-X1))
3920 NEXT X1
3930 S0=S0*(V>-1)
3940 R=(R1+R2+((S/6)*100*S0)+Y/(S0+3))
3950 X[X,Y]=0
3960 RETURN
3970 REM:SET UP AFTER CROSSOUT
3980 FOR X=1 TO 6
3990 IF Y[X]=-1 THEN 4060
4000 FOR Y=1 TO 6
4010 IF X[X,Y]=-1 THEN 4040
4020 NEXT Y
4030 GOTO 4060
4040 Y[X]=-1
4050 PRINT "Forfeit of 50 bonus points for step"X
4060 NEXT X
4070 FOR X=1 TO 6
4080 IF Z[X]=-1 THEN 4160
4090 FOR Y=1 TO 6
4100 IF X[Y,X]=-1 THEN 4130
4110 NEXT Y
4120 GOTO 4160
4130 Z[X]=-1
4140 IMAGE"Forfeit of ",AA," bonus points for diagonal ",d,"'s."
4150 PRINT USING 4140;S$[(X*2)+2,(X*2)+3],X
4160 NEXT X
4170 IF V=-1 THEN 4240
4180 FOR X=1 TO 6
4190 IF X[X,7-X]=-1 THEN 4220
4200 NEXT X
4210 RETURN
4220 V=-1
4230 PRINT "Forfeit of 100 bonus points for 6 Steps."
4240 RETURN
4250 REM:SET UP AFTER CIRCLE
4260 FOR X=1 TO 6
4270 IF Y[X]=1 THEN 4350
4280 FOR Y=1 TO 6
4290 IF X[X,Y]#1 THEN 4350
4300 NEXT Y
4310 Y[X]=1
4320 IMAGE#,3d," bonus points for completion of "
4330 PRINT USING 4320;50
4340 PRINT "Step"X
4350 NEXT X
4360 FOR X=1 TO 6
4370 IF Z[X]=1 THEN 4460
4380 FOR Y=1 TO 6
4390 IF X[Y,X]#1 THEN 4460
4400 NEXT Y
4410 Z[X]=1
4420 IMAGE"Diagonal ",d,"'s."
4430 CONVERT S$[(X*2)+2,(X*2)+3] TO S0
4440 PRINT USING 4320;S0
4450 PRINT USING 4420;X
4460 NEXT X
4470 IF V=1 THEN 4540
4480 FOR X=1 TO 6
4490 IF X[X,7-X]#1 THEN 4540
4500 NEXT X
4510 PRINT USING 4320;100
4520 PRINT "6 Steps."
4530 V=1
4540 RETURN
4550 END