-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcivilwar.bas
395 lines (395 loc) · 13.6 KB
/
civilwar.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
2 PRINT TAB(26) "CIVIL WAR"
4 PRINT TAB(15) "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
6 PRINT : PRINT : PRINT
20 REM ORIGINAL GAME DESIGN: CRAM, GOODIE, HIBBARD LEXINGTON H.S.
30 REM MODIFICATIONS: G. PAUL, R. HESS (TIES), 1973
50 DIM S(4),C$(14),M1(14),M2(14),C1(14),C2(14),M(14)
60 REM UNION INFO ON LIKELY CONFEDERATE STRATEGY
70 S(1)=25 : S(2)=25 : S(3)=25 : S(4)=25
82 REM READ HISTORICAL DATA.
84 FOR D=1 TO 14
86 READ C$(D),M1(D),M2(D),C1(D),C2(D),M(D)
88 NEXT D
89 LET D=RND(-1)
90 PRINT
100 PRINT "DO YOU WANT INSTRUCTIONS";
110 INPUT X$
120 IF X$="YES" THEN 160
130 IF X$="NO" THEN 370
140 PRINT "YES OR NO -- ";
150 GOTO 110
160 PRINT : PRINT : PRINT : PRINT
170 PRINT "THIS IS A CIVIL WAR SIMULATION."
180 PRINT "TO PLAY TYPE A RESPONSE WHEN THE COMPUTER ASKS."
190 PRINT "REMEMBER THAT ALL FACTORS ARE INTERRELATED AND THAT YOUR"
200 PRINT "RESPONSES COULD CHANGE HISTORY. FACTS AND FIGURES USED ARE"
210 PRINT "BASED ON THE ACTUAL OCCURRENCE. MOST BATTLES TEND TO RESULT"
220 PRINT "AS THEY DID IN THE CIVIL WAR, BUT IT ALL DEPENDS ON YOU!!"
230 PRINT
240 PRINT "THE OBJECT OF THE GAME IS TO WIN AS MANY BATTLES AS ";
245 PRINT "POSSIBLE."
250 PRINT
260 PRINT "YOUR CHOICES FOR DEFENSIVE STRATEGY ARE:"
270 PRINT " (1) ARTILLERY ATTACK"
280 PRINT " (2) FORTIFICATION AGAINST FRONTAL ATTACK"
290 PRINT " (3) FORTIFICATION AGAINST FLANKING MANEUVERS"
300 PRINT " (4) FALLING BACK"
310 PRINT " YOUR CHOICES FOR OFFENSIVE STRATEGY ARE:"
320 PRINT " (1) ARTILLERY ATTACK"
330 PRINT " (2) FRONTAL ATTACK"
340 PRINT " (3) FLANKING MANEUVERS"
350 PRINT " (4) ENCIRCLEMENT"
360 PRINT "YOU MAY SURRENDER BY TYPING A '5' FOR YOUR STRATEGY."
370 PRINT : PRINT : PRINT : PRINT "ARE THERE TWO GENERALS PRESENT ";
380 PRINT "(ANSWER YES OR NO)";
390 INPUT B$
400 IF B$="YES" THEN 430
410 IF B$ <> "NO" THEN 380
420 PRINT : PRINT "YOU ARE THE CONFEDERACY. GOOD LUCK!"
425 PRINT
430 LET D=1
440 IF B$ <> "YES" THEN 460
450 LET D=2
460 PRINT "SELECT A BATTLE BY TYPING A NUMBER FROM 1 TO 14 ON"
470 PRINT "REQUEST. TYPE ANY OTHER NUMBER TO END THE SIMULATION."
480 PRINT "BUT '0' BRINGS BACK EXACT PREVIOUS BATTLE SITUATION"
490 PRINT "ALLOWING YOU TO REPLAY IT"
500 PRINT
510 PRINT "NOTE: A NEGATIVE FOOD$ ENTRY CAUSES THE PROGRAM TO "
520 PRINT "USE THE ENTRIES FROM THE PREVIOUS BATTLE"
530 PRINT
540 PRINT "AFTER REQUESTING A BATTLE, DO YOU WISH ";
550 PRINT "BATTLE DESCRIPTIONS ";
560 PRINT "(ANSWER YES OR NO)";
570 INPUT X$
580 IF X$="YES" THEN 600
590 IF X$ <> "NO" THEN 560
600 L=0:W=0:R1=0:Q1=0:M3=0:M4=0:P1=0:P2=0:T1=0:T2=0
610 F(2)=0:H(2)=0:B(2)=0:R2=0:Q2=0:C6=0:F=0:W0=0:Y=0:Y2=0:U=0:U2=0
620 PRINT : PRINT : PRINT
630 PRINT "WHICH BATTLE DO YOU WISH TO SIMULATE";
640 INPUT A
650 IF A <> 0 THEN 660
655 IF R <> 0 THEN 1140
660 IF A <=0 THEN 2860
665 IF A >= 15 THEN 2860
670 LET C$=C$(A)
680 LET M1=M1(A)
690 LET M2=M2(A)
700 LET C1=C1(A)
710 LET C2=C2(A)
720 LET M=M(A)
960 LET U=0
970 REM INFLATION CALC
980 LET I1=10+(L-W)*2
990 LET I2=10+(W-L)*2
1000 REM - MONEY AVAILABLE
1010 LET D(1)=100*INT((M1*(100-I1)/2000)*(1+(R1-Q1)/(R1+1))+.5)
1020 LET D(2)=100*INT(M2*(100-I2)/2000+.5)
1030 IF B$ <> "YES" THEN 1050
1040 LET D(2)=100*INT((M2*(100-I2)/2000)*(1+(R2-Q2)/(R2+1))+.5)
1050 REM - MEN AVAILABLE
1060 LET M5=INT(M1*(1+(P1-T1)/(M3+1)))
1070 LET M6=INT(M2*(1+(P2-T2)/(M4+1)))
1080 LET F1=5*M1/6
1090 PRINT : PRINT : PRINT : PRINT : PRINT
1100 PRINT "THIS IS THE BATTLE OF ";C$
1110 IF X$="NO" THEN 1150
1120 IF A>11 THEN 1130
1125 ON A GOTO 3580,3620,3650,3690,3720,3750,3780,3800,3830,3860,3890
1130 ON A-11 GOTO 3920,3950,3980
1140 PRINT C$" INSTANT REPLAY"
1150 PRINT
1160 PRINT " ","CONFEDERACY"," UNION"
1170 PRINT "MEN"," "M5," "M6
1180 PRINT "MONEY","$";D(1),"$";D(2)
1190 PRINT "INFLATION"," ";I1+15;"%"," ";I2;"%"
1195 PRINT
1200 REM - ONLY IN PRINTOUT IS CONFED INFLATION = I1+15%
1210 REM - IF TWO GENERALS, INPUT CONFED. FIRST
1220 FOR I=1 TO D
1230 IF B$ <> "YES" THEN 1260
1240 IF I=2 THEN 1260
1250 PRINT "CONFEDERATE GENERAL---";
1260 PRINT "HOW MUCH DO YOU WISH TO SPEND FOR"
1270 PRINT " - FOOD......";
1280 INPUT F
1290 IF F >= 0 THEN 1360
1300 IF R1 <> 0 THEN 1330
1310 PRINT "NO PREVIOUS ENTRIES"
1320 GOTO 1270
1330 PRINT "ASSUME YOU WANT TO KEEP SAME ALLOCATIONS"
1340 PRINT
1350 GOTO 1510
1360 LET F(I)=F
1370 PRINT " - SALARIES..";
1380 INPUT H(I)
1390 LET N=1
1400 IF H(I)<0 THEN 1490
1410 PRINT " - AMMUNITION";
1420 INPUT B(I)
1430 LET N=2
1440 IF B(I)<0 THEN 1490
1450 PRINT
1460 IF F(I)+H(I)+B(I) <= D(I) THEN 1510
1470 PRINT "THINK AGAIN! YOU HAVE ONLY $"D(I)
1480 GOTO 1270
1490 PRINT "NEGATIVE VALUES NOT ALLOWED."
1500 ON N GOTO 1370,1410
1510 IF B$ <> "YES" THEN 1550
1520 IF I=2 THEN 1550
1530 PRINT "UNION GENERAL---";
1540 NEXT I
1550 FOR Z=1 TO D
1560 IF B$ <> "YES" THEN 1620
1570 ON Z GOTO 1580,1600
1580 PRINT "CONFEDERATE ";
1590 GOTO 1620
1600 PRINT " UNION ";
1610 REM - FIND MORALE
1620 LET O=((2*F(Z)^2+H(Z)^2)/F1^2+1)
1630 IF O<10 THEN 1660
1640 PRINT "MORALE IS HIGH"
1650 GOTO 1700
1660 IF O<5 THEN 1690
1670 PRINT "MORALE IS FAIR"
1680 GOTO 1700
1690 PRINT "MORALE IS POOR"
1700 IF B$ <> "YES" THEN 1760
1710 LET O(Z)=O
1720 NEXT Z
1730 LET O2=O(2)
1740 LET O=O(1)
1750 PRINT "CONFEDERATE GENERAL---";
1760 REM - ACTUAL OFF/DEF BATTLE SITUATION
1770 IF M <> 3 THEN 1800
1780 PRINT "YOU ARE ON THE OFFENSIVE"
1790 GOTO 1840
1800 IF M <> 1 THEN 1830
1810 PRINT "YOU ARE ON THE DEFENSIVE"
1820 GOTO 1840
1830 PRINT "BOTH SIDES ARE ON THE OFFENSIVE "
1840 PRINT
1850 REM - CHOOSE STRATEGIES
1860 IF B$ <> "YES" THEN 1910
1870 FOR I=1 TO 2
1880 ON I GOTO 1890,1920
1890 PRINT "CONFEDERATE STRATEGY ";
1900 GOTO 1920
1910 PRINT "YOUR STRATEGY ";
1920 INPUT Y
1930 IF ABS(Y-3)<3 THEN 1960
1940 PRINT "STRATEGY";Y;"NOT ALLOWED."
1950 GOTO 1910
1960 IF B$="YES" THEN 2000
1970 IF Y=5 THEN 2830
1980 GOSUB 3110
1990 GOTO 2170
2000 IF I=2 THEN 2040
2010 LET Y1=Y
2020 PRINT "UNION STRATEGY ";
2030 NEXT I
2040 LET Y2=Y
2050 LET Y=Y1
2060 IF Y2=5 THEN 2020
2070 REM : SIMULATED LOSSES-NORTH
2080 LET C6=(2*C2/5)*(1+1/(2*(ABS(Y2-Y)+1)))
2090 LET C6=C6*(1.28+(5*M2/6)/(B(2)+1))
2100 LET C6=INT(C6*(1+1/O2)+.5)
2110 REM - IF LOSS > MEN PRESENT, RESCALE LOSSES
2120 LET E2=100/O2
2130 IF INT(C6+E2)<M6 THEN 2190
2140 LET C6=INT(13*M6/20)
2150 LET E2=7*C6/13
2160 LET U2=1
2170 REM - CALCULATE SIMULATED LOSSES
2180 PRINT
2190 PRINT : PRINT : PRINT ,"CONFEDERACY","UNION"
2200 LET C5=(2*C1/5)*(1+1/(2*(ABS(Y2-Y)+1)))
2210 LET C5=INT(C5*(1+1/O)*(1.28+F1/(B(1)+1))+.5)
2220 LET E=100/O
2230 IF C5+100/O<M1*(1+(P1-T1)/(M3+1)) THEN 2270
2240 LET C5=INT(13*M1/20*(1+(P1-T1)/(M3+1)))
2250 LET E=7*C5/13
2260 LET U=1
2270 IF D=1 THEN 2500
2280 PRINT "CASUALTIES",C5,C6
2290 PRINT "DESERTIONS",INT(E),INT(E2)
2300 PRINT
2310 IF B$ <> "YES" THEN 2350
2320 PRINT "COMPARED TO THE ACTUAL CASUALTIES AT "C$
2330 PRINT "CONFEDERATE:"INT(100*(C5/C1)+.5)"% OF THE ORIGINAL"
2340 PRINT "UNION: "INT(100*(C6/C2)+.5)"% OF THE ORIGINAL"
2350 PRINT
2360 REM - 1 WHO ONE
2370 IF U <> 1 THEN 2380
2375 IF U2=1 THEN 2460
2380 IF U=1 THEN 2420
2390 IF U2=1 THEN 2440
2400 IF C5+E=C6+E2 THEN 2460
2410 IF C5+E<C6+E2 THEN 2440
2420 PRINT "THE UNION WINS "C$
2430 GOTO 2600
2440 PRINT "THE CONFEDERACY WINS "C$
2450 GOTO 2660
2460 PRINT "BATTLE OUTCOME UNRESOLVED"
2470 LET W0=W0+1
2480 IF A=0 THEN 2790
2490 GOTO 2680
2500 LET C6=INT(17*C2*C1/(C5*20))
2510 LET E2=5*O
2520 GOTO 2280
2530 PRINT "YOUR CASUALTIES WERE "INT(100*(C5/C1)+.5)"% OF "
2540 PRINT "THE ACTUAL CASUALTIES AT ";C$
2550 PRINT
2560 REM - FIND WHO WON
2570 IF U=1 THEN 2590
2580 IF C5+E<17*C2*C1/(C5*20)+5*O THEN 2630
2590 PRINT "YOU LOSE ";C$
2600 IF A=0 THEN 2790
2610 LET L=L+1
2620 GOTO 2680
2630 PRINT "YOU WIN ";C$
2640 REM - CUMULATIVE BATTLE FACTORS WHICH ALTER HISTORICAL
2650 REM RESOURCES AVAILABLE.IF A REPLAY DON'T UPDATE.
2660 IF A=0 THEN 2790
2670 LET W=W+1
2680 LET T1=T1+C5+E
2690 LET T2=T2+C6+E2
2700 LET P1=P1+C1
2710 LET P2=P2+C2
2720 LET Q1=Q1+(F(1)+H(1)+B(1))
2730 LET Q2=Q2+(F(2)+H(2)+B(2))
2740 LET R1=R1+M1*(100-I1)/20
2750 LET R2=R2+M2*(100-I2)/20
2760 LET M3=M3+M1
2770 LET M4=M4+M2
2780 GOSUB 3300
2790 U=0:U2=0
2800 PRINT "---------------"
2810 GOTO 620
2820 REM------FINISH OFF
2830 PRINT "THE CONFEDERACY HAS SURRENDERED"
2840 GOTO 2860
2850 PRINT "THE UNION HAS SURRENDERED."
2860 PRINT : PRINT : PRINT : PRINT : PRINT : PRINT
2870 PRINT "THE CONFEDERACY ";
2880 PRINT "HAS WON "W" BATTLES AND LOST "L
2890 IF Y=5 THEN 2940
2900 IF Y2=5 THEN 2920
2910 IF W <= L THEN 2940
2915 IF Y=5 THEN 2940
2920 PRINT "THE CONFEDERACY HAS WON THE WAR"
2930 GOTO 2950
2940 PRINT "THE UNION HAS WON THE WAR"
2950 PRINT
2960 IF R1=0 THEN 3100
2970 PRINT "FOR THE "W+L+W0" BATTLES FOUGHT (EXCUDING RERUNS)"
2980 PRINT " "," "," ";
2990 PRINT "CONFEDERACY"," UNION"
3000 PRINT "HISTORICAL LOSSES",INT(P1+.5),INT(P2+.5)
3010 PRINT "SIMULATED LOSSES",INT(T1+.5),INT(T2+.5)
3020 PRINT
3030 PRINT " % OF ORIGINAL",INT(100*(T1/P1)+.5),INT(100*(T2/P2)+.5)
3040 IF B$="YES" THEN 3100
3050 PRINT
3060 PRINT "UNION INTELLIGENCE SUGGESTS THAT THE SOUTH USED "
3070 PRINT "STRATEGIES 1, 2, 3, 4 IN THE FOLLOWING PERCENTAGES"
3080 PRINT S(1);S2(2);S(3);S(4)
3090 REM---------------------------------
3100 STOP
3110 REM - UNION STRATEGY IS COMPUTER CHOSEN
3120 PRINT "UNION STRATEGY IS ";
3130 IF A <> 0 THEN 3180
3140 INPUT Y2
3150 IF Y2 <=0 THEN 3160
3155 IF Y2<5 THEN 3290
3160 PRINT "ENTER 1 , 2 ,3 , OR 4 (USUALLY PREVIOUS UNION STRATEGY)"
3170 GOTO 3140
3180 LET S0=0
3190 LET R=100*RND(0)
3200 FOR I=1 TO 4
3210 LET S0=S0+S(I)
3220 REM - IF ACTUAL STRATEGY INFO IS IN PROGRAM DATA STATEMENTS
3230 REM THEN R-100 IS EXTRA WEIGHT GIVEN TO THAT STATEGY.
3240 IF R<S0 THEN 3270
3250 NEXT I
3260 REM - IF ACTUAL STRAT. IN,THEN HERE IS Y2= HIST. STRAT.
3270 LET Y2=I
3280 PRINT Y2
3290 RETURN
3300 REM LEARN PRESENT STRATEGY, START FORGETTING OLD ONES
3310 REM - PRESENT STRATEGY OF SOUTH GAINS 3*S, OTHERS LOSE S
3320 REM PROBABILITY POINTS, UNLESS A STRATEGY FALLS BELOW 5%.
3330 LET S=3
3340 LET S0=0
3350 FOR I=1 TO 4
3360 IF S(I) <= 5 THEN 3390
3370 LET S(I)=S(I)-S
3380 LET S0=S0+S
3390 NEXT I
3400 LET S(Y)=S(Y)+S0
3410 RETURN
3420 REM - HISTORICAL DATA...CAN ADD MORE (STRAT.,ETC) BY INSERTING
3430 REM DATA STATEMENTS AFTER APPRO. INFO, AND ADJUSTING READ
3440 DATA "BULL RUN",18000,18500,1967,2708,1
3450 DATA "SHILOH",40000.,44894.,10699,13047,3
3460 DATA "SEVEN DAYS",95000.,115000.,20614,15849,3
3470 DATA "SECOND BULL RUN",54000.,63000.,10000,14000,2
3480 DATA "ANTIETAM",40000.,50000.,10000,12000,3
3490 DATA "FREDERICKSBURG",75000.,120000.,5377,12653,1
3500 DATA "MURFREESBORO",38000.,45000.,11000,12000,1
3510 DATA "CHANCELLORSVILLE",32000,90000.,13000,17197,2
3520 DATA "VICKSBURG",50000.,70000.,12000,19000,1
3530 DATA "GETTYSBURG",72500.,85000.,20000,23000,3
3540 DATA "CHICKAMAUGA",66000.,60000.,18000,16000,2
3550 DATA "CHATTANOOGA",37000.,60000.,36700.,5800,2
3560 DATA "SPOTSYLVANIA",62000.,110000.,17723,18000,2
3570 DATA "ATLANTA",65000.,100000.,8500,3700,1
3580 PRINT "JULY 21, 1861. GEN. BEAUREGARD, COMMANDING THE SOUTH, MET"
3590 PRINT "UNION FORCES WITH GEN. MCDOWELL IN A PREMATURE BATTLE AT"
3600 PRINT "BULL RUN. GEN. JACKSON HELPED PUSH BACK THE UNION ATTACK."
3610 GOTO 1150
3620 PRINT "APRIL 6-7, 1862. THE CONFEDERATE SURPRISE ATTACK AT"
3630 PRINT "SHILOH FAILED DUE TO POOR ORGANIZATION."
3640 GOTO 1150
3650 PRINT "JUNE 25-JULY 1, 1862. GENERAL LEE (CSA) UPHELD THE"
3660 PRINT "OFFENSIVE THROUGHOUT THE BATTLE AND FORCED GEN. MCCLELLAN"
3670 PRINT "AND THE UNION FORCES AWAY FROM RICHMOND."
3680 GOTO 1150
3690 PRINT "AUG 29-30, 1862. THE COMBINED CONFEDERATE FORCES UNDER";
3695 PRINT " LEE"
3700 PRINT "AND JACKSON DROVE THE UNION FORCES BACK INTO WASHINGTON."
3710 GOTO 1150
3720 PRINT "SEPT 17, 1862. THE SOUTH FAILED TO INCORPORATE MARYLAND"
3730 PRINT "INTO THE CONFEDERACY."
3740 GOTO 1150
3750 PRINT "DEC 13, 1862. THE CONFEDERACY UNDER LEE SUCCESSFULLY"
3760 PRINT "REPULSED AN ATTACK BY THE UNION UNDER GEN. BURNSIDE."
3770 GOTO 1150
3780 PRINT "DEC 31, 1862. THE SOUTH UNDER GEN. BRAGG WON A CLOSE ";
3785 PRINT "BATTLE."
3790 GOTO 1150
3800 PRINT "MAY 1-6, 1863. THE SOUTH HAD A COSTLY VICTORY AND LOST"
3810 PRINT "ONE OF THEIR OUTSTANDING GENERALS, 'STONEWALL' JACKSON."
3820 GOTO 1150
3830 PRINT "JULY 4, 1863. VICKSBURG WAS A COSTLY DEFEAT FOR THE SOUTH"
3840 PRINT "BECAUSE IT GAVE THE UNION ACCESS TO THE MISSISSIPPI."
3850 GOTO 1150
3860 PRINT "JULY 1-3, 1863. A SOUTHERN MISTAKE BY GEN. LEE AT ";
3865 PRINT "GETTYSBURG"
3870 PRINT "COST THEM ONE OF THE MOST CRUCIAL BATTLES OF THE WAR."
3880 GOTO 1150
3890 PRINT "SEPT. 15, 1863. CONFUSION IN A FOREST NEAR CHICKAMAUGA LED"
3900 PRINT "TO A COSTLY SOUTHERN VICTORY."
3910 GOTO 1150
3920 PRINT "NOV. 25, 1863. AFTER THE SOUTH HAD SIEGED GEN. ROSENCRANS'"
3930 PRINT "ARMY FOR THREE MONTHS, GEN. GRANT BROKE THE SIEGE."
3940 GOTO 1150
3950 PRINT "MAY 5, 1864. GRANT'S PLAN TO KEEP LEE ISOLATED BEGAN TO"
3960 PRINT "FAIL HERE, AND CONTINUED AT COLD HARBOR AND PETERSBURG."
3970 GOTO 1150
3980 PRINT "AUGUST, 1864. SHERMAN AND THREE VETERAN ARMIES CONVERGED"
3990 PRINT "ON ATLANTA AND DEALT THE DEATH BLOW TO THE CONFEDERACY."
4000 GOTO 1150
4010 END