home *** CD-ROM | disk | FTP | other *** search
/ Between Heaven & Hell 2 / BetweenHeavenHell.cdr / 100 / 23 / combat.bas < prev    next >
BASIC Source File  |  1985-03-24  |  40KB  |  868 lines

  1. 10  ' COMBAT - CONFLICT SIMULATION
  2. 20      CLEAR,,,32768!
  3. 25      ON KEY(1) GOSUB 8600
  4. 26      KEY(1) ON
  5. 30      DEFINT A-Z
  6. 40      GOSUB 890      'HEADING SCREEN
  7. 50      GOSUB 1300      'INSTRUCTIONS
  8. 60      GOSUB 270        'DRAW MAP
  9. 70      GOSUB 480       'SETUP TERRAIN ARRAYS
  10. 80      GOSUB 3830      'PLACE ARMY UNIT
  11. 90      FOR TURN = 1 TO 8
  12. 100        LET ARMY$ = "R"
  13. 110        GOSUB 4300   'RED ARMY MOVE
  14. 120        LET ARMY$ = "R"
  15. 130        GOSUB 5520   'RED ARMY ATTACK
  16. 140        LET ARMY$ = "U"
  17. 150        GOSUB 4300   'US ARMY MOVE
  18. 160        LET ARMY$ = "U"
  19. 170        GOSUB 5520   'US ARMY ATTACK
  20. 180     NEXT TURN
  21. 190      GOSUB 5400    'FIND WINNER
  22. 200      CLS
  23. 210      PRINT "PLAY AGAIN? (Yes/No)"
  24. 220      GOSUB 1220      'WAIT FOR REPLY
  25. 230      IF REPLY$ = "Y" OR REPLY$ = "y" THEN                                              RUN
  26. 240 END
  27. 250 '****************************************************************************
  28. 260 '
  29. 270 'DRAW MAP
  30. 280       COLOR 7,8
  31. 290       CLS
  32. 300       FOR V = 0 TO 168 STEP 24
  33. 310         FOR H = 4 TO 292 STEP 48
  34. 320           IF V = 0 AND H = 292 GOTO 330                                                     ELSE LINE (H+0,V+12)-(H+6,V+0)        'LEFT TOP
  35. 330          IF V = 0 AND H <> 292 THEN LINE (H+6,V+0)-(H+24,V+0)      'TOP
  36. 340          IF H <> 292 THEN  LINE (H+24,V+0)-(H+30,V+12)      'RIGHT TOP
  37. 350          IF V = 168 AND H  = 292 GOTO 360                                                   ELSE LINE (H+0,V+12)-(H+6,V+24)       'BOTTOM LEFT
  38. 360          IF H <> 292 THEN LINE (H+6,V+24)-(H+24,V+24)   'BOTTOM
  39. 370          IF H <> 292 THEN LINE (H+24,V+24)-(H+30,V+12)   'BOTTOM RIGHT
  40. 380        NEXT H
  41. 390      NEXT V
  42. 400      FOR V = 12 TO 174 STEP 24
  43. 410         FOR H = 34 TO 304 STEP 48
  44. 420          IF V = 12 THEN LINE (H+0,V+0)-(H+18,V+0)      'TOP
  45. 430          LINE (H+0,V+24)-(H+18,V+24)   'BOTTOM
  46. 440        NEXT H
  47. 450      NEXT V
  48. 460 RETURN
  49. 470 '***************************************************************************
  50. 480 'SETUP TERRAIN ARRAYS
  51. 490     DIM TERRAIN$(22,10)
  52. 500     DIM ATTACK(10,6)
  53. 510 '    W = WOODED
  54. 520 '    C = CITY
  55. 530 '    O = OFF MAP
  56. 540 '    L = LAKE OR RIVER
  57. 550     LET TERRAIN$(3,3) = "W"
  58. 560     LET TERRAIN$(2,6) = "W"
  59. 570     LET TERRAIN$(3,7) = "L"
  60. 580     LET TERRAIN$(5,6) = "W"
  61. 590     LET TERRAIN$(6,3) = "W"
  62. 600     LET TERRAIN$(1,7) = "C"
  63. 610     LET TERRAIN$(3,2) = "C"
  64. 620     LET TERRAIN$(4,5) = "C"
  65. 630     LET TERRAIN$(2,8) = "O"
  66. 640     LET TERRAIN$(4,8) = "O"
  67. 650     LET TERRAIN$(6,8) = "O"
  68. 660     LET TERRAIN$(8,8) = "O"
  69. 670     LET TERRAIN$(6,2) = "W"
  70. 680     LET TERRAIN$(6,3) = "W"
  71. 690     LET TERRAIN$(6,4) = "W"
  72. 700     LET TERRAIN$(6,5) = "W"
  73. 710     LET TERRAIN$(6,6) = "W"
  74. 720     LET TERRAIN$(10,8) = "O"
  75. 730     LET TERRAIN$(7,3) = "L"
  76. 740     LET TERRAIN$(7,4) = "W"
  77. 750     LET TERRAIN$(7,5) = "W"
  78. 760     LET TERRAIN$(7,6) = "W"
  79. 770     LET TERRAIN$(7,5) = "W"
  80. 780     LET TERRAIN$(12,8) = "O"
  81. 790    FOR H.CORD = 1 TO 12
  82. 800      FOR V.CORD = 1 TO 8
  83. 810        IF TERRAIN$(H.CORD,V.CORD) = "W" THEN                                               LET P.COLOR = GREEN:                                                            GOSUB 8280
  84. 820        IF TERRAIN$(H.CORD,V.CORD) = "C" THEN                                               LET P.COLOR = BROWN:                                                            GOSUB 8280
  85. 830        IF TERRAIN$(H.CORD,V.CORD) = "L" THEN                                                LET P.COLOR = LT.BLUE:                                                          GOSUB 8280
  86. 840      NEXT V.CORD
  87. 850    NEXT H.CORD
  88. 860 RETURN
  89. 870 '**************************************************************************
  90. 880 '
  91. 890 'HEADING SCREEN
  92. 900     KEY OFF
  93. 910     SCREEN 5
  94. 920    LET RED = 4
  95. 930    LET BROWN = 6
  96. 940    LET BLUE = 1
  97. 950    LET GREEN = 2
  98. 960    LET WHITE =15
  99. 970    LET LT.BLUE = 9
  100. 980    LET GRAY = 8
  101. 990    PALETTE 1,1     'BLUE
  102. 1000    PALETTE 2,2     'GREEN
  103. 1010    PALETTE 3,3     'CYAN
  104. 1020    PALETTE 4,4     'RED
  105. 1030    PALETTE 5,5     'MAGENTA
  106. 1040    PALETTE 6,6    'BROWN
  107. 1050    PALETTE 7,0     'BLACK
  108. 1060    PALETTE 8,8    'GRAY
  109. 1070    PALETTE 9,9    'LIGHT BLUE
  110. 1080      COLOR 7,15
  111. 1090      CLS
  112. 1100     LOCATE 3,1
  113. 1110    PRINT "             COMBAT"
  114. 1120    LOCATE 6,1
  115. 1130    PRINT "       CONFLICT SIMULATION"
  116. 1140    LOCATE 16,1
  117. 1150    PRINT "       HIT SPACE TO CONTINUE"
  118. 1160    GOSUB 1220      'WAIT
  119. 1170 RETURN
  120. 1180 '
  121. 1190 '***************************************************************************1136'
  122. 1200 '**************************************************************************
  123. 1210 '
  124. 1220 'WAIT FOR A REPLY
  125. 1230    DEF SEG=0: POKE 1050, PEEK(1052)        'CLEAR KEYBOARD BUFFER
  126. 1240    LET REPLY$ = INKEY$
  127. 1250    IF REPLY$ = "" THEN GOTO 1240
  128. 1260 RETURN
  129. 1270 '
  130. 1280 '**************************************************************************
  131. 1290 '
  132. 1300 'INSTRUCTIONS
  133. 1310    CLS
  134. 1320    PRINT "DO YOU WANT INSTRUCTIONS (YES/NO)?"
  135. 1330    GOSUB 1220      'WAIT FOR REPLY
  136. 1340    IF REPLY$ <> "Y" AND REPLY$ <> "y" THEN                                           GOTO 1400    'RETURN
  137. 1350    GOSUB 1430      'PRINT COLOR AND TERRAIN
  138. 1360    GOSUB 1960      'GAME TURN RULES
  139. 1370    GOSUB 2220      'MOVEMENT RULES
  140. 1380    GOSUB 2740      'COMBAT RULES
  141. 1390    GOSUB 3620      'HOW GAME IS WON
  142. 1400 RETURN
  143. 1410 '**************************************************************************
  144. 1420 '
  145. 1430 'PRINT COLOR AND TERRAIN
  146. 1440    CLS
  147. 1450    PRINT "        HEX COLORS AND TERRAIN"
  148. 1460    LET H = 1
  149. 1470    LET V = 10
  150. 1480    GOSUB 1860      'DRAW A HEX
  151. 1490    PAINT (5,15),2,7
  152. 1500    LOCATE 3,10
  153. 1510    PRINT "WOODED HEX -"
  154. 1520    LOCATE 4,10
  155. 1530    PRINT "MOVEMENT INTO A WOODED HEX "
  156. 1540    LOCATE 5,10
  157. 1550    PRINT "COUNTS AS TWO HEXES "
  158. 1560    LET H = 1
  159. 1570    LET V = 50
  160. 1580    GOSUB 1860      'DRAW A HEX
  161. 1590    PAINT (5,55),6,7
  162. 1600    LOCATE 8,10
  163. 1610    PRINT "CITY HEX "
  164. 1620    LET H = 1
  165. 1630    LET V = 80
  166. 1640    GOSUB 1860      'DRAW A HEX
  167. 1650    PAINT (5,85),4,7
  168. 1660    LOCATE 12,10
  169. 1670    PRINT "SOVIET RED ARMY UNIT"
  170. 1680    LET H = 1
  171. 1690    LET V = 110
  172. 1700    GOSUB 1860      'DRAW A HEX
  173. 1710    PAINT (5,115),1,7
  174. 1720    LOCATE 16,10
  175. 1730    PRINT "U.S. ARMY UNIT"
  176. 1740    LET H = 1
  177. 1750    LET V = 140
  178. 1760    GOSUB 1860      'DRAW A HEX
  179. 1770    PAINT (5,145),9,7
  180. 1780    LOCATE 19,10
  181. 1790    PRINT "RIVER OR LAKE HEX"
  182. 1800    LOCATE 23,10
  183. 1810    PRINT "HIT SPACE TO CONTINUE"
  184. 1820    GOSUB 1220      'WAIT FOR REPLY
  185. 1830 RETURN
  186. 1840 '
  187. 1850 '---------------------------------------------------------------------------
  188. 1860 'DRAW A HEX
  189. 1870      LINE (H+4,V+19)-(H+14,V+19)   'BOTTOM
  190. 1880      LINE (H+14,V+19)-(H+19,V+9)   'BOTTOM RIGHT
  191. 1890      LINE (H+0,V+9)-(H+4,V+0)        'LEFT TOP
  192. 1900      LINE (H+4,V+0)-(H+14,V+0)      'TO
  193. 1910      LINE (H+14,V+0)-(H+19,V+9)      'RIGHT TOP
  194. 1920      LINE (H+0,V+9)-(H+4,V+19)       'BOTTOM LEFT
  195. 1930 RETURN
  196. 1940 '
  197. 1950 '---------------------------------------------------------------------------
  198. 1960 'GAME TURN RULES
  199. 1970    CLS
  200. 1980    PRINT "           GAME TURN"
  201. 1990    PRINT
  202. 2000    PRINT "A GAME TURN CONSISTS OF FOUR STEPS"
  203. 2010    PRINT
  204. 2020    PRINT "STEP 1.  THE SOVIET PLAYER MOVES ANY OR"
  205. 2030    PRINT "         ALL OF HIS UNITS"
  206. 2040    PRINT
  207. 2050    PRINT "STEP 2.  THE SOVIET PLAYER MAY ATTACK"
  208. 2060    PRINT "         ANY U.S. UNIT IN A HEX NEXT"
  209. 2070    PRINT "         TO A RED ARMY UNIT"
  210. 2080    PRINT
  211. 2090    PRINT "STEP 3.  THE U.S. PLAYER MOVES ANY OR"
  212. 2100    PRINT "         ALL OF HIS UNITS"
  213. 2110    PRINT
  214. 2120    PRINT "STEP 4.  THE U.S. PLAYER MAY ATTACK "
  215. 2130    PRINT "         ANY SOVIET UNIT IN A HEX NEXT"
  216. 2140    PRINT "         TO A U.S. ARMY UNIT"
  217. 2150    PRINT
  218. 2160    LOCATE 23,10
  219. 2170    PRINT "HIT SPACE TO CONTINUE"
  220. 2180    GOSUB 1220      'WAIT FOR A REPLY
  221. 2190 RETURN
  222. 2200 '
  223. 2210 '---------------------------------------------------------------------------
  224. 2220 'MOVEMENT RULES
  225. 2230    CLS
  226. 2240    PRINT "       MOVEMENT RULES"
  227. 2250    PRINT
  228. 2260    PRINT "  DURING YOUR MOVEMENT TURN YOU MAY"
  229. 2270    PRINT "MOVE ANY OR ALL OF YOUR UNITS, "
  230. 2280    PRINT "OR NONE OF YOUR UNITS."
  231. 2290    PRINT
  232. 2300    PRINT "  YOU CANNOT MOVE INTO A HEX OCCUPIED"
  233. 2310    PRINT "BY ONE OF YOUR OWN OR AN ENEMY UNIT."
  234. 2320    PRINT
  235. 2330    PRINT "  YOU MAY NOT MOVE OFF THE MAP."
  236. 2340    PRINT
  237. 2350    PRINT "  YOU MAY MOVE EACH UNIT 1 TO 4 HEXES."
  238. 2360    PRINT
  239. 2370    PRINT "  IF YOU MOVE INTO A HEX NEXT TO"
  240. 2380    PRINT "AN ENEMY UNIT, YOU MUST STOP THERE."
  241. 2390    PRINT
  242. 2400    PRINT "  MOVEMENT INTO A WOODED HEX COUNTS"
  243. 2410    PRINT "AS TWO HEXES."
  244. 2420    PRINT
  245. 2430    PRINT "  YOU CANNOT MOVE INTO A RIVER OR"
  246. 2440    PRINT "LAKE HEX."
  247. 2450    LOCATE 23,10
  248. 2460    PRINT "HIT SPACE TO CONTINUE"
  249. 2470    GOSUB 1220      'WAIT FOR REPLY
  250. 2480 ' CONTINUE WITH MOVEMENT RULES
  251. 2490    CLS
  252. 2500    PRINT "        HOW TO MOVE YOUR UNITS"
  253. 2510    PRINT
  254. 2520    PRINT "  DURING YOUR MOVEMENT TURN, THE "
  255. 2530    PRINT "COMPUTER WILL ALLOW YOU TO MOVE YOUR"
  256. 2540    PRINT "UNITS ONE AT A TIME.  IT WILL TURN"
  257. 2550    PRINT "THE UNIT TO BE MOVED WHITE."
  258. 2560    PRINT
  259. 2570    PRINT "  IF YOU DO NOT WANT TO MOVE THE UNIT"
  260. 2580    PRINT "HIT THE SPACE BAR."
  261. 2590    PRINT
  262. 2600    PRINT "  TO MOVE THE UNIT UP, HIT CURSOR UP."
  263. 2610    PRINT
  264. 2620    PRINT "  TO MOVE THE UNIT DOWN, HIT CURSOR"
  265. 2630    PRINT "DOWN."
  266. 2640    PRINT
  267. 2650    PRINT "  TO MOVE THE UNIT DIAGONALLY "
  268. 2660    PRINT "HIT THE CURSOR LEFT OR RIGHT, THEN"
  269. 2670    PRINT "CURSOR UP OR DOWN."
  270. 2680    LOCATE 23,10
  271. 2690    PRINT "HIT SPACE TO CONTINUE"
  272. 2700    GOSUB 1220      'WAIT FOR REPLY
  273. 2710 RETURN
  274. 2720 '
  275. 2730 '---------------------------------------------------------------------------
  276. 2740 'COMBAT RULES
  277. 2750    CLS
  278. 2760    PRINT "              COMBAT RULES"
  279. 2770    PRINT
  280. 2780    PRINT "  TO ATTACK AN ENEMY UNIT YOUR UNIT(S)"
  281. 2790    PRINT "MUST BE IN A HEX NEXT TO THE ENEMY UNIT."
  282. 2800    PRINT
  283. 2810    PRINT "  YOU NEVER HAVE TO ATTACK IF YOU DON'T"
  284. 2820    PRINT "WANT TO."
  285. 2830    PRINT
  286. 2840    PRINT "  YOU MAY ATTACK AN ENEMY UNIT WITH"
  287. 2850    PRINT "ONE OR MORE OF YOUR UNITS."
  288. 2860    PRINT
  289. 2870    PRINT "  EACH UNIT MAY ATTACK ONLY ONCE PER "
  290. 2880    PRINT "TURN."
  291. 2890    PRINT
  292. 2900    PRINT "  A DEFENDING UNIT IN A WOODED HEX "
  293. 2910    PRINT "OR A CITY HEX HAS DOUBLE STRENGTH"
  294. 2920    PRINT "AND IS MORE DIFFICULT TO ATTACK."
  295. 2930    LOCATE 23,10
  296. 2940    PRINT "HIT SPACE TO CONTINUE"
  297. 2950    GOSUB 1220      'WAIT FOR REPLY
  298. 2960 ' COMBAT RESULTS
  299. 2970    CLS
  300. 2980    PRINT "             COMBAT RESULTS"
  301. 2990    PRINT
  302. 3000    PRINT "  COMBAT RESULTS ARE DETERMINED BY THE "
  303. 3010    PRINT "NUMBER OF UNITS ATTACKING AND A DICE"
  304. 3020    PRINT "ROLL.  THE MORE UNITS THAT ATTACK AN"
  305. 3030    PRINT "ENEMY UNIT, THE BETTER YOUR CHANCES"
  306. 3040    PRINT "FOR A FAVORABLE RESULT."
  307. 3050    PRINT
  308. 3060    PRINT "  THE POSSIBLE RESULTS ARE:"
  309. 3070    PRINT "DEFENDER ELIMINATED - ENEMY UNIT"
  310. 3080    PRINT "DESTROYED"
  311. 3090    PRINT "DEFENDER RETREATS - ENEMY MUST RETREAT."
  312. 3100    PRINT "ATTACKER RETREATS - YOU MUST RETREAT"
  313. 3110    PRINT "ATTACKER ELIMINATED -YOUR UNIT IS"
  314. 3120    PRINT "      DESTROYED"
  315. 3130    PRINT
  316. 3140    PRINT "  IF UNIT MUST RETREAT IT CANNOT MOVE"
  317. 3150    PRINT "INTO A HEX NEXT TO AN ENEMY UNIT.  IF"
  318. 3160    PRINT "UNIT CAN'T RETREAT IT IS ELIMINATED."
  319. 3170    LOCATE 23,10
  320. 3180    PRINT "HIT SPACE TO CONTINUE"
  321. 3190    GOSUB 1220      'WAIT FOR REPLY
  322. 3200 ' HOW TO ATTACK
  323. 3210    CLS
  324. 3220    PRINT "             HOW TO ATTACK"
  325. 3230    PRINT
  326. 3240    PRINT "  DURING YOUR ATTACK TURN THE COMPUTER "
  327. 3250    PRINT "SELECTS EACH UNIT THAT CAN MAKE AN "
  328. 3260    PRINT "ATTACK AND TURNS IT WHITE. "
  329. 3270    PRINT
  330. 3280    PRINT "  IF YOU DON'T WANT THAT UNIT TO ATTACK"
  331. 3290    PRINT "HIT THE SPACE BAR."
  332. 3300    PRINT
  333. 3310    PRINT "  IF YOU WANT THE UNIT TO ATTACK USE"
  334. 3320    PRINT "THE CURSOR KEYS TO SHOW WHICH DIRECTION"
  335. 3330    PRINT "TO ATTACK."
  336. 3340    PRINT
  337. 3350    PRINT "  USE CURSOR UP TO ATTACK UP, CURSOR"
  338. 3360    PRINT "DOWN TO ATTACK DOWN AND TO ATTACK "
  339. 3370    PRINT "DIAGONALLY, HIT THE CURSOR RIGHT OR"
  340. 3380    PRINT "LEFT, THEN CURSOR UP OR DOWN."
  341. 3390    LOCATE 23,1
  342. 3400    PRINT "HIT SPACE TO CONTINUE"
  343. 3410    GOSUB 1220      'WAIT FOR REPLY
  344. 3420 'RETREATS
  345. 3430    CLS
  346. 3440    PRINT "               RETREATS"
  347. 3450    PRINT
  348. 3460    PRINT "  IF YOUR UNIT(S) MUST RETREAT YOU "
  349. 3470    PRINT "HAVE ONE CHANCE TO MOVE EACH UNIT "
  350. 3480    PRINT "OUT OF DANGER.  IF YOU MAKE AN "
  351. 3490    PRINT "ILLEGAL MOVE OR MOVE INTO A HEX"
  352. 3500    PRINT "NEXT TO AN ENEMY UNIT, YOUR "
  353. 3510    PRINT "UNIT IS ELIMINATED."
  354. 3520    PRINT
  355. 3530    PRINT "  THE FIRST ATTACKING UNIT WILL MOVE"
  356. 3540    PRINT "INTO THE HEX VACATED BY THE RETREATING"
  357. 3550    PRINT "UNIT."
  358. 3560    LOCATE 23,1
  359. 3570    PRINT "HIT SPACE TO CONTINUE"
  360. 3580    GOSUB 1220      'WAIT
  361. 3590 RETURN
  362. 3600 '
  363. 3610 '---------------------------------------------------------------------------
  364. 3620 'HOW GAME IS WON
  365. 3630    CLS
  366. 3640    PRINT  "          HOW THE GAME IS WON"
  367. 3650    PRINT
  368. 3660    PRINT "  THE GAME LASTS 8 GAME TURNS.  THE"
  369. 3670    PRINT "PLAYER WHO HAS FULFILLED HIS MISSION"
  370. 3680    PRINT "AT THE END OF 10 TURNS WINS."
  371. 3690    PRINT
  372. 3700    PRINT "  THE MISSION OF THE SOVIET RED"
  373. 3710    PRINT "ARMY IS TO OCCUPY AT LEAST TWO"
  374. 3720    PRINT "OF THE CITIES ON THE MAP."
  375. 3730    PRINT
  376. 3740    PRINT "  THE MISSION OF THE U.S. ARMY"
  377. 3750    PRINT "IS TO PREVENT THE RED ARMY FROM"
  378. 3760    PRINT "OCCUPING MORE THAN ONE CITY."
  379. 3770    LOCATE 23,1
  380. 3780    PRINT "HIT SPACE TO CONTINUE"
  381. 3790    GOSUB 1220      'WAIT FOR REPLY
  382. 3800 RETURN
  383. 3810 '
  384. 3820 '**************************************************************************
  385. 3830 'PLACE ARMY UNITS
  386. 3840    DIM ARMY.LOC(10,3)
  387. 3850 '   LOCATION OF EACH ARMY
  388. 3860 '   1 = RED ARMY
  389. 3870 '   2 = US ARMY
  390. 3880    LET MAX.ARMY = 10
  391. 3890    LET ARMY.LOC(1,1) = 11
  392. 3900    LET ARMY.LOC(1,2) = 1
  393. 3910    LET ARMY.LOC(1,3) = 1
  394. 3920    LET ARMY.LOC(2,1) = 12
  395. 3930    LET ARMY.LOC(2,2) = 1
  396. 3940    LET ARMY.LOC(2,3) = 1
  397. 3950    LET ARMY.LOC(3,1) = 12
  398. 3960    LET ARMY.LOC(3,2) = 2
  399. 3970    LET ARMY.LOC(3,3) = 1
  400. 3980    LET ARMY.LOC(4,1) = 11
  401. 3990    LET ARMY.LOC(4,2) = 7
  402. 4000    LET ARMY.LOC(4,3) = 1
  403. 4010    LET ARMY.LOC(5,1) = 12
  404. 4020    LET ARMY.LOC(5,2) = 6
  405. 4030    LET ARMY.LOC(5,3) = 1
  406. 4040    LET ARMY.LOC(6,1) = 12
  407. 4050    LET ARMY.LOC(6,2) = 7
  408. 4060    LET ARMY.LOC(6,3) = 1
  409. 4070    LET ARMY.LOC(7,1) = 3
  410. 4080    LET ARMY.LOC(7,2) = 8
  411. 4090    LET ARMY.LOC(7,3) = 2
  412. 4100    LET ARMY.LOC(8,1) = 3
  413. 4110    LET ARMY.LOC(8,2) = 2
  414. 4120    LET ARMY.LOC(8,3) = 2
  415. 4130    LET ARMY.LOC(9,1) = 4
  416. 4140    LET ARMY.LOC(9,2) = 3
  417. 4150    LET ARMY.LOC(9,3) = 2
  418. 4160    LET ARMY.LOC(10,1) = 4
  419. 4170    LET ARMY.LOC(10,2) = 5
  420. 4180    LET ARMY.LOC(10,3) = 2
  421. 4190    FOR X = 1 TO MAX.ARMY
  422. 4200      IF ARMY.LOC(X,1) = 0 THEN GOTO 4260
  423. 4210      IF ARMY.LOC(X,3) = 1 THEN LET  P.COLOR = RED                                      ELSE LET P.COLOR = BLUE
  424. 4220      LET H.CORD = ARMY.LOC(X,1)
  425. 4230      LET V.CORD  = ARMY.LOC(X,2)
  426. 4240      IF P.COLOR = BLUE                                                                 THEN LET TERRAIN$(H.CORD,V.CORD) = TERRAIN$(H.CORD,V.CORD) + "U"                ELSE LET TERRAIN$(H.CORD,V.CORD) = TERRAIN$(H.CORD,V.CORD) + "R"
  427. 4250      GOSUB 8280    'PAINT HEX
  428. 4260    NEXT X
  429. 4270 RETURN
  430. 4280 '
  431. 4290 '**************************************************************************
  432. 4300 'MOVEMENT PHASE
  433. 4310 '  LH = OLD HORIZONAL HEX CO-ORDINATE
  434. 4320 '  LV = OLD VERTICAL HEX CO-ORDINATE
  435. 4330 '  NEWH = NEW HORIZONAL HEX CO-ORDINATE
  436. 4340 '  NEWV = NEW VERTICAL HEX CO-ORDINATE
  437. 4350    IF ARMY$ = "R" THEN LET CLR = RED:                                                  LET ARMY = 1
  438. 4360    IF ARMY$ = "U" THEN LET CLR = BLUE:                                                  LET ARMY = 2
  439. 4370    LOCATE 25,1
  440. 4380    IF ARMY$ = "R" THEN LET MSG$ = "RED ARMY MOVES "                                      ELSE LET MSG$ = "US ARMY MOVES     "
  441. 4390    GOSUB 8400
  442. 4400    FOR X = 1  TO MAX.ARMY
  443. 4410      IF ARMY.LOC(X,1) = 0 THEN GOTO 4500
  444. 4420      IF ARMY.LOC(X,3) <> ARMY THEN GOTO 4500
  445. 4430      LET LH = ARMY.LOC(X,1)
  446. 4440      LET LV = ARMY.LOC(X,2)
  447. 4450    LET H.CORD = LH
  448. 4460    LET V.CORD = LV
  449. 4470    LET P.COLOR = WHITE
  450. 4480      GOSUB 8280                     'PAINT HEX WHITE
  451. 4490      GOSUB 4540    'GET MOVE
  452. 4500    NEXT X
  453. 4510 RETURN
  454. 4520 '
  455. 4530 '---------------------------------------------------------------------------
  456. 4540 'GET MOVE
  457. 4550    LET MOVE = 1
  458. 4555    DEF SEG=0: POKE 1050,PEEK(1052) 'CLEAR KEYBOARD BUFFER
  459. 4560 ' GET CURSOR
  460. 4570 '  DEF SEG=0: POKE 1050,PEEK(1052) 'CLEAR KEYBOARD BUFFER
  461. 4580    LET REPLY$ = INKEY$
  462. 4590    IF REPLY$ = "" THEN GOTO 4580
  463. 4600    IF REPLY$ = " " THEN LET P.COLOR = CLR: GOSUB 8280:                                   GOTO 5360  'NO MORE MOVES
  464. 4610    IF LEFT$(REPLY$,1) <> CHR$(0) THEN BEEP:                                          GOTO 4580
  465. 4620    LET REPLY$ = RIGHT$(REPLY$,1)
  466. 4630    IF REPLY$ = CHR$(72) THEN LET NEWV = LV - 1:                                        LET NEWH = LH:                                                                  GOTO 4800
  467. 4640    IF REPLY$ = CHR$(80) THEN LET NEWV = LV + 1:                                        LET NEWH = LH:                                                                  GOTO 4800
  468. 4650    IF REPLY$ = CHR$(77) THEN LET NEWH = LH + 1:                                        LET NEWV = LV:                                                                  GOTO 4690
  469. 4660    IF REPLY$ <> CHR$(75) THEN BEEP:                                                  GOTO 4580
  470. 4670    LET NEWH = LH - 1
  471. 4680    LET NEWV = LV
  472. 4690 ' GET 2ND PART OF COMMAND
  473. 4700    LET REPLY$ = INKEY$
  474. 4710    IF REPLY$ = "" THEN GOTO 4690
  475. 4720    LET REPLY$ = RIGHT$(REPLY$,1)
  476. 4730    IF REPLY$ = CHR$(80) THEN GOTO 4750
  477. 4740    IF REPLY$ <> CHR$(72) THEN BEEP:                                                  GOTO 4580
  478. 4750 '
  479. 4760    IF COL$ = "ODD" AND REPLY$ = CHR$(72)                                              THEN LET NEWV = LV  - 1
  480. 4770    IF COL$ = "ODD" AND REPLY$ = CHR$(80)                                              THEN LET NEWV = LV
  481. 4780    IF COL$ = "EVEN" AND REPLY$ = CHR$(72)                                              THEN LET NEWV = LV
  482. 4790    IF COL$ = "EVEN" AND REPLY$ = CHR$(80)                                              THEN LET NEWV = LV + 1
  483. 4800 'CHECK FOR LEGAL MOVE
  484. 4810    IF NEWH < 1 THEN GOTO  4930     'ILLEGAL
  485. 4820    IF NEWH > 12 THEN GOTO 4930
  486. 4830    IF NEWV < 1 THEN GOTO 4930
  487. 4840    IF NEWV > 8 THEN GOTO 4930
  488. 4850    IF LEN(TERRAIN$(NEWH,NEWV)) = 2 THEN GOTO 4930 'HEX IS OCCUPIED
  489. 4860    IF TERRAIN$(NEWH,NEWV) = "O" THEN GOTO 4930 'OFF BOARD
  490. 4870    IF TERRAIN$(NEWH,NEWV) = "R" THEN GOTO 4930
  491. 4880    IF TERRAIN$(NEWH,NEWV) = "L" THEN GOTO 4930
  492. 4890    IF TERRAIN$(NEWH,NEWV) = "U" THEN GOTO 4930
  493. 4900    IF TERRAIN$(NEWH,NEWV) = "W" AND MOVE > 3 THEN GOTO 4930
  494. 4910    IF TERRAIN$(NEWH,NEWV) = "W" THEN LET MOVE = MOVE + 1 'EXTRA MOVE POINT FOR WOODS
  495. 4920    GOTO 4980       'MAKE MOVE
  496. 4930 'ILLEGAL MOVE
  497. 4940    BEEP
  498. 4950    LET MSG$ = "ILLEGAL MOVE"
  499. 4960    GOSUB 8400
  500. 4965    DEF SEG=0: POKE 1050,PEEK(1052) 'CLEAR KEYBOARD BUFFER
  501. 4970    GOTO 4560
  502. 4980 ' MOVE UNIT
  503. 4990    LET MSG$ = " "
  504. 5000    GOSUB 8400
  505. 5010    LET H.CORD = NEWH
  506. 5020    LET V.CORD = NEWV
  507. 5030    LET P.COLOR = CLR
  508. 5040    GOSUB 8280     'PAINT NEW LOC
  509. 5050      IF LEN(TERRAIN$(LH,LV)) = 1 THEN                                                  LET TERRAIN$(LH,LV) = "" ELSE                                                   LET TERRAIN$(LH,LV) = LEFT$(TERRAIN$(LH,LV),1)
  510. 5060    LET H.CORD = LH
  511. 5070    LET V.CORD = LV
  512. 5080    LET P.COLOR = GRAY
  513. 5090      IF TERRAIN$(LH,LV) = "W" THEN                                                     LET P.COLOR = GREEN
  514. 5100      IF TERRAIN$(LH,LV) = "C" THEN                                                     LET P.COLOR = BROWN
  515. 5110    GOSUB 8280     'PAINT NEW LOC
  516. 5120      LET ARMY.LOC(X,1) = NEWH
  517. 5130      LET ARMY.LOC(X,2) = NEWV
  518. 5140      LET TERRAIN$(LH,LV) = LEFT$(TERRAIN$(LH,LV),1)
  519. 5150      LET TERRAIN$(NEWH,NEWV) = TERRAIN$(NEWH,NEWV) + ARMY$
  520. 5160    LET MOVE = MOVE + 1
  521. 5170    IF MOVE > 4 THEN GOTO 5360
  522. 5180 ' CHECK IF MOVE IS NEXT TO ENEMY UNIT
  523. 5190    IF ARMY$ = "R" THEN LET ENEMY$ = "U"                                              ELSE LET ENEMY$ = "R"
  524. 5200    IF ((NEWH/2) - INT(NEWH/2)) < .5 THEN                                                 LET COL$ = "EVEN" ELSE                                                          LET COL$ = "ODD"
  525. 5210    IF RIGHT$(TERRAIN$(NEWH+1,NEWV),1) = ENEMY$ THEN GOTO 5360
  526. 5220    IF RIGHT$(TERRAIN$(NEWH-1,NEWV),1) = ENEMY$ THEN GOTO 5360
  527. 5230    IF RIGHT$(TERRAIN$(NEWH,NEWV+1),1) = ENEMY$ THEN GOTO 5360
  528. 5240    IF RIGHT$(TERRAIN$(NEWH,NEWV-1),1) = ENEMY$ THEN GOTO 5360
  529. 5250    IF (COL$ = "EVEN") AND (RIGHT$(TERRAIN$(NEWH+1,NEWV+1),1)) = ENEMY$               THEN GOTO 5360
  530. 5260    IF (COL$ = "ODD") AND (RIGHT$(TERRAIN$(NEWH+1,NEWV-1),1)) = ENEMY$               THEN GOTO 5360
  531. 5270    IF (COL$ = "EVEN") AND (RIGHT$(TERRAIN$(NEWH-1,NEWV+1),1)) = ENEMY$               THEN GOTO 5360
  532. 5280    IF (COL$ = "ODD") AND (RIGHT$(TERRAIN$(NEWH-1,NEWV-1),1)) = ENEMY$               THEN GOTO 5360
  533. 5290    LET LH = NEWH
  534. 5300    LET LV = NEWV
  535. 5310    LET H.CORD = LH
  536. 5320    LET V.CORD = LV
  537. 5330    LET P.COLOR = WHITE
  538. 5340    GOSUB 8280      'PAINT HEX WHITE
  539. 5350    GOTO 4560
  540. 5360 'END OF MOVE TURN
  541. 5370 RETURN
  542. 5380 '
  543. 5390 '---------------------------------------------------------------------------
  544. 5400 ' FIND WINNER
  545. 5410    LET SCORE = 0
  546. 5420    IF TERRAIN$(1,7) = "CR" THEN LET SCORE = SCORE + 1
  547. 5430    IF TERRAIN$(3,2) = "CR" THEN LET SCORE = SCORE + 1
  548. 5440    IF TERRAIN$(4,5) = "CR" THEN LET SCORE = SCORE + 1
  549. 5450    LOCATE 23,1
  550. 5460    IF SCORE > 1 THEN LET MSG$ = "RED ARMY WINS!     "                                ELSE LET MSG$ = "US ARMY WINS!     "
  551. 5470    GOSUB 8400      'PRINT MESSAGE
  552. 5480    GOSUB 1220      'WAIT FOR REPLY
  553. 5490 RETURN
  554. 5500 '
  555. 5510 '---------------------------------------------------------------------------
  556. 5520 'ATTACK PHASE
  557. 5530 'FIND EACH ARMY THAT CAN ATTACK
  558. 5540    ERASE ATTACK
  559. 5550    DIM ATTACK(10,7)
  560. 5560    IF ARMY$ = "U" THEN LET CLR = BLUE:                                               LET ARMY = 2
  561. 5570    IF ARMY$ = "R" THEN LET CLR = RED:                                                LET ARMY = 1
  562. 5580    IF ARMY$ = "R" THEN LET MSG$ = "RED ARMY ATTACKS "                                 ELSE LET MSG$ =  "US ARMY ATTACKS "
  563. 5590    GOSUB 8400      'PRINT MESSAGE
  564. 5600    FOR X = 1  TO MAX.ARMY
  565. 5610      IF ARMY.LOC(X,1) = 0 THEN GOTO 5670
  566. 5620      IF ARMY.LOC(X,3) <> ARMY THEN GOTO 5670
  567. 5630      LET LH = ARMY.LOC(X,1)
  568. 5640      LET LV = ARMY.LOC(X,2)
  569. 5650      GOSUB 5730    'CHECK IF ATTACK POSSIBLE
  570. 5660      IF ATTACK$ = "YES" THEN GOSUB 5900    'GET MOVEMENT FOR ATTACK
  571. 5670    NEXT X
  572. 5680    IF ATTACK(1,1) = 0 THEN GOTO 5700       'NO ATTACK THIS TURN
  573. 5690    GOSUB 6510      'GET RESULTS OF ATTACK
  574. 5700 RETURN
  575. 5710 '
  576. 5720 '---------------------------------------------------------------------------
  577. 5730 'CHECK IF UNIT CAN MAKE AN ATTACK
  578. 5740    LET ATTACK$ = "NO"
  579. 5750    IF ARMY$ = "R" THEN LET ENEMY$ = "U"                                              ELSE LET ENEMY$ = "R"
  580. 5760    IF ((LH/2) - INT(LH/2)) < .5 THEN                                                 LET COL$ = "EVEN" ELSE                                                          LET COL$ = "ODD"
  581. 5770    IF RIGHT$(TERRAIN$(LH+1,LV),1) = ENEMY$ THEN GOTO 5860
  582. 5780    IF RIGHT$(TERRAIN$(LH-1,LV),1) = ENEMY$ THEN GOTO 5860
  583. 5790    IF RIGHT$(TERRAIN$(LH,LV+1),1) = ENEMY$ THEN GOTO 5860
  584. 5800    IF RIGHT$(TERRAIN$(LH,LV-1),1) = ENEMY$ THEN GOTO 5860
  585. 5810    IF (COL$ = "EVEN") AND (RIGHT$(TERRAIN$(LH+1,LV+1),1)) = ENEMY$                   THEN GOTO 5860
  586. 5820    IF (COL$ = "ODD") AND (RIGHT$(TERRAIN$(LH+1,LV-1),1)) = ENEMY$                    THEN GOTO 5860
  587. 5830    IF (COL$ = "EVEN") AND (RIGHT$(TERRAIN$(LH-1,LV+1),1)) = ENEMY$                   THEN GOTO 5860
  588. 5840    IF (COL$ = "ODD") AND (RIGHT$(TERRAIN$(LH-1,LV-1),1)) = ENEMY$                    THEN GOTO 5860
  589. 5850    GOTO 5880       'NO ATTACK POSSIBLE
  590. 5860 ' ATTACK IS POSSIBLE
  591. 5870    LET ATTACK$= "YES"
  592. 5880 RETURN
  593. 5890 '
  594. 5900 'GET MOVEMENT FOR ATTACK
  595. 5910 ' GET CURSOR
  596. 5920    LET H.CORD = LH
  597. 5930    LET V.CORD = LV
  598. 5940    LET P.COLOR = WHITE
  599. 5950    GOSUB 8280      'PAINT HEX WHITE
  600. 5960    DEF SEG=0: POKE 1050,PEEK(1052) 'CLEAR KEYBOARD BUFFER
  601. 5970    LET REPLY$ = INKEY$
  602. 5980    IF REPLY$ = "" THEN GOTO 5970
  603. 5990    IF REPLY$ = " " THEN LET P.COLOR = CLR: GOSUB 8280:                                GOTO 6480  'NO ATTACK
  604. 6000    IF LEFT$(REPLY$,1) <> CHR$(0) THEN BEEP:                                          GOTO 5970
  605. 6010    LET REPLY$ = RIGHT$(REPLY$,1)
  606. 6020    IF REPLY$ = CHR$(72) THEN LET NEWV = LV - 1:                                        LET NEWH = LH:                                                                  GOTO 6190
  607. 6030    IF REPLY$ = CHR$(80) THEN LET NEWV = LV + 1:                                        LET NEWH = LH:                                                                  GOTO 6190
  608. 6040    IF REPLY$ = CHR$(77) THEN LET NEWH = LH + 1:                                        LET NEWV = LV:                                                                  GOTO 6080
  609. 6050    IF REPLY$ <> CHR$(75) THEN BEEP:                                                  GOTO 5970
  610. 6060    LET NEWH = LH - 1
  611. 6070    LET NEWV = LV
  612. 6080 ' GET 2ND PART OF COMMAND
  613. 6090    LET REPLY$ = INKEY$
  614. 6100    IF REPLY$ = "" THEN GOTO 6080
  615. 6110    LET REPLY$ = RIGHT$(REPLY$,1)
  616. 6120    IF REPLY$ = CHR$(80) THEN GOTO 6140
  617. 6130    IF REPLY$ <> CHR$(72) THEN BEEP:                                                  GOTO 6070
  618. 6140 '
  619. 6150    IF COL$ = "ODD" AND REPLY$ = CHR$(72)                                              THEN LET NEWV = LV  - 1
  620. 6160    IF COL$ = "ODD" AND REPLY$ = CHR$(80)                                              THEN LET NEWV = LV
  621. 6170    IF COL$ = "EVEN" AND REPLY$ = CHR$(72)                                              THEN LET NEWV = LV
  622. 6180    IF COL$ = "EVEN" AND REPLY$ = CHR$(80)                                              THEN LET NEWV = LV + 1
  623. 6190 'CHECK LEGAL MOVE
  624. 6200    IF NEWH < 1 THEN GOTO  6270     'ILLEGAL
  625. 6210    IF NEWH > 12 THEN GOTO 6270
  626. 6220    IF NEWV < 1 THEN GOTO 6270
  627. 6230    IF NEWV > 8 THEN GOTO 6270
  628. 6240    IF TERRAIN$(NEWH,NEWV) = "O" THEN GOTO 6270 'OFF BOARD
  629. 6250    IF RIGHT$(TERRAIN$(NEWH,NEWV),1) <> ENEMY$ THEN GOTO 6270 'NO ENEMY UNIT
  630. 6260    GOTO 6320       'RECORD ATTACK
  631. 6270 'ILLEGAL MOVE
  632. 6280    BEEP
  633. 6290    LET MSG$ =  "ILLEGAL MOVE"
  634. 6300    GOSUB 8400      'PRINT MSG
  635. 6310    GOTO 5910
  636. 6320 'RECORD ATTACK
  637. 6330    LET MSG$ = " "
  638. 6340    GOSUB 8400  'PRINT MSG
  639. 6350    LET P.COLOR = CLR
  640. 6360    GOSUB 8280      'RESTORE COLOR OF UNIT
  641. 6370    FOR Z = 1 TO MAX.ARMY   'FIND DEFENDER
  642. 6380      IF ARMY.LOC(Z,1) = NEWH AND ARMY.LOC(Z,2) = NEWV                                  THEN LET DEFENDER = Z:                                                          GOTO 6400
  643. 6390    NEXT Z
  644. 6400    FOR Z = 1 TO MAX.ARMY   'FIND DEFENDER IN ATTACK TABLE
  645. 6410      IF ATTACK(Z,1) = 0                                                                THEN LET ATTACK(Z,1) = DEFENDER:                                                GOTO 6440
  646. 6420      IF ATTACK(Z,1) = DEFENDER THEN GOTO 6440
  647. 6430    NEXT Z
  648. 6440    FOR Y = 2 TO 7
  649. 6450      IF ATTACK(Z,Y) = 0 THEN                                                            LET ATTACK(Z,Y) = X:                                                            GOTO 6470
  650. 6460    NEXT Y
  651. 6470 '  ATTACK IS RECORDED
  652. 6480 RETURN
  653. 6490 '
  654. 6500 '---------------------------------------------------------------------------
  655. 6510 'GET RESULTS OF ATTACK
  656. 6520    RANDOMIZE TIMER
  657. 6530    FOR Z = 1 TO 10
  658. 6540      IF ATTACK(Z,1) = 0 THEN GOTO 6570     'END OF ATTACKS
  659. 6550      GOSUB 6600    'ATTACK
  660. 6560    NEXT Z
  661. 6570 RETURN
  662. 6580 '
  663. 6590 '---------------------------------------------------------------------------
  664. 6600 'ATTACK
  665. 6610    LET ATTACKERS = 0
  666. 6620    FOR Y = 2 TO 7
  667. 6630      IF ATTACK(Z,Y) = 0 THEN GOTO 6660
  668. 6640      LET ATTACKERS = ATTACKERS + 1
  669. 6650    NEXT Y
  670. 6660    IF LEFT$(TERRAIN$(ARMY.LOC(ATTACK(Z,1),1),ARMY.LOC(ATTACK(Z,1),2)),1) = "W"                           THEN LET ATTACKERS = ATTACKERS - 1
  671. 6670    IF LEFT$(TERRAIN$(ARMY.LOC(ATTACK(Z,1),1),ARMY.LOC(ATTACK(Z,1),2)),1) = "C"                           THEN LET ATTACKERS = ATTACKERS - 1
  672. 6680    LET A = 2
  673. 6690    LET RESULT = INT((RND*6)+1) - ATTACKERS
  674. 6700    IF RESULT =< -2 THEN GOSUB 6770: GOTO 6740   'DEFENDER ELIMINATED
  675. 6710    IF RESULT <= 1 THEN GOSUB 6920: GOTO 6740    'DEFENDER RETREATS
  676. 6720    IF RESULT < 5 THEN GOSUB 7020: GOTO  6740    'ATTACKER RETREATS
  677. 6730    IF RESULT => 5 THEN GOSUB 7140: GOTO 6740    'ATTACKER ELIMINATED
  678. 6740 RETURN
  679. 6750 '
  680. 6760 '---------------------------------------------------------------------------
  681. 6770 'DEFENDER ELIMINATED
  682. 6780    LET LH = ARMY.LOC(ATTACK(Z,1),1)
  683. 6790    LET LV = ARMY.LOC(ATTACK(Z,1),2)
  684. 6800    LET ARMY.LOC(ATTACK(Z,1),1) = 0
  685. 6810    IF LEN(TERRAIN$(LH,LV)) = 1                                                       THEN LET TERRAIN$(LH,LV) = ""                                                   ELSE LET TERRAIN$(LH,LV) = LEFT$(TERRAIN$(LH,LV),1)
  686. 6820    LET H.CORD = LH
  687. 6830    LET V.CORD = LV
  688. 6840    LET P.COLOR = GRAY
  689. 6850    IF TERRAIN$(LH,LV) = "W" THEN                                                     LET P.COLOR = GREEN
  690. 6860    IF TERRAIN$(LH,LV) = "C" THEN                                                     LET P.COLOR = BROWN
  691. 6870    GOSUB 8280      'PRINT LOC
  692. 6880    GOSUB 8040      'MOVE ATTACKER INTO HEX
  693. 6890 RETURN
  694. 6900 '
  695. 6910 '---------------------------------------------------------------------------
  696. 6920 'DEFENDER RETREATS
  697. 6930    LET A = 1
  698. 6940    IF ARMY$ = "R"                                                                    THEN LET R.ARMY$ = "U"                                                          ELSE LET R.ARMY$ = "R"
  699. 6950    LET LH = ARMY.LOC(ATTACK(Z,1),1)
  700. 6960    LET LV = ARMY.LOC(ATTACK(Z,1),2)
  701. 6970    LET DEFENDER$ = "YES"
  702. 6980    GOSUB 7280      'GET RETREAT MOVE
  703. 6990 RETURN
  704. 7000 '
  705. 7010 '---------------------------------------------------------------------------
  706. 7020 'ATTACKER RETREATS
  707. 7030    LET DEFENDER$ = "NO"
  708. 7040    LET R.ARMY$ = ARMY$
  709. 7050    FOR A = 2 TO 7
  710. 7060      IF ATTACK(Z,A) = 0 THEN GOTO 7110
  711. 7070      LET LH = ARMY.LOC(ATTACK(Z,A),1)
  712. 7080      LET LV = ARMY.LOC(ATTACK(Z,A),2)
  713. 7090      GOSUB 7280      'GET RETREAT MOVE
  714. 7100    NEXT A
  715. 7110 RETURN
  716. 7120 '
  717. 7130 '---------------------------------------------------------------------------
  718. 7140 'ATTACKER ELIMINATED
  719. 7150    LET LH = ARMY.LOC(ATTACK(Z,A),1)
  720. 7160    LET LV = ARMY.LOC(ATTACK(Z,A),2)
  721. 7170    LET ARMY.LOC(ATTACK(Z,A),1) = 0
  722. 7180    IF LEN(TERRAIN$(LH,LV)) = 1                                                       THEN LET TERRAIN$(LH,LV) = ""                                                   ELSE LET TERRAIN$(LH,LV) = LEFT$(TERRAIN$(LH,LV),1)
  723. 7190    LET V.CORD = LV
  724. 7200    LET H.CORD = LH
  725. 7210    LET P.COLOR = GRAY
  726. 7220      IF TERRAIN$(LH,LV) = "W" THEN                                                     LET P.COLOR = GREEN
  727. 7230      IF TERRAIN$(LH,LV) = "C" THEN                                                     LET P.COLOR = BROWN
  728. 7240    GOSUB 8280      'PAINT HEX
  729. 7250 RETURN
  730. 7260 '
  731. 7270 '---------------------------------------------------------------------------
  732. 7280 'GET RETREAT MOVE
  733. 7290    IF R.ARMY$ = "U"                                                                  THEN LET R.ENEMY$ = "R"                                                         ELSE LET R.ENEMY$ = "U"
  734. 7300    IF R.ARMY$ = "R" THEN LET MSG$ = "RED ARMY RETREATS "                             ELSE LET MSG$ = "US ARMY RETREATS "
  735. 7310    GOSUB 8400      'PRINT MSG
  736. 7320    LET V.CORD = LV
  737. 7330    LET H.CORD = LH
  738. 7340    LET P.COLOR = WHITE
  739. 7350    GOSUB 8280      'PRINT HEX WHITE
  740. 7360    DEF SEG=0: POKE 1050,PEEK(1052) 'CLEAR KEYBOARD BUFFER
  741. 7370    LET REPLY$ = INKEY$
  742. 7380    IF REPLY$ = "" THEN GOTO 7370
  743. 7390    IF REPLY$ = " " THEN GOTO 7980   'UNIT ELIMINATED
  744. 7400    IF LEFT$(REPLY$,1) <> CHR$(0) THEN BEEP:                                          GOTO 7360
  745. 7410    LET REPLY$ = RIGHT$(REPLY$,1)
  746. 7420    IF REPLY$ = CHR$(72) THEN LET NEWV = LV - 1:                                        LET NEWH = LH:                                                                  GOTO 7590
  747. 7430    IF REPLY$ = CHR$(80) THEN LET NEWV = LV + 1:                                        LET NEWH = LH:                                                                  GOTO 7590
  748. 7440    IF REPLY$ = CHR$(77) THEN LET NEWH = LH + 1:                                        LET NEWV = LV:                                                                  GOTO 7480
  749. 7450    IF REPLY$ <> CHR$(75) THEN BEEP:                                                  GOTO 7360
  750. 7460    LET NEWH = LH - 1
  751. 7470    LET NEWV = LV
  752. 7480 ' GET 2ND PART OF COMMAND
  753. 7490    LET REPLY$ = INKEY$
  754. 7500    IF REPLY$ = "" THEN GOTO 7490
  755. 7510    LET REPLY$ = RIGHT$(REPLY$,1)
  756. 7520    IF REPLY$ = CHR$(80) THEN GOTO 7540
  757. 7530    IF REPLY$ <> CHR$(72) THEN BEEP:                                                  GOTO 7360
  758. 7540 '
  759. 7550    IF COL$ = "ODD" AND REPLY$ = CHR$(72)                                              THEN LET NEWV = LV  - 1
  760. 7560    IF COL$ = "ODD" AND REPLY$ = CHR$(80)                                              THEN LET NEWV = LV
  761. 7570    IF COL$ = "EVEN" AND REPLY$ = CHR$(72)                                              THEN LET NEWV = LV
  762. 7580    IF COL$ = "EVEN" AND REPLY$ = CHR$(80)                                              THEN LET NEWV = LV + 1
  763. 7590 'CHECK LEGAL MOVE
  764. 7600    IF NEWH < 1 THEN GOTO  7980     'ILLEGAL
  765. 7610    IF NEWH > 12 THEN GOTO 7980
  766. 7620    IF NEWV < 1 THEN GOTO 7980
  767. 7630    IF NEWV > 8 THEN GOTO 7980
  768. 7640    IF LEN(TERRAIN$(NEWH,NEWV)) = 2 THEN GOTO 7980 'HEX IS OCCUPIED
  769. 7650    IF TERRAIN$(NEWH,NEWV) = "O" THEN GOTO 7980 'OFF BOARD
  770. 7660    IF TERRAIN$(NEWH,NEWV) = "R" THEN GOTO 7980
  771. 7670    IF TERRAIN$(NEWH,NEWV) = "L" THEN GOTO 7980
  772. 7680    IF TERRAIN$(NEWH,NEWV) = "U" THEN GOTO 7980
  773. 7690 ' CHECK IF MOVE IS NEXT TO ENEMY UNIT
  774. 7700    IF ((NEWH/2) - INT(NEWH/2)) < .5 THEN                                                 LET COL$ = "EVEN" ELSE                                                          LET COL$ = "ODD"
  775. 7710    IF RIGHT$(TERRAIN$(NEWH+1,NEWV),1) = R.ENEMY$ THEN GOTO 7980
  776. 7720    IF RIGHT$(TERRAIN$(NEWH-1,NEWV),1) = R.ENEMY$ THEN GOTO 7980
  777. 7730    IF RIGHT$(TERRAIN$(NEWH,NEWV+1),1) = R.ENEMY$ THEN GOTO 7980
  778. 7740    IF RIGHT$(TERRAIN$(NEWH,NEWV-1),1) = R.ENEMY$ THEN GOTO 7980
  779. 7750    IF (COL$ = "EVEN") AND (RIGHT$(TERRAIN$(NEWH+1,NEWV+1),1)) = R.ENEMY$               THEN GOTO 7980
  780. 7760    IF (COL$ = "ODD") AND (RIGHT$(TERRAIN$(NEWH+1,NEWV-1),1)) = R.ENEMY$               THEN GOTO 7980
  781. 7770    IF (COL$ = "EVEN") AND (RIGHT$(TERRAIN$(NEWH-1,NEWV+1),1)) = R.ENEMY$               THEN GOTO 7980
  782. 7780    IF (COL$ = "ODD") AND (RIGHT$(TERRAIN$(NEWH-1,NEWV-1),1)) = R.ENEMY$                 THEN GOTO 7980
  783. 7790 ' MOVE RETREATING UNIT
  784. 7800    IF R.ARMY$ = "R"                                                                  THEN LET CLR = RED                                                              ELSE LET CLR = BLUE
  785. 7810    LET H.CORD = NEWH
  786. 7820    LET V.CORD = NEWV
  787. 7830    LET P.COLOR = CLR
  788. 7840    GOSUB 8280      'PAINT NEW LOC
  789. 7850      IF LEN(TERRAIN$(LH,LV)) = 1 THEN                                                  LET TERRAIN$(LH,LV) = "" ELSE                                                   LET TERRAIN$(LH,LV) = LEFT$(TERRAIN$(LH,LV),1)
  790. 7860    LET H.CORD = LH
  791. 7870    LET V.CORD = LV
  792. 7880    LET P.COLOR = GRAY
  793. 7890      IF TERRAIN$(LH,LV) = "W" THEN                                                     LET P.COLOR = GREEN
  794. 7900      IF TERRAIN$(LH,LV) = "C" THEN                                                     LET P.COLOR = BROWN
  795. 7910    GOSUB 8280      'PAINT OLD HEX
  796. 7920      LET ARMY.LOC(ATTACK(Z,A),1) = NEWH
  797. 7930      LET ARMY.LOC(ATTACK(Z,A),2) = NEWV
  798. 7940      LET TERRAIN$(NEWH,NEWV) = TERRAIN$(NEWH,NEWV) + R.ARMY$
  799. 7950    IF DEFENDER$ = "YES" THEN GOSUB 8040      'MOVE ATTACKER INTO HEX
  800. 7960    GOTO 8010      'END OF RETREAT
  801. 7970 '
  802. 7980 'RETREATING UNIT IS ELIMINATED
  803. 7990    IF DEFENDER$ = "YES"                                                              THEN GOSUB 6770                                                                 ELSE GOSUB 7140
  804. 8000    GOTO 8010      'END OF RETREAT
  805. 8010 RETURN
  806. 8020 '
  807. 8030 '---------------------------------------------------------------------------
  808. 8040 ' MOVE ATTACKER INTO EMPTY HEX
  809. 8050    LET NEWH = LH
  810. 8060    LET NEWV = LV
  811. 8070    LET LH = ARMY.LOC(ATTACK(Z,2),1)
  812. 8080    LET LV = ARMY.LOC(ATTACK(Z,2),2)
  813. 8090    IF ARMY$ = "R"                                                                    THEN LET CLR = RED                                                              ELSE LET CLR = BLUE
  814. 8110    LET V.CORD = NEWV
  815. 8120    LET H.CORD = NEWH
  816. 8130    LET P.COLOR = CLR
  817. 8140    GOSUB 8280      'PAINT NEW HEX
  818. 8150      IF LEN(TERRAIN$(LH,LV)) = 1 THEN                                                  LET TERRAIN$(LH,LV) = "" ELSE                                                   LET TERRAIN$(LH,LV) = LEFT$(TERRAIN$(LH,LV),1)
  819. 8160    LET V.CORD = LV
  820. 8170    LET H.CORD = LH
  821. 8180    LET P.COLOR = GRAY
  822. 8190      IF TERRAIN$(LH,LV) = "C" THEN                                                     LET P.COLOR = BROWN
  823. 8200      IF TERRAIN$(LH,LV) = "W" THEN                                                     LET P.COLOR = GREEN
  824. 8210    GOSUB 8280      'PAINT OLD HEX
  825. 8220      LET ARMY.LOC(ATTACK(Z,2),1) = NEWH
  826. 8230      LET ARMY.LOC(ATTACK(Z,2),2) = NEWV
  827. 8240      LET TERRAIN$(LH,LV) = LEFT$(TERRAIN$(LH,LV),1)
  828. 8250      LET TERRAIN$(NEWH,NEWV) = TERRAIN$(NEWH,NEWV) + ARMY$
  829. 8260 RETURN
  830. 8270 '
  831. 8280 'PAINT A HEX
  832. 8290    LET V.POINT = ((V.CORD - 1) * 24) + 14
  833. 8300    IF ((H.CORD/2) - INT(H.CORD/2)) < .5                                              THEN LET COL$ = "EVEN"                                                          ELSE LET COL$ = "ODD"
  834. 8310    IF COL$ = "ODD"                                                                  THEN LET H.POINT = 25 + ((H.CORD -1) * 24)                                      ELSE LET H.POINT = 19 + ((H.CORD -1) * 24)
  835. 8320    LET H.COL = 3 + ((H.CORD-1)*3)
  836. 8330    IF COL$ = "ODD"                                                                   THEN LET V.COL = 2 + ((V.CORD-1)*3)                                             ELSE LET V.COL = 4 + ((V.CORD-1)*3)
  837. 8340    LOCATE V.COL,H.COL
  838. 8350    IF P.COLOR = BROWN                                                                THEN PRINT "C";
  839. 8360    IF P.COLOR = GREEN                                                                THEN PRINT "W";
  840. 8370    PAINT (H.POINT,V.POINT),P.COLOR,7
  841. 8380 RETURN
  842. 8390 '
  843. 8400 'PRINT A MESSAGE
  844. 8410    FOR CX = 1 TO LEN(MSG$)
  845. 8420      LOCATE CX,39
  846. 8430      PRINT MID$(MSG$,CX,1);
  847. 8440    NEXT CX
  848. 8450    FOR CX = CX TO 22
  849. 8460      LOCATE CX,39
  850. 8470      PRINT " ";
  851. 8480    NEXT CX
  852. 8490 RETURN
  853. 8500 '
  854. 8600 'F1 TRAP
  855. 8610    CH=1
  856. 8620    CV=2
  857. 8630    FOR C = 1 TO 8
  858. 8640            IF TERRAIN$(CH,CV)="" THEN LET TERRAIN$(CH,CV)="U": GOTO 8680
  859. 8650            LET CV=CV+1
  860. 8660            IF CV>8 THEN CV=0:CH=CH+1:
  861. 8670            GOTO 8640
  862. 8680            V.CORD=CV
  863. 8690            H.CORD=CH
  864. 8695            P.COLOR=BLUE
  865. 8696            GOSUB 8280
  866. 8697    NEXT C
  867. 8700 RETURN
  868.