home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 054.WARGAME.BAS < prev    next >
BASIC Source File  |  1979-12-31  |  7KB  |  161 lines

  1. 1000 REM
  2. 1010 REM War Strategy Game by Randy Hawkins
  3. 1020 REM (c) Copyright 1989 by Randy Hawkins and
  4. 1030 REM ONE THOUSAND Magazine, All Rights Reserved
  5. 1040 REM
  6. 1042 COMMON RH: IF RH = 0 THEN SYSTEM
  7. 1044 CLEAR: KEY (17) ON: KEY 17, CHR$(0) + CHR$(1)
  8. 1046 ON KEY (17) GOSUB 2560
  9. 1050 SCREEN 0: WIDTH 80: KEY OFF: COLOR 15,0: CLS
  10. 1060 DIM N$(1), P(1,9), M(6), D(6): RANDOMIZE TIMER
  11. 1070 ON ERROR GOTO 2540
  12. 1080 M(1) = -19: M(2) = 1: M(3) = 20
  13. 1090 M(4) = 19: M(5) = -1: M(6) = -20
  14. 1100 PRINT "Welcome to OTM's War Strategy Game": PRINT
  15. 1110 INPUT "What is Player #1's Name"; N$(0): PRINT
  16. 1120 INPUT "What is Player #2's Name"; N$(1): PRINT
  17. 1130 PRINT SPC(2); "Hex Movement Chart": PRINT
  18. 1140 PRINT SPC(7); "6"; SPC(5); "1"
  19. 1150 PRINT SPC(9); CHR$(92); CHR$(32); CHR$(47)
  20. 1160 PRINT SPC(6); "5"; CHR$(32); STRING$(2,196);
  21. 1170 PRINT CHR$(250); STRING$(2,196); CHR$(32); "2"
  22. 1180 PRINT SPC(9); CHR$(47); CHR$(32); CHR$(92)
  23. 1190 PRINT SPC(7); "4"; SPC(5); "3": PRINT
  24. 1200 PRINT "Press any key to begin."
  25. 1210 WHILE INKEY$ = "": WEND: CLS
  26. 1220 REM
  27. 1230 REM Set Up User Defined Functions
  28. 1240 REM
  29. 1250 DEF FNZ(X) = INT(RND * X) + 1
  30. 1260 DEF FNR(X) = INT((X + 59.4) / 19.5)
  31. 1270 DEF FNC(X) = 4 * (X - INT(FNR(X) * 19.5)) + 237 - (FNR(X) AND 1) * 2
  32. 1280 DEF FNL(X) = SCREEN(FNR(X), FNC(X) + 1)
  33. 1290 REM
  34. 1300 REM Prepare Game Screen
  35. 1310 REM
  36. 1320 LOCATE 1,29,0: PRINT "OTM's War Strategy Game"
  37. 1330 COLOR 2,0: LOCATE 2,5: PRINT STRING$(71,220)
  38. 1340 LOCATE 18,5: PRINT STRING$(71,223)
  39. 1350 FOR A = 3 TO 17: LOCATE A,5: PRINT STRING$(71,219)
  40. 1360 NEXT A: COLOR 0,2: U$ = CHR$(250) + STRING$(3,32)
  41. 1370 FOR A = 3 TO 17: LOCATE A, 6 + 2 * (A AND 1)
  42. 1380 FOR B = 1 TO 17 - (A AND 1): PRINT U$;: NEXT B
  43. 1390 PRINT CHR$(250): NEXT A: U$ = CHR$(32) + CHR$(35) + CHR$(32)
  44. 1400 REM
  45. 1410 REM Place Armies and Capital Cities on Screen
  46. 1420 REM
  47. 1430 FOR A = 0 TO 1: COLOR 4 + A * 3, 7 - A * 3
  48. 1440 FOR B = 0 TO 9: READ X,Y: P(A,B) = X
  49. 1450 LOCATE FNR(X), FNC(X): PRINT USING U$; Y;: NEXT B,A
  50. 1460 DATA 43,3, 62,5, 81,5, 100,5, 119,3
  51. 1470 DATA 23,4, 42,4, 61,5, 80,4, 99,4
  52. 1480 DATA 172,3, 191,5, 210,5, 229,5, 248,3
  53. 1490 DATA 192,4, 211,4, 230,5, 249,4, 268,4
  54. 1500 COLOR 4,7: LOCATE 5,11: PRINT CHR$(32); CHR$(16); CHR$(32)
  55. 1510 COLOR 7,4: LOCATE 15,67: PRINT CHR$(32); CHR$(17); CHR$(32)
  56. 1520 REM
  57. 1530 REM Place Lake and Mountains on Screen
  58. 1540 REM
  59. 1550 COLOR 1,2: X = FNZ(291): IF FNL(X) <> 250 THEN 1550
  60. 1560 A = 0: FOR B = 1 TO 2: A = A + FNL(X+B) <> 250
  61. 1570 NEXT B: FOR B = 19 TO 22: A = A + FNL(X+B) <> 250
  62. 1580 NEXT B: FOR B = 39 TO 41: A = A + FNL(X+B) <> 250
  63. 1590 NEXT B: IF A THEN 1550 ELSE LOCATE FNR(X), FNC(X)
  64. 1600 PRINT STRING$(11,178);: LOCATE FNR(X)+1, FNC(X)-1
  65. 1610 PRINT STRING$(13,178);: LOCATE FNR(X)+2, FNC(X)
  66. 1620 PRINT STRING$(11,178);
  67. 1630 FOR A = 1 TO 2: COLOR 0,2
  68. 1640 X = FNZ(291): IF FNL(X) <> 250 THEN 1640
  69. 1650 LOCATE FNR(X), FNC(X) + 1: PRINT CHR$(127): B = 6
  70. 1660 Y = FNZ(6): C = FNL(X + M(Y))
  71. 1670 IF C <> 127 AND C <> 250 THEN 1660
  72. 1680 X = X + M(Y): LOCATE FNR(X), FNC(X) + 1: PRINT CHR$(127)
  73. 1690 B = B + (C = 250): IF B THEN 1660
  74. 1700 NEXT A: T = FNZ(2) - 1
  75. 1710 REM
  76. 1720 REM Begin Play; Each Player Moves Armies
  77. 1730 REM
  78. 1740 GOSUB 2410: I$ = "Your Turn, General " + N$(T)
  79. 1750 IF T = 0 THEN LOCATE 20,5: PRINT I$;
  80. 1760 IF T = 1 THEN LOCATE 20,76-LEN(I$): PRINT I$;
  81. 1770 FOR A = 0 TO 9: IF P(T,A) = 0 THEN 1960
  82. 1780 X = FNL(P(T,A)) - 48: Y = X: COLOR 2,0: LOCATE 22,18
  83. 1790 PRINT "Enter Direction to Move (1-6) or <P> to Pass"
  84. 1800 COLOR 2,0: LOCATE 20, 63 - T * 59: PRINT X; "Moves Left"
  85. 1810 COLOR 20+T*3, 7-T*3: LOCATE FNR(P(T,A)), FNC(P(T,A))
  86. 1820 PRINT USING U$; Y;: DEF SEG = 0: POKE 1050, PEEK(1052)
  87. 1830 I$ = INKEY$: IF I$ = "P" OR I$ = "p" THEN 1940
  88. 1840 IF I$ < "1" OR I$ > "6" THEN 1830
  89. 1850 B = VAL(I$): C = FNL(P(T,A) + M(B))
  90. 1860 REM
  91. 1870 REM Entering Capital?  Valid Move?
  92. 1880 REM
  93. 1890 IF (T = 0 AND C = 17) OR (T = 1 AND C = 16) THEN 2460
  94. 1900 IF C <> 250 THEN 1830
  95. 1910 COLOR 0,2: LOCATE FNR(P(T,A)), FNC(P(T,A))
  96. 1920 PRINT CHR$(32); CHR$(250); CHR$(32);
  97. 1930 P(T,A) = P(T,A) + M(B): X = X - 1: IF X THEN 1800
  98. 1940 COLOR 4 + T*3, 7 - T*3: LOCATE FNR(P(T,A)), FNC(P(T,A))
  99. 1950 PRINT USING U$; Y;
  100. 1960 NEXT A: GOSUB 2410
  101. 1970 REM
  102. 1980 REM Check Each Army for Combat Situation
  103. 1990 REM
  104. 2000 FOR A = 0 TO 9: LOCATE 20,37
  105. 2010 PRINT "Stand By": IF P(T,A) = 0 THEN 2370
  106. 2020 C = 0: FOR B = 1 TO 6: X = P(T,A) + M(B): D(B) = -1
  107. 2030 FOR Y = 0 TO 9: IF X = P(1-T,Y) THEN C = C + 1: D(B) = Y
  108. 2040 NEXT Y,B: IF C = 0 THEN 2370
  109. 2050 F1 = FNL(P(T,A)) - 48: IF C > 1 THEN 2110
  110. 2060 B = 0: FOR C = 1 TO 6: IF D(C) => 0 THEN B = C
  111. 2070 NEXT C: GOTO 2170
  112. 2080 REM
  113. 2090 REM Select Direction of Attack
  114. 2100 REM
  115. 2110 I$ = "General " + N$(T) + ", Attach Which Direction (1-6)?"
  116. 2120 LOCATE 20, 40 - LEN(I$)/2: PRINT I$
  117. 2130 COLOR 20 + T*3, 7 - T*3: LOCATE FNR(P(T,A)), FNC(P(T,A))
  118. 2140 PRINT USING U$; F1;: DEF SEG = 0: POKE 1050, PEEK(1052)
  119. 2150 I$ = INKEY$: IF I$ < "1" OR I$ > "6" THEN 2150
  120. 2160 B = VAL(I$): IF D(B) < 0 THEN 2150
  121. 2170 F2 = FNL(P(1-T,D(B))) - 48: GOSUB 2410
  122. 2180 REM
  123. 2190 REM Combat Between Adjacent Armies
  124. 2200 REM
  125. 2210 LOCATE 20,34: PRINT "C O M B A T !"
  126. 2220 COLOR 20 + T*3, 7 - T*3: LOCATE FNR(P(T,A)), FNC(P(T,A))
  127. 2230 PRINT USING U$; F1;: COLOR 23 - T*3, 4 + 3*T
  128. 2240 LOCATE FNR(P(1-T,D(B))), FNC(P(1-T,D(B))): PRINT USING U$; F2;
  129. 2250 FOR C = 1 TO 25: NOISE 6,15,2: SOUND 1,2,0: NEXT C
  130. 2260 IF F1 + 1 < FNZ(F1 + F2) THEN 2320
  131. 2270 F2 = F2 - 1: IF F2 THEN 2220 ELSE COLOR 0,2
  132. 2280 LOCATE FNR(P(1-T,D(B))), FNC(P(1-T,D(B)))
  133. 2290 PRINT CHR$(32); CHR$(250); CHR$(32): P(1-T,D(B)) = 0
  134. 2300 COLOR 4 + T*3, 7 - T*3: LOCATE FNR(P(T,A)), FNC(P(T,A))
  135. 2310 PRINT USING U$; F1;: GOTO 2370
  136. 2320 F1 = F1 - 1: IF F1 THEN 2220 ELSE COLOR 0,2
  137. 2330 LOCATE FNR(P(T,A)), FNC(P(T,A))
  138. 2340 PRINT CHR$(32); CHR$(250); CHR$(32): P(T,A) = 0
  139. 2350 COLOR 7 - T*3, 4 + 3*T: LOCATE FNR(P(1-T,D(B))), FNC(P(1-T,D(B)))
  140. 2360 PRINT USING U$; F2;
  141. 2370 GOSUB 2410: NEXT A: T = 1 - T: GOTO 1740
  142. 2380 REM
  143. 2390 REM Clear Bottom of Screen
  144. 2400 REM
  145. 2410 COLOR 2,0: FOR C = 20 TO 23: LOCATE C,1
  146. 2420 PRINT STRING$(78,32);: NEXT C: RETURN
  147. 2430 REM
  148. 2440 REM Victor Has Entered Opposition Capital
  149. 2450 REM
  150. 2460 GOSUB 2410: I$ = "General " + N$(T) + " is the Victor!"
  151. 2470 LOCATE 20, 40 - LEN(I$) / 2: PRINT I$
  152. 2480 LOCATE 22, 24: PRINT "Do You Want to Play Again (Y/N)? _"
  153. 2490 I$ = INKEY$: IF I$ = "Y" OR I$ = "y" THEN 1044
  154. 2500 IF I$ = "N" OR I$ = "n" THEN 2560 ELSE 2490
  155. 2510 REM
  156. 2520 REM Error Trapping for BASIC w/o NOISE Statement
  157. 2530 REM
  158. 2540 IF ERL = 2250 THEN SOUND 100,.1: RESUME NEXT ELSE RESUME 2550
  159. 2550 PRINT "Error Code #"; ERR; "in Line Number"; ERL
  160. 2560 CLS: LOCATE 12,30: PRINT "One Moment Please...": RUN "menu"
  161.