-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathhighiq.bas
135 lines (135 loc) · 3.54 KB
/
highiq.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
1 PRINT TAB(33);"H-I-Q"
2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
3 PRINT:PRINT:PRINT
4 DIM B(70),T(9,9)
5 PRINT "HERE IS THE BOARD:": PRINT
6 PRINT " ! ! !"
7 PRINT " 13 14 15": PRINT
8 PRINT " ! ! !"
9 PRINT " 22 23 24": PRINT
10 PRINT "! ! ! ! ! ! !"
11 PRINT "29 30 31 32 33 34 35": PRINT
12 PRINT "! ! ! ! ! ! !"
13 PRINT "38 39 40 41 42 43 44": PRINT
14 PRINT "! ! ! ! ! ! !"
15 PRINT "47 48 49 50 51 52 53": PRINT
16 PRINT " ! ! !"
17 PRINT " 58 59 60": PRINT
18 PRINT " ! ! !"
19 PRINT " 67 68 69": PRINT
20 PRINT "TO SAVE TYPING TIME, A COMPRESSED VERSION OF THE GAME BOARD"
22 PRINT "WILL BE USED DURING PLAY. REFER TO THE ABOVE ONE FOR PEG"
24 PRINT "NUMBERS. OK, LET'S BEGIN."
28 REM *** SET UP BOARD
29 FOR R=1 TO 9
30 FOR C=1 TO 9
31 IF (R-4)*(R-5)*(R-6)=0 THEN 40
32 IF (C-4)*(C-5)*(C-6)=0 THEN 40
35 T(R,C)=-5
36 GOTO 50
40 IF (R-1)*(C-1)*(R-9)*(C-9)=0 THEN 35
42 T(R,C)=5
50 NEXT C
60 NEXT R
65 T(5,5)=0: GOSUB 500
70 REM *** INPUT MOVE AND CHECK ON LEGALITY
75 FOR W=1 TO 33
77 READ M
79 DATA 13,14,15,22,23,24,29,30,31,32,33,34,35,38,39,40,41
81 DATA 42,43,44,47,48,49,50,51,52,53,58,59,60,67,68,69
83 B(M)=-7: NEXT W
86 B(41)=-3
100 INPUT "MOVE WHICH PIECE";Z
110 IF B(Z)=-7 THEN 140
120 PRINT "ILLEGAL MOVE, TRY AGAIN...": GOTO 100
140 INPUT "TO WHERE";P
150 IF B(P)=0 THEN 120
153 IF B(P)=-7 THEN 120
156 IF Z=P THEN 100
160 IF ((Z+P)/2)=INT((Z+P)/2) THEN 180
170 GOTO 120
180 IF (ABS(Z-P)-2)*(ABS(Z-P)-18)<>0 THEN 120
190 GOSUB 1000
200 GOSUB 500
210 GOSUB 1500
220 GOTO 100
500 REM *** PRINT BOARD
510 FOR X=1 TO 9
520 FOR Y=1 TO 9
525 IF (X-1)*(X-9)*(Y-1)*(Y-9)=0 THEN 550
530 IF (X-4)*(X-5)*(X-6)=0 THEN 570
540 IF (Y-4)*(Y-5)*(Y-6)=0 THEN 570
550 REM
560 GOTO 610
570 IF T(X,Y)<>5 THEN 600
580 PRINT TAB(Y*2);"!";
590 GOTO 610
600 PRINT TAB(Y*2);"O";
610 REM
615 NEXT Y
620 PRINT
630 NEXT X
640 RETURN
1000 REM *** UPDATE BOARD
1005 C=1: FOR X=1 TO 9
1020 FOR Y=1 TO 9
1030 IF C<>Z THEN 1220
1040 IF C+2<>P THEN 1080
1045 IF T(X,Y+1)=0 THEN 120
1050 T(X,Y+2)=5
1060 T(X,Y+1)=0: B(C+1)=-3
1070 GOTO 1200
1080 IF C+18<>P THEN 1130
1085 IF T(X+1,Y)=0 THEN 120
1090 T(X+2,Y)=5: T(X+1,Y)=0: B(C+9)=-3
1120 GOTO 1200
1130 IF C-2<>P THEN 1170
1135 IF T(X,Y-1)=0 THEN 120
1140 T(X,Y-2)=5: T(X,Y-1)=0: B(C-1)=-3
1160 GOTO 1200
1170 IF C-18<>P THEN 1220
1175 IF T(X-1,Y)=0 THEN 120
1180 T(X-2,Y)=5: T(X-1,Y)=0: B(C-9)=-3
1200 B(Z)=-3: B(P)=-7
1210 T(X,Y)=0: GOTO 1240
1220 C=C+1
1225 NEXT Y
1230 NEXT X
1240 RETURN
1500 REM*** CHECK IF GAME IS OVER
1505 F=0
1510 FOR R=2 TO 8
1520 FOR C=2 TO 8
1530 IF T(R,C)<>5 THEN 1580
1535 F=F+1
1540 FOR A=R-1 TO R+1
1545 T=0
1550 FOR B=C-1 TO C+1
1560 T=T+T(A,B)
1561 NEXT B
1564 IF T<>10 THEN 1567
1565 IF T(A,C)<>0 THEN 1630
1567 NEXT A
1568 FOR X=C-1 TO C+1
1569 T=0
1570 FOR Y=R-1 TO R+1
1571 T=T+T(Y,X)
1572 NEXT Y
1573 IF T<>10 THEN 1575
1574 IF T(R,X)<>0 THEN 1630
1575 NEXT X
1580 NEXT C
1590 NEXT R
1600 REM *** GAME IS OVER
1605 PRINT "THE GAME IS OVER."
1610 PRINT "YOU HAD";F;"PIECES REMAINING."
1611 IF F<>1 THEN 1615
1612 PRINT "BRAVO! YOU MADE A PERFECT SCORE!"
1613 PRINT "SAVE THIS PAPER AS A RECORD OF YOUR ACCOMPLISHMENT!"
1615 PRINT: INPUT "PLAY AGAIN (YES OR NO)";A$
1617 IF A$="NO" THEN 2000
1618 RESTORE: GOTO 28
1620 STOP
1630 RETURN
2000 PRINT: PRINT "SO LONG FOR NOW.": PRINT
2010 END