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