home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib22a.dsk
/
OCTOBER.1984
/
FOUR.SCORE.bas
next >
Wrap
BASIC Source File
|
2023-02-26
|
11KB
|
258 lines
10 REM **********************
20 REM * FOUR.SCORE *
30 REM * BY R. & L. NEDBAL *
40 REM * COPYRIGHT (C) 1984 *
50 REM * BY MICROSPARC, INC *
60 REM * CONCORD, MA. 01742 *
70 REM **********************
80 REM INITIALIZATION
90 GOTO 2240
100 REM : SUBROUTINE TO CHECK FOR OPENS & CLEARS IN A LINE
110 YP = 0:YC = 0
120 FOR Z = 0 TO 9 STEP 3
130 WP = LM%(LINE,Z):LP = LM%(LINE,Z +1):HP = LM%(LINE,Z +2)
140 FM = WP +(LP *4)
150 IF OPEN(FM) = HP THEN YP = YP +1:W = WP:L = LP:H = HP: GOTO 170
160 IF BRD%(LP,WP,HP) = 0 THEN YC = YC +1
170 NEXT Z
180 RETURN
190 REM : SUBROUTINE TO FIND NM,NP & NC IN A LINE
200 YP = 0:YC = 0
210 FOR LINE = 0 TO 75
220 IF LP%(LINE,P) = NM THEN GOTO 260
230 NEXT LINE
240 LINE = LINE -1
250 RETURN
260 GOSUB 100
270 IF YP = NP AND YC = (4 -NM) -YP THEN RETURN
280 YP = 0:YC = 0: GOTO 230
290 REM : START OF COMPUTER'S RESPONSE
300 P = PL -1
310 IF DF% = 1 THEN GOTO 450
320 IF DF% = 2 THEN GOTO 410
330 NM = 3:NP = 1: GOSUB 190
340 IF YP = 1 THEN GOTO 570
350 IF P = 0 THEN P = 1: GOTO 370
360 P = 0
370 GOSUB 190
380 P = PL -1: IF YP = 1 THEN GOTO 570
390 IF DF% = 3 THEN GOTO 450
400 IF DF% = 4 THEN GOTO 430
410 NM = 2:NP = 2: GOSUB 190
420 IF YP = 2 THEN GOTO 570
430 NM = 2:NP = 1: GOSUB 190
440 IF YP = 1 AND YC = 1 THEN GOTO 570
450 RC = 0
460 RC = RC +1
470 IF RC = 15 THEN GOTO 520
480 RW = RND(1):RL = RND(1)
490 W = INT(RW *4):L = INT(RL *4)
500 IF BRD%(L,W,3) = 0 THEN GOTO 570
510 GOTO 460
520 FOR W = 0 TO 3
530 FOR L = 0 TO 3
540 IF BRD%(L,W,3) = 0 THEN GOTO 570
550 NEXT L
560 NEXT W
570 X = (W *8 +1) -((L -3) *4):Y = L *10: GOTO 1250
580 GR : SPEED= 255:S1 = 0:S2 = 0
590 C = 1
600 FOR X = 5 TO 33 STEP 2
610 COLOR= C
620 VLIN 0,39 AT X: VLIN 0,39 AT X +1
630 C = C +1
640 NEXT X
650 HOME
660 VTAB 21: PRINT " 1 2 3 4 5 6 7 8 9 101112131415": POKE 34,21
670 INPUT "COLOR OF POSTS? ";CP
680 IF CP <1 OR CP >15 THEN GOTO 670
690 INPUT "COLOR FOR PLAYER #1? ";C1
700 IF C1 <1 OR C1 >15 THEN GOTO 690
710 INPUT "COLOR FOR PLAYER #2? ";C2
720 IF C2 <1 OR C2 >15 THEN GOTO 710
730 INPUT "NUMBER OF PLAYERS? ";PN
740 IF PN <0 OR PN >2 GOTO 730
750 IF PN = 2 GOTO 780
760 INPUT "SELECT DIFFICULTY 1-5: ";DF%
770 IF DF% <1 OR DF% >5 THEN GOTO 760
780 POKE 34,0:S1 = 0:S2 = 0
790 FOR A = 0 TO 3
800 FOR B = 0 TO 3
810 FOR X = 0 TO 3
820 BRD%(A,B,X) = 0
830 NEXT X: NEXT B: NEXT A
840 FOR A = 0 TO 15
850 OPEN(A) = 0
860 NEXT A
870 PL = 1
880 GR : HOME : COLOR= CP
890 VLIN 2,9 AT 13: VLIN 2,9 AT 21: VLIN 2,9 AT 29: VLIN 2,9 AT 37: VLIN 12,19 AT 9: VLIN 12,19 AT 17: VLIN 12,19 AT 25: VLIN 12,19 AT 33
900 VLIN 22,29 AT 5: VLIN 22,29 AT 13: VLIN 22,29 AT 21: VLIN 22,29 AT 29: VLIN 32,39 AT 1: VLIN 32,39 AT 9: VLIN 32,39 AT 17: VLIN 32,39 AT 25
910 FOR A = 0 TO 75
920 LP%(A,0) = 0:LP%(A,1) = 0
930 NEXT A
940 IF PN = 0 THEN HOME : GOTO 290
950 HOME : PRINT "I = UP, K = RIGHT, J = LEFT, M = DOWN
960 PRINT "X = PLACE MARKER ON POST"
970 VTAB 24: PRINT "PLAYER # 1"
980 X = 1:Y = 30:L = 3:W = 0
990 COLOR= 15: PLOT X,Y
1000 GET DIR$
1010 COLOR= 0: PLOT X,Y
1020 IF DIR$ = "X" THEN GOTO 1250
1030 Z = PEEK( -16336):Z = PEEK( -16336)
1040 IF DIR$ = "I" THEN Y = Y -10:X = X +4:L = L -1
1050 IF DIR$ = "K" THEN X = X +8:W = W +1
1060 IF DIR$ = "J" THEN X = X -8:W = W -1
1070 IF DIR$ = "M" THEN Y = Y +10:X = X -4:L = L +1
1080 IF X <1 AND Y = 30 THEN X = 25:L = 3:W = 3
1090 IF X <5 AND Y = 20 THEN X = 29:L = 2:W = 3
1100 IF X <9 AND Y = 10 THEN X = 33:L = 1:W = 3
1110 IF X <13 AND Y = 0 THEN X = 37:L = 0:W = 3
1120 IF X >25 AND Y = 30 THEN X = 1:L = 3:W = 0
1130 IF X >29 AND Y = 20 THEN X = 5:L = 2:W = 0
1140 IF X >33 AND Y = 10 THEN X = 9:L = 1:W = 0
1150 IF X >37 AND Y = 0 THEN X = 13:L = 0:W = 0
1160 IF Y >30 AND X = -3 THEN X = 13:Y = 0:L = 0:W = 0
1170 IF Y >30 AND X = 5 THEN X = 21:Y = 0:L = 0:W = 1
1180 IF Y >30 AND X = 13 THEN X = 29:Y = 0:L = 0:W = 2
1190 IF Y >30 AND X = 21 THEN X = 37:Y = 0:L = 0:W = 3
1200 IF Y <0 AND X = 17 THEN X = 1:Y = 30:L = 3:W = 0
1210 IF Y <0 AND X = 25 THEN X = 9:Y = 30:L = 3:W = 1
1220 IF Y <0 AND X = 33 THEN X = 17:Y = 30:L = 3:W = 2
1230 IF Y <0 AND X = 41 THEN X = 25:Y = 30:L = 3:W = 3
1240 GOTO 990
1250 IF PL = 1 THEN COLOR= C1:PC = C1
1260 IF PL = 2 THEN COLOR= C2:PC = C2
1270 IF BRD%(L,W,3) < >0 THEN PRINT "POST IS FILLED!": GOTO 990
1280 H = 0
1290 IF BRD%(L,W,H) = 0 THEN BRD%(L,W,H) = PL: HLIN X -1,X +1 AT Y +9: PLOT X,Y +8: GOTO 1360
1300 H = 1
1310 IF BRD%(L,W,H) = 0 THEN BRD%(L,W,H) = PL: HLIN X -1,X +1 AT Y +7: PLOT X,Y +6: GOTO 1360
1320 H = 2
1330 IF BRD%(L,W,H) = 0 THEN BRD%(L,W,H) = PL: HLIN X -1,X +1 AT Y +5: PLOT X,Y +4: GOTO 1360
1340 H = 3
1350 IF BRD%(L,W,H) = 0 THEN BRD%(L,W,H) = PL: HLIN X -1,X +1 AT Y +3: PLOT X,Y +2
1360 REM CONVERT W,L,H TO LINE # AND UPDATE
1370 FM = W +(L *4)
1380 OPEN(FM) = H +1
1390 REM WIDTH FIRST
1400 P = PL -1
1410 ZERO = L *10:LINE = ZERO +H:LP%(LINE,P) = LP%(LINE,P) +1
1420 LINE = (ZERO +4) +W:LP%(LINE,P) = LP%(LINE,P) +1
1430 IF W = H THEN LINE = ZERO +9:LP%(LINE,P) = LP%(LINE,P) +1
1440 IF W = ABS(H -3) THEN LINE = ZERO +8:LP%(LINE,P) = LP%(LINE,P) +1
1450 REM LENGTH NEXT
1460 ZERO = (W *6) +40:LINE = ZERO +H:LP%(LINE,P) = LP%(LINE,P) +1
1470 IF L = H THEN LINE = ZERO +4:LP%(LINE,P) = LP%(LINE,P) +1
1480 IF L = ABS(H -3) THEN LINE = ZERO +5:LP%(LINE,P) = LP%(LINE,P) +1
1490 REM HORIZONTAL DIAGONALS NEXT
1500 IF L = W THEN LINE = 64 +H:LP%(LINE,P) = LP%(LINE,P) +1
1510 IF L = ABS(W -3) THEN LINE = 68 +H:LP%(LINE,P) = LP%(LINE,P) +1
1520 REM OUTSIDE CORNER DIAGS NEXT
1530 IF L = W AND L = H THEN LP%(72,P) = LP%(72,P) +1
1540 IF L = W AND L = ABS(H -3) THEN LP%(73,P) = LP%(73,P) +1
1550 IF L = ABS(W -3) AND L = H THEN LP%(74,P) = LP%(74,P) +1
1560 IF L = ABS(W -3) AND L = ABS(H -3) THEN LP%(75,P) = LP%(75,P) +1
1570 REM CHECK FOR GAME WON
1580 P = PL -1
1590 FOR WIN = 0 TO 75
1600 IF LP%(WIN,P) = 4 THEN GOTO 1680
1610 NEXT WIN
1620 IF PL = 1 THEN PL = 2: HOME : VTAB 23: HTAB 24: PRINT "PLAYER #";PL: GOTO 1640
1630 PL = 1: HOME : VTAB 23: HTAB 6: PRINT "PLAYER #";PL
1640 IF PN = 0 THEN PRINT "PLAYER #1 = ";S1;" PLAYER #2 = ";S2: GOTO 290
1650 IF PN = 2 THEN GOTO 990
1660 IF PN = 1 AND PL = 1 THEN GOTO 990
1670 GOTO 290
1680 REM SOMEONE HAS WON
1690 FLASH : HOME : VTAB 22: HTAB 12: PRINT "PLAYER #";PL;" WINS": NORMAL
1700 NC = 0
1710 FOR Z1 = 0 TO 21
1720 COLOR= NC
1730 FOR Z = 0 TO 9 STEP 3
1740 WP = LM%(WIN,Z):LP = LM%(WIN,Z +1):HP = LM%(WIN,Z +2)
1750 XX = (WP *8) -((LP -3) *4):YY = (LP *10) -((HP -3) *2) +3
1760 HLIN XX,XX +2 AT YY: PLOT XX +1,YY -1
1770 NEXT Z
1780 IF NC = 0 THEN NC = PC: GOTO 1800
1790 IF NC = PC THEN NC = 0
1800 NEXT Z1
1810 IF PL = 1 THEN S1 = S1 +1
1820 IF PL = 2 THEN S2 = S2 +1
1830 IF PN = 1 THEN GOTO 1920
1840 IF PN = 0 THEN GOTO 2550
1850 VTAB 23: PRINT "PLAYER #1 = ";S1;" PLAYER #2 = ";S2
1860 VTAB 24: PRINT "ANY KEY FOR NEXT GAME, S TO START OVER"
1870 PRINT "C TO CHANGE PLAYER # AND DIFFICULTY"
1880 GET G$
1890 IF G$ = "S" THEN GOTO 580
1900 IF G$ = "C" GOTO 730
1910 GOTO 790
1920 VTAB 23: PRINT "YOUR SCORE= ";S1;" MY SCORE= ";S2
1930 GOTO 1860
1940 DATA 0,0,0,1,0,0,2,0,0,3,0,0,0,0,1,1,0,1,2,0,1,3,0,1,0,0,2,1,0,2,2,0,2,3,0,2,0,0,3,1,0,3,2,0,3,3,0,3
1950 DATA 0,0,0,0,0,1,0,0,2,0,0,3,1,0,0,1,0,1,1,0,2,1,0,3,2,0,0,2,0,1,2,0,2,2,0,3,3,0,0,3,0,1,3,0,2,3,0,3
1960 DATA 0,0,3,1,0,2,2,0,1,3,0,0,0,0,0,1,0,1,2,0,2,3,0,3
1970 DATA 0,1,0,1,1,0,2,1,0,3,1,0,0,1,1,1,1,1,2,1,1,3,1,1,0,1,2,1,1,2,2,1,2,3,1,2,0,1,3,1,1,3,2,1,3,3,1,3
1980 DATA 0,1,0,0,1,1,0,1,2,0,1,3,1,1,0,1,1,1,1,1,2,1,1,3,2,1,0,2,1,1,2,1,2,2,1,3,3,1,0,3,1,1,3,1,2,3,1,3
1990 DATA 0,1,3,1,1,2,2,1,1,3,1,0,0,1,0,1,1,1,2,1,2,3,1,3
2000 DATA 0,2,0,1,2,0,2,2,0,3,2,0,0,2,1,1,2,1,2,2,1,3,2,1,0,2,2,1,2,2,2,2,2,3,2,2,0,2,3,1,2,3,2,2,3,3,2,3
2010 DATA 0,2,0,0,2,1,0,2,2,0,2,3,1,2,0,1,2,1,1,2,2,1,2,3,2,2,0,2,2,1,2,2,2,2,2,3,3,2,0,3,2,1,3,2,2,3,2,3
2020 DATA 0,2,3,1,2,2,2,2,1,3,2,0,0,2,0,1,2,1,2,2,2,3,2,3
2030 DATA 0,3,0,1,3,0,2,3,0,3,3,0,0,3,1,1,3,1,2,3,1,3,3,1,0,3,2,1,3,2,2,3,2,3,3,2,0,3,3,1,3,3,2,3,3,3,3,3
2040 DATA 0,3,0,0,3,1,0,3,2,0,3,3,1,3,0,1,3,1,1,3,2,1,3,3,2,3,0,2,3,1,2,3,2,2,3,3,3,3,0,3,3,1,3,3,2,3,3,3
2050 DATA 0,3,3,1,3,2,2,3,1,3,3,0,0,3,0,1,3,1,2,3,2,3,3,3
2060 DATA 0,0,0,0,1,0,0,2,0,0,3,0,0,0,1,0,1,1,0,2,1,0,3,1,0,0,2,0,1,2,0,2,2,0,3,2,0,0,3,0,1,3,0,2,3,0,3,3
2070 DATA 0,0,0,0,1,1,0,2,2,0,3,3,0,0,3,0,1,2,0,2,1,0,3,0
2080 DATA 1,0,0,1,1,0,1,2,0,1,3,0,1,0,1,1,1,1,1,2,1,1,3,1,1,0,2,1,1,2,1,2,2,1,3,2,1,0,3,1,1,3,1,2,3,1,3,3
2090 DATA 1,0,0,1,1,1,1,2,2,1,3,3,1,0,3,1,1,2,1,2,1,1,3,0
2100 DATA 2,0,0,2,1,0,2,2,0,2,3,0,2,0,1,2,1,1,2,2,1,2,3,1,2,0,2,2,1,2,2,2,2,2,3,2,2,0,3,2,1,3,2,2,3,2,3,3
2110 DATA 2,0,0,2,1,1,2,2,2,2,3,3,2,0,3,2,1,2,2,2,1,2,3,0
2120 DATA 3,0,0,3,1,0,3,2,0,3,3,0,3,0,1,3,1,1,3,2,1,3,3,1,3,0,2,3,1,2,3,2,2,3,3,2,3,0,3,3,1,3,3,2,3,3,3,3
2130 DATA 3,0,0,3,1,1,3,2,2,3,3,3,3,0,3,3,1,2,3,2,1,3,3,0
2140 DATA 3,3,0,2,2,0,1,1,0,0,0,0,3,3,1,2,2,1,1,1,1,0,0,1,3,3,2,2,2,2,1,1,2,0,0,2,3,3,3,2,2,3,1,1,3,0,0,3
2150 DATA 0,3,0,1,2,0,2,1,0,3,0,0,0,3,1,1,2,1,2,1,1,3,0,1,0,3,2,1,2,2,2,1,2,3,0,2,0,3,3,1,2,3,2,1,3,3,0,3
2160 DATA 3,3,3,2,2,2,1,1,1,0,0,0,3,3,0,2,2,1,1,1,2,0,0,3,3,0,0,2,1,1,1,2,2,0,3,3,3,0,3,2,1,2,1,2,1,0,3,0
2170 FOR Z = 0 TO 75
2180 FOR Z1 = 0 TO 11
2190 READ A%
2200 LM%(Z,Z1) = A%
2210 NEXT Z1
2220 NEXT Z
2230 RETURN
2240 S1 = 0:S2 = 0:PL = 1: SPEED= 255
2250 DIM BRD%(3,3,3),LM%(75,11),LP%(75,1),OPEN(15)
2260 TEXT : HOME : VTAB 5: HTAB 13: PRINT "3-D FOUR SCORE": VTAB 12: HTAB 14: PRINT "PLEASE WAIT": VTAB 22: PRINT "* COPYRIGHT (C) 1984 MICROSPARC INC. *"
2270 GOSUB 2170
2280 REM ABOVE SPEED SHOULD BE 100
2290 TEXT : HOME
2300 VTAB 10: HTAB 13: PRINT "3-D FOUR SCORE"
2310 VTAB 12: HTAB 19: PRINT "BY"
2320 VTAB 14: HTAB 9: PRINT "LEAH AND RICHARD NEDBAL"
2330 VTAB 22: HTAB 8: PRINT "PUSH ANY KEY TO PROCEED": HTAB 20: GET G$
2340 HOME
2350 PRINT "3-D FOUR SCORE IS LIKE TIC-TAC-TOE IN"
2360 PRINT : PRINT "3-DIMENSIONS. TRY TO GET 4 IN A ROW IN"
2370 PRINT : PRINT "ANY DIRECTION (HORIZONTAL, VERTICAL, OR"
2380 PRINT : PRINT "DIAGONAL) ON ANY LAYER OR BETWEEN": PRINT
2390 PRINT "LAYERS. THE FIRST ONE TO DO THIS WINS!"
2400 PRINT : PRINT : PRINT "I,J,K,&M ALLOWS SELECTION OF THE POST"
2410 PRINT : PRINT "WHERE YOU CAN PLACE A MARKER. THE X KEY"
2420 PRINT : PRINT "PLACES YOUR MARKER ON THE POST."
2430 VTAB 19: HTAB 16: PRINT "HAVE FUN"
2440 VTAB 22: HTAB 8: PRINT "PUSH ANY KEY TO PROCEED"
2450 HTAB 20: GET G$
2460 HOME : PRINT "IF THE NUMBER OF PLAYERS IS 0, THE"
2470 PRINT : PRINT "COMPUTER WILL PLAY AGAINST ITSELF."
2480 PRINT : PRINT "IF THE NUMBER OF PLAYERS IS 1, YOU PLAY"
2490 PRINT : PRINT "AGAINST THE COMPUTER."
2500 PRINT : PRINT "IF THE NUMBER OF PLAYERS IS 2, YOU CAN"
2510 PRINT : PRINT "PLAY AGAINST A FRIEND."
2520 VTAB 22: HTAB 8: PRINT "PUSH ANY KEY TO PROCEED"
2530 HTAB 20: GET G$
2540 GOTO 580
2550 VTAB 24: PRINT "ANY KEY TO CONTINUE, S TO START OVER"
2560 GET G$
2570 IF G$ = "S" GOTO 580
2580 GOTO 790