home *** CD-ROM | disk | FTP | other *** search
/ The CIA World Factbook 1992 / k3bimage.iso / sel / 01 / 0188 / switchbx.bas < prev    next >
Encoding:
BASIC Source File  |  1991-12-02  |  6.6 KB  |  159 lines

  1. 10 'SWITCHBX.BAS:  A strategy game from COMPUTE! March 1986 by Todd Heimarck.
  2. 20 '
  3. 100 RANDOMIZE TIMER
  4. 110 SCREEN 1,0:CLS
  5. 120 KEY OFF
  6. 130 COLOR 7,0
  7. 140 DIM BOX(4,7,1),FALLING(32,4),POINTS(4,16),SCORE(1,8)
  8. 150 DIM S(250),LEFTSW(35),RIGHTSW(35),BALL(4),UNBALL(4),LARROW(35),RARROW(35)
  9. 160 FOR J=1 TO 4:READ POINTS(J,0)
  10. 170 FOR K=1 TO 8:READ L:POINTS(J,K+8)=L:POINTS(J,9-K)=L:NEXT K,J
  11. 180 DATA 10,2,2,2,2,2,2,2,2
  12. 190 DATA 40,1,2,3,5,8,13,21,34
  13. 200 DATA 20,2,3,4,5,6,7,8,9
  14. 210 DATA 80,1,4,9,16,25,36,49,64
  15. 220 LOCATE 1,1:INPUT"Player 1: ";P1$:P1$=LEFT$(P1$,5)
  16. 230 INPUT"Player 2: ";P2$:P2$=LEFT$(P2$,5)
  17. 240 PRINT P1$;" vs ";P2$:PRINT"Is this correct (Y/N) ?"
  18. 250 YN$=INKEY$:IF YN$="" THEN 250
  19. 260 IF YN$="n" OR YN$="N" THEN 220
  20. 270 ROUND=4
  21. 280 CLS:GOSUB 970:GOSUB 700
  22. 290 CLS:GOSUB 1030:GOSUB 540
  23. 300 PLAYER=1:PUT (225,1),RARROW:FOR ROUND=1 TO 4:GOSUB 500
  24. 310 FOR I=0 TO 1:CIRCLE (53+256*I,18+ROUND*8),2
  25. 320 PAINT (53+256*I,18+ROUND*8),3:NEXT
  26. 330 PLAYER=1-PLAYER:LOCATE 1,9+PLAYER*21:PRINT SPACE$(2)
  27. 340 PUT (60,1),LARROW:PUT (225,1),RARROW
  28. 350 LOCATE 1,30-PLAYER*21:PRINT RIGHT$(STR$(POINTS(ROUND,0)),2)
  29. 360 GOSUB 1210:IF SCORE(1-PLAYER,ROUND)<POINTS(ROUND,0) THEN 330
  30. 370 FOR J=0 TO 1:FOR K=5 TO 8
  31. 380 SCORE (J,K)=0:NEXT K,J
  32. 390 FOR J=0 TO 1:FOR K=1 TO 4:BONUS=POINTS(K,0):AMT=SCORE(J,K)
  33. 400 SCORE(J,5)=SCORE(J,5)+AMT:SCORE(J,6)=SCORE(J,6)-BONUS*(AMT>=BONUS)
  34. 410 SCORE(J,7)=SCORE(J,7)+SCORE(J,K)-SCORE(1-J,K):NEXT K,J
  35. 420 FOR J=0 TO 1:FOR K=6 TO 7:SCORE(J,K)=SCORE(J,K)+SCORE(J,5):NEXT K,J
  36. 430 FOR J=0 TO 1:FOR K=5 TO 7:SCORE(J,8)=SCORE(J,8)+SCORE(J,K):NEXT K,J
  37. 440 FOR J=0 TO 1:FOR K=5 TO 8:SCORE$=STR$(SCORE(J,K))
  38. 450 LOCATE K+6,1+J*34:PRINT SPACE$(5)
  39. 460 LOCATE K+6,5-LEN(SCORE$)+J*34:PRINT SCORE$:NEXT K,J
  40. 470 NEXT ROUND:LOCATE 11,12:PRINT"Play again (Y/N) ?"
  41. 480 K$=INKEY$:IF K$="n" OR K$="N" THEN CLS:END:ELSE IF K$="y" OR K$="Y" THEN RUN:ELSE GOTO 480
  42. 500 FOR J=1 TO 16:K=POINTS(ROUND,J):JJ=3+J*2
  43. 510 LOCATE 24,JJ:IF K>9 THEN PRINT MID$(STR$(K),2,1);ELSE PRINT " ";
  44. 520 LOCATE 25,JJ:PRINT RIGHT$(STR$(K),1);:NEXT
  45. 530 RETURN
  46. 540 LINE (4,11)-(54,65),2,BF
  47. 550 LINE (9,6)-(59,60),0,BF
  48. 560 LINE (9,6)-(59,60),1,B
  49. 570 LINE (10,18)-(58,18),1
  50. 580 GET (4,6)-(59,65),S:PUT (262,6),S,PSET
  51. 590 LOCATE 2,5-LEN(P1$)/2:PRINT P1$
  52. 600 LOCATE 2,37-LEN(P2$)/2:PRINT P2$
  53. 610 FOR J=1 TO 8:LOCATE 1,J*2+10:PRINT J:NEXT
  54. 620 FOR SWITCHY=0 TO 4
  55. 630 FOR SWITCHX=0 TO SWITCHY+3
  56. 640 WP=INT(RND(1)*2):BOX(SWITCHY,SWITCHX,0)=WP:BOX(SWITCHY,SWITCHX,1)=0
  57. 650 GOSUB 670
  58. 660 NEXT SWITCHX,SWITCHY:RETURN
  59. 670 SY=24+SWITCHY*32:SX=92-SWITCHY*16+SWITCHX*32
  60. 680 IF WP=0 THEN PUT (SX,SY),LEFTSW,PSET ELSE PUT (SX,SY),RIGHTSW,PSET
  61. 690 RETURN
  62. 700 FOR I=1 TO 10:LINE (I+155,52)-(I+157,51),2
  63. 710 LINE (I+189,20)-(I+191,19),2:NEXT
  64. 720 FOR I=172 TO 180:LINE (I,12)-(I+10,22),1
  65. 730 LINE (I+1,11)-(I+3,10),2
  66. 740 LINE (I,44)-(I-10,54),1
  67. 750 LINE (I+1,43)-(I+3,42),2:NEXT
  68. 760 LINE (186,21)-(200,22),1,BF
  69. 770 LINE (166,53)-(154,54),1,BF
  70. 780 GET (172,6)-(202,22),LEFTSW
  71. 790 GET (154,38)-(184,54),RIGHTSW
  72. 800 ARC=3.14159/2
  73. 810 FOR I=1 TO 2:CIRCLE (80,8),I*4,3,ARC,ARC*2
  74. 820 CIRCLE (68,6),I*4,3,ARC*3,ARC*4
  75. 830 CIRCLE (231,8),I*4,3,0,ARC
  76. 840 CIRCLE (243,6),I*4,3,ARC*2,ARC*3:NEXT
  77. 850 LINE (80,1)-(88,4),3,BF
  78. 860 LINE (231,1)-(223,4),3,BF
  79. 870 LINE (61,9)-(67,13),3,BF
  80. 880 LINE (250,9)-(244,13),3,BF
  81. 890 PAINT (74,7),3
  82. 900 PAINT (237,7),3
  83. 910 FOR I=5 TO 17:LINE (58,11)-(64,I),3
  84. 920 LINE (253,11)-(247,I),3:NEXT
  85. 930 GET (58,1)-(88,17),LARROW
  86. 940 GET (223,1)-(253,17),RARROW
  87. 950 RETURN
  88. 960 'Draw SWITCHBOX
  89. 970 CIRCLE (100,100),3,3
  90. 980 PAINT (100,100),3
  91. 990 GET (97,97)-(103,103),BALL
  92. 1000 PUT (97,97),BALL,PRESET
  93. 1010 GET (97,97)-(103,103),UNBALL
  94. 1020 RETURN
  95. 1030 LINE (80,24)-(87,39),1,BF
  96. 1040 LINE (224,24)-(231,39),1,BF
  97. 1050 FOR I=0 TO 7:LINE (81+I,23)-(96+I,8),1
  98. 1060 LINE (208+I,8)-(223+I,23),1:NEXT
  99. 1070 GET (80,8)-(103,39),S
  100. 1080 FOR I=0 TO 3:PUT (64-I*16,I*32+40),S:NEXT
  101. 1090 GET (208,8)-(231,39),S
  102. 1100 FOR I=0 TO 3:PUT (224+I*16,I*32+40),S:NEXT
  103. 1110 LINE (96,8)-(215,15),0,BF
  104. 1120 LINE (16,168)-(23,183),1,BF
  105. 1130 LINE (288,168)-(295,183),1,BF
  106. 1140 FOR I=0 TO 7:LINE (16+I,184)-(29,197-I),1
  107. 1150 LINE (288+I,184)-(282,190+I),1:NEXT
  108. 1160 FOR I=0 TO 6:FOR HP=123-I*16 TO 187+I*16 STEP 32
  109. 1170 VS=I*32-32:VE=VS+64:IF VS<8 THEN VS=8
  110. 1180 IF VE>186 THEN VE=186
  111. 1190 LINE (HP,VS)-(HP,VE),1:NEXT:NEXT
  112. 1200 RETURN
  113. 1210 'Game stuff
  114. 1220 FOR FBALL=0 TO 32:FALLING(FBALL,0)=0:NEXT:NEWBALL=1
  115. 1230 A$="":WHILE A$="":A$=INKEY$:WEND
  116. 1240 IF A$="-" THEN RETURN
  117. 1250 IF A$="+" THEN A$=CHR$(INT(RND(1)*8+49))
  118. 1260 A=VAL(A$):IF A<1 OR A>8 THEN 1230
  119. 1270 FALLING(0,0)=1:FOR J=1 TO 3:FALLING(0,J)=0:NEXT
  120. 1280 FALLING(0,4)=10+A*2
  121. 1290 EXIT=0:WHILE EXIT=0:EXIT=1
  122. 1300 FOR FBALL=0 TO 32:IF FALLING(FBALL,0)=1 THEN EXIT=0:GOSUB 1320
  123. 1310 NEXT:WEND:RETURN
  124. 1320 DY=FALLING(FBALL,0):DX=FALLING(FBALL,1):LEVEL=FALLING(FBALL,2)
  125. 1330 NY=FALLING(FBALL,3):NX=FALLING(FBALL,4)
  126. 1340 IF LEVEL<>0 OR NY<>0 THEN GOSUB 1570
  127. 1350 NY=NY+1:FALLING(FBALL,3)=NY AND 3:ON NY GOTO 1360,1380,1420,1430
  128. 1360 IF LEVEL=5 THEN FALLING(FBALL,0)=0:GOTO 1500
  129. 1370 GOSUB 1560:ON INT(RND(1)*3+1) GOTO 1580,1590,1600
  130. 1380 VX=0:GOSUB 1540
  131. 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
  132. 1400 GOSUB 1560:IF BOX(SWITCHY,SWITCHX,0)=SIDE THEN FALLING(FBALL,0)=0:BOX(SWITCHY,SWITCHX,1)=1:GOTO 1620
  133. 1410 ON INT(RND(1)*3+1) GOTO 1580,1590,1600
  134. 1420 FALLING(FBALL,1)=0:NX=NX+DX:FALLING(FBALL,4)=NX:GOSUB 1560:GOTO 1630
  135. 1430 FALLING(FBALL,2)=LEVEL+1:GOSUB 1560
  136. 1440 GOSUB 1540:BOX(SWITCHY,SWITCHX,0)=1-BOX(SWITCHY,SWITCHX,0)
  137. 1450 IF BOX(SWITCHY,SWITCHX,1)=0 THEN 1490
  138. 1460 FALLING(NEWBALL,0)=1:FALLING(NEWBALL,1)=0:FALLING(NEWBALL,2)=LEVEL
  139. 1470 FALLING(NEWBALL,3)=0:FALLING(NEWBALL,4)=NX+2-SIDE*4
  140. 1480 BOX(SWITCHY,SWITCHX,1)=0:NEWBALL=NEWBALL+1:GOSUB 1640
  141. 1490 WP=BOX(SWITCHY,SWITCHX,0):GOSUB 670:GOTO 1630
  142. 1500 AMT=POINTS(ROUND,NX/2-1):SUBTOT=SCORE(PLAYER,ROUND)+AMT
  143. 1510 SUB$=STR$(SUBTOT):LOCATE ROUND+3,7-LEN(SUB$)+PLAYER*32:PRINT SUB$
  144. 1520 SCORE(PLAYER,ROUND)=SUBTOT
  145. 1530 GOTO 1650
  146. 1540 SWITCHY=LEVEL:JX=NX/2+LEVEL-6
  147. 1550 SWITCHX=INT(JX/2):SIDE=JX-INT(JX/2)*2:RETURN
  148. 1560 PUT (NX*8,8+LEVEL*32+NY*8),BALL,OR:RETURN
  149. 1570 PUT (NX*8,8+LEVEL*32+NY*8),UNBALL,AND:RETURN
  150. 1580 FOR I=0 TO 1:SOUND 880,1:SOUND 32767,1:NEXT:RETURN
  151. 1590 FOR I=0 TO 1:SOUND 660,1:SOUND 32767,1:NEXT:RETURN
  152. 1600 FOR I=0 TO 1:SOUND 440,1:SOUND 32767,1:NEXT:RETURN
  153. 1610 FOR I=1 TO 6:SOUND 1100*RND(1)+37,1:NEXT:RETURN
  154. 1620 FOR I=800 TO 200 STEP -20:SOUND I,.1:NEXT:RETURN
  155. 1630 FOR I=1 TO 6:SOUND 550*RND(1)+37,1:NEXT:RETURN
  156. 1640 FOR I=0 TO 1:FOR J=440 TO 880 STEP 80:SOUND J,.5:NEXT J,I:RETURN
  157. 1650 FOR I=0 TO 5:SOUND 330,.5:SOUND 440,.5:SOUND 550,.5:NEXT
  158. 1660 SOUND 32767,1:RETURN
  159.