home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / MBUG / MBUG177.ARC / BATLSHIP.BAS < prev    next >
BASIC Source File  |  1979-12-31  |  7KB  |  176 lines

  1. 10 ' BATTLESHIP PROGRAM -- SUBMITTED BY CARL WARNER
  2. 20 ' SOURCE UNKNOWN -- ORIGINALLY IN H89 FORMAT
  3. 30 ' SET UP FOR AN 80 COLUMN OSBORNE 1 SCREEN
  4. 40 ' CONVERTED FROM H89 FORMAT TO O1 FORMAT ON 3/24/84
  5. 45 ' Altered slightly for the Microbee by AJL Oct'91
  6. 50 CLEAR 2500
  7. 60 ES$=CHR$(27):CL$=CHR$(26):GR$=ES$+"g"
  8. 70 RG$=ES$+"G":RV$=ES$+")":VR$=ES$+"("
  9. 80 VT$=CHR$(11):RT$=CHR$(9):BL$="   ":BE$=CHR$(7)
  10. 90 ML$=BL$+VT$+BL$+VT$+BL$+VT$+BL$+VT$+BL$+VT$
  11. 100 ML$=ML$+BL$+VT$+BL$+VT$+BL$+VT$+BL$+VT$+BL$+VT$+BL$+VT$
  12. 110 NO$="1"+BL$+"2"+BL$+"3"+BL$+"4"+BL$+"5"
  13. 120 NO$=NO$+BL$+"6"+BL$+"7"+BL$+"8"+BL$+"9"+BL$+"10"
  14. 130 PRINT CL$:FOR I=1 TO 5:PRINT:NEXT:PRINT TAB(33);RV$;" BATTLESHIP ";VR$
  15. 140 PRINT:PRINT:PRINT TAB(23);"PLEASE SELECT OPTION 1, 2 OR 3!"
  16. 150 PRINT:PRINT:PRINT TAB(30);"GAME DIRECTIONS  -  1"
  17. 160 PRINT:PRINT TAB(30);      "START GAME       -  2"
  18. 170 PRINT:PRINT TAB(30);      "END GAME         -  3"
  19. 180 T$=INKEY$
  20. 190 IF T$="" THEN SEED=SEED+1:GOTO 180
  21. 200 U=VAL(T$)
  22. 210 IF U<1 OR U>3 THEN PRINT BE$:GOTO 10
  23. 220 ON U GOTO 240,450,1750
  24. 230 IF T<=0 OR T>=4 THEN PRINT BE$:GOTO 200
  25. 240 PRINT CL$;TAB(28);RV$;"BATTLESHIP";VR$:PRINT
  26. 250 PRINT"This is a guessing game to locate the hidden ships.  A map will be
  27. 260 PRINT"drawn on the screen with numbers over each column and down each row.
  28. 270 PRINT"The description of each ship and its symbol will be displayed to
  29. 280 PRINT"the right of the map for your information.  The game will start by
  30. 290 PRINT"randomly selecting the hidden locations for the ships.  During this
  31. 300 PRINT"time, a message will be displayed asking you to wait while the ships
  32. 310 PRINT"maneuver. To the left of the screen, you will be asked your selection
  33. 320 PRINT"for the columns with the prompt - OVER?. Please answer with a number
  34. 330 PRINT"between 1 and 10 and hit the <RETURN> key.  Next you will be asked
  35. 340 PRINT"your selection for the rows with the prompt - DOWN?. Please answer 
  36. 350 PRINT"with a number between 1 and 10. If you locate a ship one of the
  37. 360 PRINT"symbols for the ships will appear at the guessed location and a beep
  38. 370 PRINT"will sound. If you miss, an '*' will appear in the location.  If you
  39. 380 PRINT"pick a location that was previously chosen, you will see a message
  40. 390 PRINT"to TRY AGAIN along with 2 beeps. The shots, hits and misses will be
  41. 400 PRINT"displayed for you. There are a possible 100 shots.  You will be rated
  42. 410 PRINT"by your score at the end of the game as the map is cleared of '*'s'
  43. 420 PRINT"to reveal the ship locations.":PRINT
  44. 430 PRINT"= = = = = = = = = = = = = = = = = =>>>";RV$;"To start the game press ANY key";VR$:PRINT
  45. 440 A$=INPUT$(1)
  46. 450 PRINT CL$:PRINT TAB(3);RV$;" BATTLESHIP ";VR$;TAB(22);NO$
  47. 460 PRINT:FOR I=1 TO 10:PRINT TAB(12)I TAB(20) STRING$(38,46)
  48. 470 PRINT:NEXT I
  49. 490 FOR U=302 TO 1102 STEP 80
  50. 500 N=U:READ CH$:GOSUB 1180:NEXT U
  51. 510 FOR U=241 TO 561 STEP 80
  52. 520 N=U:READ CH$:GOSUB 1180:NEXT U
  53. 530 DIM A(10,10):DIM K(16)
  54. 540 FOR B=1 TO 10:FOR E=1 TO 10
  55. 550 READ A(B,E):NEXT E:NEXT B
  56. 560 PRINT RV$;BE$
  57. 570 N=1262:CH$="SHIPS MANEUVERING":GOSUB 1180
  58. 580 N=1342:CH$="PLEASE WAIT":GOSUB 1180
  59. 590 RANDOMIZE SEED
  60. 600 FOR C=5 TO 1 STEP -1
  61. 610 FOR F=1 TO 2
  62. 620 W=INT(RND*2):T=INT(RND*11)
  63. 630 IF T<1 OR T>10 THEN 620
  64. 640 B(F)=T
  65. 650 NEXT F
  66. 660 G=C:O=B(1):D=B(2):H=1
  67. 670 FOR G=G TO 1 STEP -1
  68. 680 FOR J=1 TO 15
  69. 690 N=A(D,O)
  70. 700 IF K(J)<>N THEN 790
  71. 710 IF C=4 THEN J=6
  72. 720 IF C=3 THEN J=10
  73. 730 IF C=2 THEN J=13
  74. 740 IF C=1 THEN J=15
  75. 750 FOR K=J TO 15
  76. 760 K(K)=0
  77. 770 NEXT K
  78. 780 GOTO 610
  79. 790 IF K(J)<>0 THEN 860
  80. 800 K(J)=N
  81. 810 IF W=0 THEN D=D+H
  82. 820 IF W=1 THEN O=O+H
  83. 830 IF D=11 THEN D=D-C
  84. 840 IF O=11 THEN O=O-C
  85. 850 GOTO 870
  86. 860 NEXT J
  87. 870 NEXT G
  88. 880 NEXT C
  89. 890 PRINT VR$;BE$
  90. 900 T=0:N=1262:CH$="                  ":GOSUB 1180
  91. 910 N=1342:GOSUB 1180
  92. 920 CH$="ACROSS":T=0:N=962:GOSUB 1180
  93. 930 INPUT O
  94. 940 CH$="     ":N=1042:GOSUB 1180
  95. 950 IF O>0 AND O<11 THEN 970
  96. 960 GOSUB 1040:GOTO 920
  97. 970 CH$="DOWN":N=1122:GOSUB 1180
  98. 980 INPUT D
  99. 990 CH$="     ":N=1202:GOSUB 1180
  100. 1000 IF D>0 AND D<11 THEN 1020
  101. 1010 GOSUB 1040:GOTO 970
  102. 1020 N=A(D,O)
  103. 1030 IF N<>0 THEN 1070 ELSE GOTO 960
  104. 1040 CH$="TRY AGAIN":N=801::PRINT RV$;BE$:GOSUB 1180
  105. 1050 PRINT VR$:FOR X=1000 TO 1 STEP -1:NEXT X:PRINT BE$
  106. 1060 CH$="         ":N=801:GOSUB 1180:RETURN
  107. 1070 RESTORE 1740
  108. 1080 S=1:T=1
  109. 1090 FOR J=1 TO 15
  110. 1100 READ CH$
  111. 1110 IF K(J)=N THEN 1140
  112. 1120 NEXT J
  113. 1130 CH$="*":S=0
  114. 1140 GOSUB 1180
  115. 1150 A(D,O)=0
  116. 1160 S=0
  117. 1170 GOTO 920
  118. 1180 X=(N-(INT(N/80)*80)+1):Y=INT(N/80)+1
  119. 1190 IF S<>1 THEN 1210
  120. 1200 PRINT RV$;BE$
  121. 1210 PRINT ES$+"="+CHR$(Y+31)+CHR$(X+30);CH$
  122. 1220 IF T=0 THEN RETURN
  123. 1230 C(1)=C(1)+S:C(3)=C(3)+1:C(2)=C(3)-C(1)
  124. 1240 PRINT RV$
  125. 1250 FOR L=321 TO 641 STEP 160
  126. 1260 M=(L-161)/160:N=L
  127. 1270 GOSUB 1300:NEXT L:PRINT VR$
  128. 1280 IF C(1)=15 THEN 1330
  129. 1290 RETURN
  130. 1300 X=(N-(INT(N/80)*80)+1):Y=INT(N/80)+1
  131. 1310 PRINT ES$+"="+CHR$(Y+31)+CHR$(X+30);C(M)
  132. 1320 RETURN
  133. 1330 RESTORE 1730
  134. 1340 T=0:PRINT RV$;BE$:N=1262:CH$="RATING :":GOSUB 1180
  135. 1350 FOR T=25 TO 85 STEP 15
  136. 1360 READ CH$
  137. 1370 IF C(3)<=T THEN 1390
  138. 1380 NEXT T
  139. 1390 N=1342:T=0:GOSUB 1180
  140. 1400 N=1502:CH$="CLEARING MISSES":GOSUB 1180
  141. 1410 N=1582:CH$="TO REVEAL PATTERN":GOSUB 1180
  142. 1420 PRINT VR$;BE$
  143. 1430 RESTORE 1630
  144. 1440 T=0:S=3
  145. 1450 FOR B=1 TO 10
  146. 1460 FOR E=1 TO 10
  147. 1470 READ A(B,E)
  148. 1480 FOR J=1 TO 15
  149. 1490 IF K(J)=A(B,E) THEN 1520
  150. 1500 NEXT J
  151. 1510 CH$=".":N=A(B,E):GOSUB 1180
  152. 1520 NEXT E
  153. 1530 NEXT B
  154. 1540 N=1502:CH$="                     ":GOSUB 1180
  155. 1550 N=1582:GOSUB 1180
  156. 1560 RESTORE 1590
  157. 1570 PRINT:PRINT:PRINT TAB(21);RV$;"Press any key to return to main menu. ";VR$;
  158. 1580 X$=INKEY$:IF X$="" THEN 1580 ELSE 10
  159. 1590 DATA "CARRIER = CCCCC","BATTLESHIP = BBBB","DESTROYER = DDD"
  160. 1600 DATA "SUBMARINE = SS","PT BOAT = P"," ","NO. OF SHOTS = 100"
  161. 1610 DATA "MISS = *","HIT = C,B,D,S OR P","SHIPS MAY BE VERT."
  162. 1620 DATA "OR HORZ.","HITS"," ","MISSES"," ","SHOTS"
  163. 1630 DATA 260,264,268,272,276,280,284,288,292,296
  164. 1640 DATA 420,424,428,432,436,440,444,448,452,456
  165. 1650 DATA 580,584,588,592,596,600,604,608,612,616
  166. 1660 DATA 740,744,748,752,756,760,764,768,772,776
  167. 1670 DATA 900,904,908,912,916,920,924,928,932,936
  168. 1680 DATA 1060,1064,1068,1072,1076,1080,1084,1088,1092,1096
  169. 1690 DATA 1220,1224,1228,1232,1236,1240,1244,1248,1252,1256
  170. 1700 DATA 1380,1384,1388,1392,1396,1400,1404,1408,1412,1416
  171. 1710 DATA 1540,1544,1548,1552,1556,1560,1564,1568,1572,1576
  172. 1720 DATA 1700,1704,1708,1712,1716,1720,1724,1728,1732,1736
  173. 1730 DATA "FLEET COMMANDER","ADMIRAL","CAPTAIN","ENSIGN","SWAB"
  174. 1740 DATA "C","C","C","C","C","B","B","B","B","D","D","D","S","S","P"
  175. 1750 END
  176. MMANDER","ADMIRAL