home *** CD-ROM | disk | FTP | other *** search
Wrap
10 REM ********************** 20 REM * BARRICADE * 30 REM * BY JIM GANZ * 40 REM * COPYRIGHT (C) 1987 * 50 REM * BY MICROSPARC, INC * 60 REM * CONCORD, MA 01742 * 70 REM ********************** 90 EF = 1: ONERR GOTO 3260 100 GOTO 130 110 COLOR= WHITE: CALL DC: CALL FLIP: COLOR= BLACK: CALL DC: RETURN 120 COLOR= WHITE: CALL DC: COLOR= C: CALL DB: CALL FLIP: COLOR= BLACK: CALL DC: CALL DB: RETURN 130 IF PEEK(104) < >12 OR PEEK(3072) THEN TEXT : HOME : VTAB 12: PRINT "LOADING BARRICADE": POKE 104,12: POKE 3072,0: PRINT CHR$(4)"RUNBARRICADE" 140 REM 150 REM +------------------+ 160 REM ! INITIALIZATION | 170 REM +------------------+ 180 REM 190 TEXT : HOME 200 DATA 173,48,192,136,208,5,206,1,3,240,9,202,208,245,174,0,3,76,2,3,96 210 RESTORE : FOR X = 770 TO 790 220 READ Y: POKE X,Y: NEXT 230 CLAW = 24578:FLIP = 24596 240 DC = 24982:DB = 24934 250 BC = 6:XP = 24576:YP = 24577 260 WHITE = 15:BLACK = 0 270 PTCH = 768:DUR = 769:TNE = 770 280 KB = -16384:CB = -16368 290 CH = 24714:S$ = CHR$(32) 300 C(1) = 4:C(2) = 12:C(3) = 14 310 P1 = -16300:NUM = 28 320 X = RND( - PEEK(78) - PEEK(79) *256) 330 PRINT CHR$(4)"BLOADCLAW" 340 EF = 2: POKE XP,31: POKE YP,8 350 GOSUB 1840 360 GOSUB 1530 370 P = INT(2 * RND(1)) +1 380 IF P$(2) = "APPLE" THEN P = 1 390 VTAB 22 +P: HTAB 12 - LEN(P$(P)): INVERSE 400 PRINT P$(P);: NORMAL 410 REM 420 REM +---------------------+ 430 REM ! DROP A RANDOM BLOCK ! 440 REM +---------------------+ 450 REM 460 G = RND(1) 470 B = 1: IF G <.85 THEN 580 480 X = INT(7 * RND(1)) *4 +1 490 COLOR= C(3):Y = 2 500 FOR A = 0 TO 2: HLIN X,X +2 AT A +2: NEXT 510 COLOR= BLACK: HLIN X,X +2 AT Y -1 520 COLOR= C(3): HLIN X,X +2 AT Y +2 530 POKE PTCH,X *6: POKE DUR,2: CALL TNE 540 IF ( SCRN( X,Y +3) OR SCRN( X +2,Y +3)) AND NOT SCRN( X +1,Y +3) THEN 570 550 B = NOT SCRN( X +1,Y +3) 560 Y = Y +1: GOTO 510 570 NUM = NUM +B 580 IF P = 2 AND P$(2) = "APPLE" THEN GOSUB 2400: GOTO 690 590 REM 600 REM +-------------------+ 610 REM ! INPUT ROUTINE ! 620 REM +-------------------+ 630 REM 640 CALL FLIP 650 COLOR= BLACK: CALL DC 660 POKE P1,0 670 IF I$ = "K" OR I$ = CHR$(107) THEN 860 680 CALL CLAW 690 C = PEEK(BC) 700 X = PEEK(XP) +1 710 Y = PEEK(YP) +2 720 FOR A = Y TO 17 730 COLOR= BLACK: HLIN X,X +2 AT A 740 COLOR= C: HLIN X,X +2 AT A +3 750 POKE PTCH,A *6: POKE DUR,2: CALL TNE 760 NEXT : COLOR= BLACK 770 FOR A = 18 TO 20 780 HLIN X,X +2 AT A: NEXT 790 POKE PTCH,255: POKE DUR,7: CALL TNE 800 NUM = NUM -1: GOTO 1060 810 REM 820 REM +------------------+ 830 REM ! KEYBOARD INPUT ! 840 REM +------------------+ 850 REM 860 POKE CB,0 870 POKE 24903,96 880 POKE BC,0 890 X = PEEK(XP):Y = PEEK(YP):K = PEEK(KB) 900 IF K = 141 THEN GOSUB 970 910 Y = Y -(Y >1) *(K = 201) +(Y <35) *(K = 205) 920 X = X -(X >0) *(K = 202) +(X <31) *(K = 203) 930 COLOR= BLACK: CALL DC 940 CALL DB -31 * NOT PEEK(BC) 950 POKE XP,X: POKE YP,Y 960 CALL CH: GOTO 890 970 IF PEEK(XP) <29 OR NOT PEEK(BC) THEN RETURN 980 POP : POKE 24903,173 990 POKE CB,0: POKE P1,0 1000 GOTO 690 1010 REM 1020 REM +------------------+ 1030 REM ! SCORE BLOCK ! 1040 REM +------------------+ 1050 REM 1060 SC = 10 *(C = C(1)) -10 *(C = C(2)) + INT(2 * RND(1)) *(C = C(3)) 1070 IF SC <0 OR SC >1 THEN 1090 1080 SC = INT(5 * RND(1) +1) *10 * NOT SC + INT(5 * RND(1) +1) *( -10) *SC 1090 P(P) = P(P) +SC 1100 FLASH : VTAB 23: HTAB 32 1110 IF SC >0 THEN PRINT " +"; 1120 IF SC <0 THEN PRINT " -"; 1130 PRINT ABS(SC)S$: NORMAL 1140 COLOR= C -2 *(C = 14 AND SC <0) -10 *(C = 14 AND SC >0) 1150 FOR X = 29 TO 37: VLIN 21,35 AT X: NEXT 1160 T = 100 *(SC >0): POKE PTCH,T: FOR X = 1 TO 6: POKE DUR,50: CALL TNE: NEXT 1170 COLOR= 15: FOR X = 29 TO 37: VLIN 21,35 AT X: NEXT 1180 VTAB 23: HTAB 32: PRINT SPC( 8) 1190 HTAB 20: IF P(1) <0 THEN PRINT "-"; 1200 IF NOT P(1) THEN PRINT S$; 1210 IF P(1) >0 THEN PRINT "+"; 1220 PRINT ABS(P(1)) SPC( 3): PRINT 1230 HTAB 20: IF P(2) <0 THEN PRINT "-"; 1240 IF NOT P(2) THEN PRINT S$; 1250 IF P(2) >0 THEN PRINT "+"; 1260 PRINT ABS(P(2)) SPC( 3) 1270 IF NOT NUM THEN 1360 1280 VTAB 22 +P: HTAB 12 - LEN(P$(P)): PRINT P$(P); 1290 P = (P = 2) +2 *(P = 1) 1300 GOTO 390 1310 REM 1320 REM +-----------------+ 1330 REM ! END OF GAME ! 1340 REM +-----------------+ 1350 REM 1360 CALL -912: CALL -912 1370 VTAB 22: HTAB 29: FLASH : PRINT " GAME OVER ": NORMAL 1380 PRINT " GAME OVER ": NORMAL 1390 CALL -198: CALL -198 1400 VTAB 23: IF P(1) < >P(2) THEN PRINT "THE WINNER IS "; 1410 IF P(1) >P(2) THEN PRINT P$(1)"!" 1420 IF P(2) >P(1) THEN PRINT P$(2)"!" 1430 IF P(1) = P(2) THEN PRINT "A TIE GAME..." 1440 INPUT "--DO YOU WISH TO PLAY AGAIN? ";YN$ 1450 YN$ = LEFT$(YN$,1): IF YN$ < >"Y" AND YN$ < >"N" AND YN$ < > CHR$(121) AND YN$ < > CHR$(110) THEN 1440 1460 IF YN$ = "N" OR YN$ = CHR$(110) THEN TEXT : HOME : POKE 104,8: POKE 103,1: POKE 2048,0: NEW : REM RESET POINTERS 1470 RUN 1480 REM 1490 REM +-----------------+ 1500 REM ! DRAW SCREEN ! 1510 REM +-----------------+ 1520 REM 1530 HOME : GR 1540 COLOR= 13: HLIN 0,39 AT 0 1550 HLIN 0,1 AT 35: FOR X = 3 TO 29 STEP 4: HLIN X,X +2 AT 35: NEXT : HLIN 38,39 AT 35 1560 HLIN 0,39 AT 36 1570 FOR Y = 37 TO 39: HLIN 0,24 AT Y: NEXT 1580 COLOR= 15 1590 FOR X = 29 TO 37: VLIN 21,35 AT X: NEXT 1600 X = 0 1610 K = 6:M = 34: FOR G = 0 TO 6: FOR T = 0 TO K 1620 C = C( INT(2 * RND(1)) +1) 1630 X = X +4: IF NOT INT(30 * RND(1)) THEN C = C(3) 1640 COLOR= C: FOR Y = 0 TO 2: HLIN X -3,X -1 AT M -Y: NEXT 1650 POKE PTCH,X *4: POKE DUR,4: CALL TNE 1660 NEXT 1670 K = K -1:M = M -3:X1 = X1 +2:X = X1 1680 NEXT 1690 VTAB 21 1700 HTAB 10: PRINT "SCOREBOARD"; 1710 HTAB 27: PRINT "+10 -10 ???" 1720 HTAB 10: PRINT "----------": REM 10 -'S 1730 COLOR= C(1): HLIN 26,28 AT 38: HLIN 26,28 AT 39 1740 COLOR= C(2): HLIN 31,33 AT 38: HLIN 31,33 AT 39 1750 COLOR= C(3): HLIN 36,38 AT 38: HLIN 36,38 AT 39 1760 VTAB 23: HTAB 12 - LEN(P$(1)): PRINT P$(1)"....... 0": REM 7 PERIODS 1770 HTAB 12 - LEN(P$(2)): PRINT P$(2)"....... 0";: REM 7 PERIODS 1780 CALL FLIP: POKE P1,0: RETURN 1790 REM 1800 REM +------------------+ 1810 REM ! INTRODUCTION ! 1820 REM +------------------+ 1830 REM 1840 INVERSE 1850 HTAB 24: PRINT SPC( 3): FOR X = 1 TO 3: HTAB 25: PRINT S$: NEXT 1860 HTAB 23: PRINT SPC( 5): PRINT : HTAB 23: PRINT S$;: HTAB 27: PRINT S$ 1870 VTAB 13: FOR X = 1 TO 2: HTAB 32: PRINT S$;: HTAB 36: PRINT S$: NEXT 1880 HTAB 32: PRINT SPC( 5): PRINT 1890 HT = 15:T = -1: VTAB 4 1900 FOR X = 1 TO 6 1910 T = T +2:HT = HT -2 1920 HTAB HT: NORMAL : FOR M = 1 TO T: PRINT "//";: NEXT : PRINT 1930 HTAB HT: FOR M = 1 TO T: INVERSE : PRINT S$;: NORMAL : PRINT "/";: NEXT 1940 PRINT : NEXT : INVERSE 1950 VTAB 7: HTAB 26: PRINT SPC( 11): PRINT : HTAB 26: PRINT " BARRICADE ": HTAB 26: PRINT SPC( 11): PRINT 1960 VTAB 18: HTAB 2: PRINT "COPYRIGHT (C) 1987 BY MICROSPARC, INC": NORMAL 1970 FOR X = 2 TO 39: VTAB 17: HTAB X: PRINT "-": PRINT : HTAB 41 -X: PRINT "-": NEXT 1980 VTAB 11: HTAB 26: PRINT "BY JIM GANZ" 1990 POKE 34,19 2000 VTAB 21: HTAB 3: INPUT "WOULD YOU LIKE INSTRUCTIONS (Y/N)? ";YN$ 2010 YN$ = LEFT$(YN$,1) 2020 IF YN$ < >"Y" AND YN$ < >"N" AND YN$ < > CHR$(110) AND YN$ < > CHR$(121) THEN 2000 2030 IF YN$ = "N" OR YN$ = CHR$(110) THEN HOME : PRINT : GOTO 2260 2040 TEXT : HOME 2050 PRINT "'BARRICADE' IS A GAME BOTH OF LUCK AND": PRINT 2060 PRINT "STRATEGY. PLAYERS TAKE TURNS REMOVING": PRINT 2070 PRINT "COLORED BLOCKS FROM A BARRICADE OF 28": PRINT 2080 PRINT "BLOCKS. A CLAW IS MANEUVERED WITH EITHER" 2090 PRINT "THE HAND CONTROLLER(S) OR THE I,J,K, AND" 2100 PRINT "M KEYS. WHEN THE CLAW IS POSITIONED": PRINT 2110 PRINT "AROUND A COLORED BLOCK, IT WILL AUTOMAT-" 2120 PRINT "ICALLY 'GRAB' THAT BLOCK. THE BLOCK IS": PRINT 2130 PRINT "THEN CARRIED TO THE RIGHT SIDE OF THE": PRINT 2140 PRINT "SCREEN AND RELEASED INTO A RECEPTACLE BY" 2150 PRINT "PRESSING GAME BUTTON (0) OR <RETURN>." 2160 VTAB 24: HTAB 8: PRINT "PRESS ";: INVERSE : PRINT "RETURN";: NORMAL : INPUT " TO CONTINUE ";YN$: HOME 2170 PRINT "SCORING IS BASED UPON COLOR:": PRINT : INVERSE 2180 HTAB 4: PRINT SPC( 19): PRINT 2190 HTAB 4: PRINT " DARK GREEN = +10 " 2200 HTAB 4: PRINT " MEDIUM GREEN= -10 " 2210 HTAB 4: PRINT " LIGHT GREEN = ??? " 2220 HTAB 4: PRINT SPC( 19): PRINT : PRINT : NORMAL 2230 PRINT "WHEN ALL BLOCKS HAVE BEEN RETRIEVED, THE" 2240 PRINT "PLAYER WITH THE HIGHEST SCORE WINS!" 2250 VTAB 14 2260 INPUT "DO YOU WISH (P)ADDLE OR (K)EYBOARD CONTROLS? ";I$: PRINT : IF I$ < >"P" AND I$ < >"K" AND I$ < > CHR$(107) AND I$ < > CHR$(112) THEN 2260: REM 6 SPACES 2270 INPUT "ENTER THE NAME OF PLAYER #1: ";P$(1) 2280 PRINT 2290 PRINT "IF YOU WISH TO PLAY AGAINST THE COMPUTERTHEN ENTER 'APPLE' AS PLAYER #2." 2300 PRINT 2310 INPUT "ENTER THE NAME OF PLAYER #2: ";P$(2) 2320 P$(1) = LEFT$(P$(1),8) 2330 P$(2) = LEFT$(P$(2),8) 2340 FOR I = 1 TO 2:XP$ = "": FOR J = 1 TO LEN(P$(I)):XX = ASC( MID$ (P$(I),J,1)):XP$ = XP$ + CHR$(XX -32 *(XX >96 AND XX <123)): NEXT J:P$(I) = XP$: NEXT I: TEXT : RETURN 2350 REM 2360 REM +------------------+ 2370 REM ! APPLE'S TURN ! 2380 REM +------------------+ 2390 REM 2400 VTAB 24: HTAB 31: FLASH : PRINT "THINKING";: NORMAL 2410 FOR X = 1 TO 7:VL(X) = 0:AX(X) = 0:AY(X) = 0 2420 NEXT :NM = 0:FG = 0 2430 REM FIND TOTAL FREE 2440 FOR X = 2 TO 26 STEP 2 2450 IF NOT SCRN( X,34) AND NOT SCRN( X,31) THEN NEXT 2460 FOR Y = 7 TO 36 2470 COLOR= 9 *(X < >28) 2480 PLOT X,Y -1: CALL FLIP: COLOR= BLACK: PLOT X,Y -1 2490 IF SCRN( X,Y) THEN 2520 2500 IF X = 28 THEN 2550 2510 NEXT : NEXT : GOTO 2550 2520 IF NOT SCRN( X -1,Y -1) AND NOT SCRN( X +1,Y -1) THEN 2540 2530 Y = 36: GOTO 2500 2540 NM = NM +1:AX(NM) = X:AY(NM) = Y:Y = 36: GOTO 2500 2550 REM EVALUATE EACH BLOCK 2560 FOR T = 1 TO NM 2570 X = AX(T):Y = AY(T) 2580 C = SCRN( X,Y) 2590 C1 = SCRN( X -1,Y +3):C1 = C1 -13 *(C1 = 13) 2600 C2 = SCRN( X +1,Y +3):C2 = C2 -13 *(C2 = 13) 2610 VL(T) = VL(T) +4 *(C = C(1)) +2 *(C = C(3)) -4 *(C = C(2)) 2620 IF X -3 > -1 THEN 2650 2630 VL(T) = VL(T) +2 *(C = C(1) AND C2 = C(1) AND SCRN( X +3,Y)) 2640 GOTO 2660 2650 VL(T) = VL(T) +2 *(C = C(1) AND C2 = C(1) AND SCRN( X -3,Y) AND SCRN( X +3,Y)) 2660 VL(T) = VL(T) -2 *(C1 < >C(1) AND C2 = C(1) AND NOT SCRN( X +3,Y)) 2670 IF X = 2 THEN 2690 2680 IF (C1 = C(1) AND C2 < >C(1) AND NOT SCRN( X -3,Y)) OR (C1 < >C(1) AND C2 = C(1) AND NOT SCRN( X +3,Y)) THEN VL(T) = VL(T) -2 2690 VL(T) = VL(T) +(C = C(2) AND C1 = C(2) AND C2 = C(1) AND SCRN( X +3,Y)) 2700 IF X -3 > -1 THEN 2720 2710 VL(T) = VL(T) -2 *(C = C(2) AND C1 = C(1) AND C2 = C(2) AND NOT SCRN( X +3,Y)): GOTO 2730 2720 VL(T) = VL(T) -2 *(C = C(2) AND C1 = C(1) AND C2 = C(2) AND SCRN( X -3,Y) AND NOT SCRN( X +3,Y)) 2730 IF X = 2 THEN 2760 2740 VL(T) = VL(T) +2 *(C = C(2) AND C1 = C(1) AND C2 = C(2) AND SCRN( X -3,Y)) 2750 VL(T) = VL(T) -(C1 = C(1) AND C2 = C(1) AND SCRN( X -3,Y) AND NOT SCRN( X +3,Y)) 2760 VL(T) = VL(T) +2 *(C = C(2) AND C1 = C(2) AND C2 = C(1) AND SCRN( X +3,Y)) 2770 IF X = 2 THEN 2790 2780 VL(T) = VL(T) -(C1 = C(1) AND C2 = C(1) AND SCRN( X +3,Y) < >15 AND SCRN( X +3,Y) AND NOT SCRN( X -3,Y)) 2790 VL(T) = VL(T) -2 *(C = C(2) AND C1 = C(3) AND C2 = C(1) AND SCRN( X +3,Y)) 2800 IF X = 2 THEN 2830 2810 VL(T) = VL(T) -2 *(C = C(2) AND C1 = C(1) AND C2 = C(3) AND SCRN( X -3,Y)) 2820 IF (C1 = C(3) AND C2 = C(1)) OR (C1 = C(1) AND C2 = C(3)) AND ( NOT SCRN( X -3,Y) AND NOT SCRN( X +3,Y)) OR ( SCRN( X -3,Y) AND SCRN( X +3,Y)) THEN VL(T) = VL(T) +1 2830 VL(T) = VL(T) +(C = C(3) AND P(2) -P(1) >50) 2840 VL(T) = VL(T) -(C = C(3) AND P(2) -P(1) <60) 2850 VL(T) = VL(T) +(C = C(3) AND P(1) -P(2) >30) 2860 VL(T) = VL(T) -(C = C(2) AND C1 = C(2) AND C2 = C(3) AND NOT SCRN( X +3,Y)) 2870 VL(T) = VL(T) +15 *(C = C(3) AND NUM <5 AND P(1) -P(2) >10) 2880 VL(T) = VL(T) +(C = C(3) AND NUM <10) 2890 NEXT 2900 REM DETERMINE WHICH BLOCK IS "WORTH" THE MOST 2910 FOR T = 1 TO NM 2920 VL = VL(T) 2930 FOR TI = 1 TO NM 2940 IF VL <VL(TI) THEN FG = 1 2950 NEXT 2960 IF FG THEN 2980 2970 FG = 0:F1 = T 2980 FG = 0: NEXT 2990 AX = AX(F1):AY = AY(F1):C = SCRN( AX,AY) 3000 POKE P1,0 3010 VTAB 24: HTAB 31: PRINT SPC( 8) 3020 CALL -198 3030 X = PEEK(XP):OX = X 3040 Y = PEEK(YP):OY = Y 3050 REM MANIPULATE CLAW 3060 REM MOVE UP 3070 FOR A = Y TO 3 STEP -1 3080 POKE YP,A: GOSUB 110: NEXT 3090 REM MOVE LEFT 3100 FOR A = X TO AX -2 STEP -1 3110 POKE XP,A: GOSUB 110: NEXT 3120 REM MOVE DOWN 3130 FOR A = 3 TO AY -2 3140 POKE YP,A: GOSUB 110: NEXT 3150 REM MOVE UP 3160 FOR A = AY -2 TO 3 STEP -1 3170 POKE YP,A: GOSUB 120: NEXT 3180 REM MOVE RIGHT 3190 FOR A = PEEK(XP) TO OX 3200 POKE XP,A: GOSUB 120: NEXT 3210 REM MOVE DOWN 3220 FOR A = 3 TO OY 3230 POKE YP,A: GOSUB 120: NEXT 3240 COLOR= WHITE: CALL DC: POKE BC,C: POKE P1,0: RETURN 3250 REM ERROR HANDLER 3260 HOME : VTAB 12: PRINT "ERROR " PEEK(222)" IN LINE " PEEK(218) +256 * PEEK(219)"." 3270 VTAB 21: PRINT "<RETURN> TO CONTINUE OR <ESC> TO QUIT";: GET Z$: PRINT : ON Z$ = CHR$(27) GOTO 3280: ON EF GOTO 100,360 3280 HOME : END