home *** CD-ROM | disk | FTP | other *** search
Wrap
10 'SWITCHBX.BAS: A strategy game from COMPUTE! March 1986 by Todd Heimarck. 20 ' 100 RANDOMIZE TIMER 110 SCREEN 1,0:CLS 120 KEY OFF 130 COLOR 7,0 140 DIM BOX(4,7,1),FALLING(32,4),POINTS(4,16),SCORE(1,8) 150 DIM S(250),LEFTSW(35),RIGHTSW(35),BALL(4),UNBALL(4),LARROW(35),RARROW(35) 160 FOR J=1 TO 4:READ POINTS(J,0) 170 FOR K=1 TO 8:READ L:POINTS(J,K+8)=L:POINTS(J,9-K)=L:NEXT K,J 180 DATA 10,2,2,2,2,2,2,2,2 190 DATA 40,1,2,3,5,8,13,21,34 200 DATA 20,2,3,4,5,6,7,8,9 210 DATA 80,1,4,9,16,25,36,49,64 220 LOCATE 1,1:INPUT"Player 1: ";P1$:P1$=LEFT$(P1$,5) 230 INPUT"Player 2: ";P2$:P2$=LEFT$(P2$,5) 240 PRINT P1$;" vs ";P2$:PRINT"Is this correct (Y/N) ?" 250 YN$=INKEY$:IF YN$="" THEN 250 260 IF YN$="n" OR YN$="N" THEN 220 270 ROUND=4 280 CLS:GOSUB 970:GOSUB 700 290 CLS:GOSUB 1030:GOSUB 540 300 PLAYER=1:PUT (225,1),RARROW:FOR ROUND=1 TO 4:GOSUB 500 310 FOR I=0 TO 1:CIRCLE (53+256*I,18+ROUND*8),2 320 PAINT (53+256*I,18+ROUND*8),3:NEXT 330 PLAYER=1-PLAYER:LOCATE 1,9+PLAYER*21:PRINT SPACE$(2) 340 PUT (60,1),LARROW:PUT (225,1),RARROW 350 LOCATE 1,30-PLAYER*21:PRINT RIGHT$(STR$(POINTS(ROUND,0)),2) 360 GOSUB 1210:IF SCORE(1-PLAYER,ROUND)<POINTS(ROUND,0) THEN 330 370 FOR J=0 TO 1:FOR K=5 TO 8 380 SCORE (J,K)=0:NEXT K,J 390 FOR J=0 TO 1:FOR K=1 TO 4:BONUS=POINTS(K,0):AMT=SCORE(J,K) 400 SCORE(J,5)=SCORE(J,5)+AMT:SCORE(J,6)=SCORE(J,6)-BONUS*(AMT>=BONUS) 410 SCORE(J,7)=SCORE(J,7)+SCORE(J,K)-SCORE(1-J,K):NEXT K,J 420 FOR J=0 TO 1:FOR K=6 TO 7:SCORE(J,K)=SCORE(J,K)+SCORE(J,5):NEXT K,J 430 FOR J=0 TO 1:FOR K=5 TO 7:SCORE(J,8)=SCORE(J,8)+SCORE(J,K):NEXT K,J 440 FOR J=0 TO 1:FOR K=5 TO 8:SCORE$=STR$(SCORE(J,K)) 450 LOCATE K+6,1+J*34:PRINT SPACE$(5) 460 LOCATE K+6,5-LEN(SCORE$)+J*34:PRINT SCORE$:NEXT K,J 470 NEXT ROUND:LOCATE 11,12:PRINT"Play again (Y/N) ?" 480 K$=INKEY$:IF K$="n" OR K$="N" THEN CLS:END:ELSE IF K$="y" OR K$="Y" THEN RUN:ELSE GOTO 480 500 FOR J=1 TO 16:K=POINTS(ROUND,J):JJ=3+J*2 510 LOCATE 24,JJ:IF K>9 THEN PRINT MID$(STR$(K),2,1);ELSE PRINT " "; 520 LOCATE 25,JJ:PRINT RIGHT$(STR$(K),1);:NEXT 530 RETURN 540 LINE (4,11)-(54,65),2,BF 550 LINE (9,6)-(59,60),0,BF 560 LINE (9,6)-(59,60),1,B 570 LINE (10,18)-(58,18),1 580 GET (4,6)-(59,65),S:PUT (262,6),S,PSET 590 LOCATE 2,5-LEN(P1$)/2:PRINT P1$ 600 LOCATE 2,37-LEN(P2$)/2:PRINT P2$ 610 FOR J=1 TO 8:LOCATE 1,J*2+10:PRINT J:NEXT 620 FOR SWITCHY=0 TO 4 630 FOR SWITCHX=0 TO SWITCHY+3 640 WP=INT(RND(1)*2):BOX(SWITCHY,SWITCHX,0)=WP:BOX(SWITCHY,SWITCHX,1)=0 650 GOSUB 670 660 NEXT SWITCHX,SWITCHY:RETURN 670 SY=24+SWITCHY*32:SX=92-SWITCHY*16+SWITCHX*32 680 IF WP=0 THEN PUT (SX,SY),LEFTSW,PSET ELSE PUT (SX,SY),RIGHTSW,PSET 690 RETURN 700 FOR I=1 TO 10:LINE (I+155,52)-(I+157,51),2 710 LINE (I+189,20)-(I+191,19),2:NEXT 720 FOR I=172 TO 180:LINE (I,12)-(I+10,22),1 730 LINE (I+1,11)-(I+3,10),2 740 LINE (I,44)-(I-10,54),1 750 LINE (I+1,43)-(I+3,42),2:NEXT 760 LINE (186,21)-(200,22),1,BF 770 LINE (166,53)-(154,54),1,BF 780 GET (172,6)-(202,22),LEFTSW 790 GET (154,38)-(184,54),RIGHTSW 800 ARC=3.14159/2 810 FOR I=1 TO 2:CIRCLE (80,8),I*4,3,ARC,ARC*2 820 CIRCLE (68,6),I*4,3,ARC*3,ARC*4 830 CIRCLE (231,8),I*4,3,0,ARC 840 CIRCLE (243,6),I*4,3,ARC*2,ARC*3:NEXT 850 LINE (80,1)-(88,4),3,BF 860 LINE (231,1)-(223,4),3,BF 870 LINE (61,9)-(67,13),3,BF 880 LINE (250,9)-(244,13),3,BF 890 PAINT (74,7),3 900 PAINT (237,7),3 910 FOR I=5 TO 17:LINE (58,11)-(64,I),3 920 LINE (253,11)-(247,I),3:NEXT 930 GET (58,1)-(88,17),LARROW 940 GET (223,1)-(253,17),RARROW 950 RETURN 960 'Draw SWITCHBOX 970 CIRCLE (100,100),3,3 980 PAINT (100,100),3 990 GET (97,97)-(103,103),BALL 1000 PUT (97,97),BALL,PRESET 1010 GET (97,97)-(103,103),UNBALL 1020 RETURN 1030 LINE (80,24)-(87,39),1,BF 1040 LINE (224,24)-(231,39),1,BF 1050 FOR I=0 TO 7:LINE (81+I,23)-(96+I,8),1 1060 LINE (208+I,8)-(223+I,23),1:NEXT 1070 GET (80,8)-(103,39),S 1080 FOR I=0 TO 3:PUT (64-I*16,I*32+40),S:NEXT 1090 GET (208,8)-(231,39),S 1100 FOR I=0 TO 3:PUT (224+I*16,I*32+40),S:NEXT 1110 LINE (96,8)-(215,15),0,BF 1120 LINE (16,168)-(23,183),1,BF 1130 LINE (288,168)-(295,183),1,BF 1140 FOR I=0 TO 7:LINE (16+I,184)-(29,197-I),1 1150 LINE (288+I,184)-(282,190+I),1:NEXT 1160 FOR I=0 TO 6:FOR HP=123-I*16 TO 187+I*16 STEP 32 1170 VS=I*32-32:VE=VS+64:IF VS<8 THEN VS=8 1180 IF VE>186 THEN VE=186 1190 LINE (HP,VS)-(HP,VE),1:NEXT:NEXT 1200 RETURN 1210 'Game stuff 1220 FOR FBALL=0 TO 32:FALLING(FBALL,0)=0:NEXT:NEWBALL=1 1230 A$="":WHILE A$="":A$=INKEY$:WEND 1240 IF A$="-" THEN RETURN 1250 IF A$="+" THEN A$=CHR$(INT(RND(1)*8+49)) 1260 A=VAL(A$):IF A<1 OR A>8 THEN 1230 1270 FALLING(0,0)=1:FOR J=1 TO 3:FALLING(0,J)=0:NEXT 1280 FALLING(0,4)=10+A*2 1290 EXIT=0:WHILE EXIT=0:EXIT=1 1300 FOR FBALL=0 TO 32:IF FALLING(FBALL,0)=1 THEN EXIT=0:GOSUB 1320 1310 NEXT:WEND:RETURN 1320 DY=FALLING(FBALL,0):DX=FALLING(FBALL,1):LEVEL=FALLING(FBALL,2) 1330 NY=FALLING(FBALL,3):NX=FALLING(FBALL,4) 1340 IF LEVEL<>0 OR NY<>0 THEN GOSUB 1570 1350 NY=NY+1:FALLING(FBALL,3)=NY AND 3:ON NY GOTO 1360,1380,1420,1430 1360 IF LEVEL=5 THEN FALLING(FBALL,0)=0:GOTO 1500 1370 GOSUB 1560:ON INT(RND(1)*3+1) GOTO 1580,1590,1600 1380 VX=0:GOSUB 1540 1390 IF BOX(SWITCHY,SWITCHX,1)=1 AND BOX(SWITCHY,SWITCHX,0)=SIDE THEN VX=1-2*SIDE:FALLING(FBALL,1)=VX:NX=NX+VX:FALLING(FBALL,4)=NX:GOSUB 1560:GOTO 1610 1400 GOSUB 1560:IF BOX(SWITCHY,SWITCHX,0)=SIDE THEN FALLING(FBALL,0)=0:BOX(SWITCHY,SWITCHX,1)=1:GOTO 1620 1410 ON INT(RND(1)*3+1) GOTO 1580,1590,1600 1420 FALLING(FBALL,1)=0:NX=NX+DX:FALLING(FBALL,4)=NX:GOSUB 1560:GOTO 1630 1430 FALLING(FBALL,2)=LEVEL+1:GOSUB 1560 1440 GOSUB 1540:BOX(SWITCHY,SWITCHX,0)=1-BOX(SWITCHY,SWITCHX,0) 1450 IF BOX(SWITCHY,SWITCHX,1)=0 THEN 1490 1460 FALLING(NEWBALL,0)=1:FALLING(NEWBALL,1)=0:FALLING(NEWBALL,2)=LEVEL 1470 FALLING(NEWBALL,3)=0:FALLING(NEWBALL,4)=NX+2-SIDE*4 1480 BOX(SWITCHY,SWITCHX,1)=0:NEWBALL=NEWBALL+1:GOSUB 1640 1490 WP=BOX(SWITCHY,SWITCHX,0):GOSUB 670:GOTO 1630 1500 AMT=POINTS(ROUND,NX/2-1):SUBTOT=SCORE(PLAYER,ROUND)+AMT 1510 SUB$=STR$(SUBTOT):LOCATE ROUND+3,7-LEN(SUB$)+PLAYER*32:PRINT SUB$ 1520 SCORE(PLAYER,ROUND)=SUBTOT 1530 GOTO 1650 1540 SWITCHY=LEVEL:JX=NX/2+LEVEL-6 1550 SWITCHX=INT(JX/2):SIDE=JX-INT(JX/2)*2:RETURN 1560 PUT (NX*8,8+LEVEL*32+NY*8),BALL,OR:RETURN 1570 PUT (NX*8,8+LEVEL*32+NY*8),UNBALL,AND:RETURN 1580 FOR I=0 TO 1:SOUND 880,1:SOUND 32767,1:NEXT:RETURN 1590 FOR I=0 TO 1:SOUND 660,1:SOUND 32767,1:NEXT:RETURN 1600 FOR I=0 TO 1:SOUND 440,1:SOUND 32767,1:NEXT:RETURN 1610 FOR I=1 TO 6:SOUND 1100*RND(1)+37,1:NEXT:RETURN 1620 FOR I=800 TO 200 STEP -20:SOUND I,.1:NEXT:RETURN 1630 FOR I=1 TO 6:SOUND 550*RND(1)+37,1:NEXT:RETURN 1640 FOR I=0 TO 1:FOR J=440 TO 880 STEP 80:SOUND J,.5:NEXT J,I:RETURN 1650 FOR I=0 TO 5:SOUND 330,.5:SOUND 440,.5:SOUND 550,.5:NEXT 1660 SOUND 32767,1:RETURN