Sample Chapter from the George Beker Illustrated Edition

Civil War

This simulation is based on 14 battles in the Civil War. Facts and figures used are based on the actual occurrence. If you follow the same strategy used in the actual battle, the results will be the same. Generally, this is good strategy since the generals in the Civil War were fairly good military strategists. However, you can frequently outperform the Civil War generals, particularly in cases where they did not have good enemy intelligence and consequently followed a poor course of action.

Naturally, it helps to know your civil war history, although the computer gives you the rudiments. After each of the 14 battles, your casualties are compared to the actual casualties of the battle, and you are told whether you win or lose the battle.

You may play Civil War alone in which case the program simulates the Union general. Or two players may play in which case, the computer becomes the moderator.

Civil War was written in 1968 by three Students at Lexington High School, Massachusetts: L Cram, L. Goodie, and D. Hibbard. It was modified into a 2-player game by G. Paul and R. Hess of TIES, St. Paul, Minnesota. It was ported to Microsoft Small Basic by BIBLEBYTE BOOKS in 2010.

George Beker comments on the original Civil War BEKERBOT :

I didn’t do the drawings in any particular order, but this one of the early ones.  I recall struggling with just what would  a robot in some alternate Grant-Lee universe look like.  In the end, I decided it boiled down to having two main characteristics – it would have to have remote vision (black/white imaging, sepia display, of course) and otherwise just be one big, honking, thick-walled  cannon.  The “buttons” or bumps on the tires were my take on the bottoms of hob-nail boots – yes, odd things do cross one’s mind when one  doodles.   Little-known fact – the original drawing included a stack of cannon balls off to the right, but somehow that never made it into the book.  Some art director obviously  didn’t like it, I guess. Maybe he thought the wrong side won  . . .  “

Code Listing (Small Basic File: civilwar.sb):

TextWindow.CursorLeft = 26

TextWindow.WriteLine(“CIVIL WAR”)

TextWindow.CursorLeft = 15

TextWindow.WriteLine(“BIBLEBYTE BOOKS, MAPLE VALLEY, WASHINGTON”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

‘   ORIGINAL GAME DESIGN

‘CRAM, GOODIE, HIBBARD LEXINGTON H.S.

‘   MODIFICATIONS

‘G. PAUL, R. HESS (TIES), 1973

‘   UNION INFO ON LIKELY CONFEDERATE STRATEGY

SArray[1]=25

SArray[2]=25

SArray[3]=25

SArray[4]=25

‘  HISTORICAL DATA.

CDArray[1] = “BULL RUN”

M1Array[1] = 18000

M2Array[1] = 18500

C1Array[1] = 1967

C2Array[1] = 2708

MArray[1] = 1

CDArray[2] = “SHILOH”

M1Array[2] = 40000

M2Array[2] = 44894

C1Array[2] = 10699

C2Array[2] = 13047

MArray[2] = 3

CDArray[3] = “SEVEN DAYS”

M1Array[3] = 95000

M2Array[3] = 115000

C1Array[3] = 20614

C2Array[3] = 15849

MArray[3] = 3

CDArray[4] = “SECOND BULL RUN”

M1Array[4] = 54000

M2Array[4] = 63000

C1Array[4] = 10000

C2Array[4] = 14000

MArray[4] = 2

CDArray[5] = “ANTIETAM”

M1Array[5] = 40000

M2Array[5] = 50000

C1Array[5] = 10000

C2Array[5] = 12000

MArray[5] = 3

CDArray[6] = “FREDERICKSBURG”

M1Array[6] = 75000

M2Array[6] = 120000

C1Array[6] = 5377

C2Array[6] = 12653

MArray[6] = 1

CDArray[7] = “MURFREESBORO”

M1Array[7] = 38000

M2Array[7] = 45000

C1Array[7] = 11000

C2Array[7] = 12000

MArray[7] = 1

CDArray[8] = “CHANCELLORSVILLE”

M1Array[8] = 32000

M2Array[8] = 90000

C1Array[8] = 13000

C2Array[8] = 17197

MArray[8] = 2

CDArray[9] = “VICKSBURG”

M1Array[9] = 50000

M2Array[9] = 70000

C1Array[9] = 12000

C2Array[9] = 19000

MArray[9] = 1

CDArray[10] = “GETTYSBURG”

M1Array[10] = 72500

M2Array[10] = 85000

C1Array[10] = 20000

C2Array[10] = 23000

MArray[10] = 3

CDArray[11] = “CHICKAMAUGA”

M1Array[11] = 66000

M2Array[11] = 60000

C1Array[11] = 18000

C2Array[11] = 16000

MArray[11] = 2

CDArray[12] = “CHATTANOOGA”

M1Array[12] = 37000

M2Array[12] = 60000

C1Array[12] = 36700

C2Array[12] = 5800

MArray[12] = 2

CDArray[13] = “SPOTSYLVANIA”

M1Array[13] = 62000

M2Array[13] = 110000

C1Array[13] = 17723

C2Array[13] = 18000

MArray[13] = 2

CDArray[14] = “ATLANTA”

M1Array[14] = 65000

M2Array[14] = 100000

C1Array[14] = 8500

C2Array[14] = 3700

MArray[14] = 1

D=Math.GetRandomNumber(999)/1000

TextWindow.WriteLine(“”)

TextWindow.Write(“DO YOU WANT INSTRUCTIONS? “)

LN110:

XD = TextWindow.Read()

If XD=”YES” Then

Goto LN160

EndIf

If XD=”NO” Then

Goto LN370

EndIf

TextWindow.Write(“YES OR NO — “)

Goto LN110

LN160:

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“THIS IS A CIVIL WAR SIMULATION.”)

TextWindow.WriteLine(“TO PLAY TYPE A RESPONSE WHEN THE COMPUTER ASKS.”)

TextWindow.WriteLine(“REMEMBER THAT ALL FACTORS ARE INTERRELATED AND THAT YOUR”)

TextWindow.WriteLine(“RESPONSES COULD CHANGE HISTORY. FACTS AND FIGURES USED ARE”)

TextWindow.WriteLine(“BASED ON THE ACTUAL OCCURRENCE. MOST BATTLES TEND TO RESULT”)

TextWindow.WriteLine(“AS THEY DID IN THE CIVIL WAR, BUT IT ALL DEPENDS ON YOU!!”)

TextWindow.WriteLine(“”)

TextWindow.Write(“THE OBJECT OF THE GAME IS TO WIN AS MANY BATTLES AS “)

TextWindow.WriteLine(“POSSIBLE.”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“YOUR CHOICES FOR DEFENSIVE STRATEGY ARE:”)

TextWindow.WriteLine(”        [1] ARTILLERY ATTACK”)

TextWindow.WriteLine(”        [2] FORTIFICATION AGAINST FRONTAL ATTACK”)

TextWindow.WriteLine(”        [3] FORTIFICATION AGAINST FLANKING MANEUVERS”)

TextWindow.WriteLine(”        [4] FALLING BACK”)

TextWindow.WriteLine(” YOUR CHOICES FOR OFFENSIVE STRATEGY ARE:”)

TextWindow.WriteLine(”        [1] ARTILLERY ATTACK”)

TextWindow.WriteLine(”        [2] FRONTAL ATTACK”)

TextWindow.WriteLine(”        [3] FLANKING MANEUVERS”)

TextWindow.WriteLine(”        [4] ENCIRCLEMENT”)

TextWindow.WriteLine(“YOU MAY SURRENDER BY TYPING A ‘5’ FOR YOUR STRATEGY.”)

LN370:

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.Write(“ARE THERE TWO GENERALS PRESENT “)

LN380:

TextWindow.Write(“(ANSWER YES OR NO)? “)

BD = TextWindow.Read()

If BD=”YES” Then

Goto LN430

EndIf

If BD <> “NO” Then

Goto LN380

EndIf

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“YOU ARE THE CONFEDERACY.   GOOD LUCK!”)

TextWindow.WriteLine(“”)

LN430:

D=1

If BD <> “YES” Then

Goto LN460

EndIf

D=2

LN460:

TextWindow.WriteLine(“SELECT A BATTLE BY TYPING A NUMBER FROM 1 TO 14 ON”)

TextWindow.WriteLine(“REQUEST.  TYPE ANY OTHER NUMBER TO END THE SIMULATION.”)

TextWindow.WriteLine(“BUT ‘0’ BRINGS BACK EXACT PREVIOUS BATTLE SITUATION”)

TextWindow.WriteLine(“ALLOWING YOU TO REPLAY IT”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“NOTE: A NEGATIVE FOOD ENTRY CAUSES THE PROGRAM TO “)

TextWindow.WriteLine(“USE THE ENTRIES FROM THE PREVIOUS BATTLE”)

TextWindow.WriteLine(“”)

TextWindow.Write(“DO YOU WISH BATTLE DESCRIPTIONS? “)

LN560:

TextWindow.Write(“(ANSWER YES OR NO)? “)

XD = TextWindow.Read()

If XD=”YES” Then

Goto LN600

EndIf

If XD <> “NO” Then

Goto LN560

EndIf

LN600:

L=0

W=0

R1=0

Q1=0

M3=0

M4=0

P1=0

P2=0

T1=0

T2=0

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

LN620:

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.Write(“WHICH BATTLE DO YOU WISH TO SIMULATE? “)

A = TextWindow.ReadNumber()

If A <> 0 Then

Goto LN660

EndIf

If R <> 0 Then

Goto LN1140

EndIf

LN660:

If A <=0 Then

Goto LN2860

EndIf

If A >= 15 Then

Goto LN2860

EndIf

CD=CDArray[A]

M1=M1Array[A]

M2=M2Array[A]

C1=C1Array[A]

C2=C2Array[A]

M=MArray[A]

U=0

‘    INFLATION CALC

I1=10+(L-W)*2

I2=10+(W-L)*2

‘   – MONEY AVAILABLE

DArray[1]=100*Math.Floor((M1*(100-I1)/2000)*(1+(R1-Q1)/(R1+1))+.5)

DArray[2]=100*Math.Floor(M2*(100-I2)/2000+.5)

If BD <> “YES” Then

Goto LN1050

EndIf

DArray[2]=100*Math.Floor((M2*(100-I2)/2000)*(1+(R2-Q2)/(R2+1))+.5)

LN1050:

‘   – MEN   AVAILABLE

M5=Math.Floor(M1*(1+(P1-T1)/(M3+1)))

M6=Math.Floor(M2*(1+(P2-T2)/(M4+1)))

F1=5*M1/6

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“THIS IS THE BATTLE OF “+CD)

If XD=”NO” Then

Goto LN1150

EndIf

If A>11 Then

Goto LN1130

EndIf

If (A = 1) Then

Goto LN3580

ElseIf (A = 2) Then

Goto LN3620

ElseIf (A = 3) Then

Goto LN3650

ElseIf (A = 4) Then

Goto LN3690

ElseIf (A = 5) Then

Goto LN3720

ElseIf (A = 6) Then

Goto LN3750

ElseIf (A = 7) Then

Goto LN3780

ElseIf (A = 8) Then

Goto LN3800

ElseIf (A = 9) Then

Goto LN3830

ElseIf (A = 10) Then

Goto LN3860

ElseIf (A = 11) Then

Goto LN3890

EndIf

LN1130:

If (A-11 = 1) Then

Goto LN3920

ElseIf (A-11 = 2) Then

Goto LN3950

ElseIf (A-11 = 3) Then

Goto LN3980

EndIf

LN1140:

TextWindow.WriteLine(CD+” INSTANT REPLAY”)

LN1150:

TextWindow.WriteLine(“”)

TextWindow.WriteLine(”           CONFEDERACY     UNION”)

TextWindow.WriteLine(“MEN          “+M5+”         “+M6)

TextWindow.WriteLine(“MONEY       “+”$”+DArray[1]+”        $”+DArray[2])

TextWindow.WriteLine(“INFLATION      “+(I1+15)+”%”+”          “+I2+”%”)

TextWindow.WriteLine(“”)

‘ONLY IN PRINTOUT IS CONFED INFLATION = I1+15%)

‘   – IF TWO GENERALS, INPUT CONFED. FIRST

For I=1 To D

If BD <> “YES” Then

Goto LN1260

EndIf

If I=2 Then

Goto LN1260

EndIf

TextWindow.Write(“CONFEDERATE GENERAL—“)

LN1260:

TextWindow.WriteLine(“HOW MUCH DO YOU WISH TO SPEND FOR”)

LN1270:

TextWindow.Write(” – FOOD……? “)

F = TextWindow.ReadNumber()

If F >= 0 Then

Goto LN1360

EndIf

If R1 <> 0 Then

Goto LN1330

EndIf

TextWindow.WriteLine(“NO PREVIOUS ENTRIES”)

Goto LN1270

LN1330:

TextWindow.WriteLine(“ASSUME YOU WANT TO KEEP SAME ALLOCATIONS”)

TextWindow.WriteLine(“”)

Goto LN1510

LN1360:

FArray[I]=F

LN1370:

TextWindow.Write(” – SALARIES..? “)

HArray[I] = TextWindow.ReadNumber()

N=1

If HArray[I]<0 Then

Goto LN1490

EndIf

LN1410:

TextWindow.Write(” – AMMUNITION? “)

BArray[I] = TextWindow.ReadNumber()

N=2

If BArray[I]<0 Then

Goto LN1490

EndIf

TextWindow.WriteLine(“”)

If FArray[I]+HArray[I]+BArray[I] <= DArray[I] Then

Goto LN1510

EndIf

TextWindow.WriteLine(“THINK AGAIN! YOU HAVE ONLY $”+DArray[I])

Goto LN1270

LN1490:

TextWindow.WriteLine(“NEGATIVE VALUES NOT ALLOWED.”)

If (N = 1) Then

Goto LN1370

ElseIf (N = 2) Then

Goto LN1410

EndIf

LN1510:

If BD <> “YES” Then

Goto LN1550

EndIf

If I=2 Then

Goto LN1550

EndIf

TextWindow.Write(“UNION GENERAL—“)

EndFor

LN1550:

For Z=1 To D

If BD <> “YES” Then

Goto LN1620

EndIf

If (Z = 1) Then

Goto LN1580

ElseIf (Z = 2) Then

Goto LN1600

EndIf

LN1580:

TextWindow.Write(“CONFEDERATE “)

Goto LN1620

LN1600:

TextWindow.Write(”      UNION “)

‘   – FIND MORALE

LN1620:

O=((2*FArray[Z]*FArray[Z]+HArray[Z]*HArray[z])/(F1*F1)+1)

If O<10 Then

Goto LN1660

EndIf

TextWindow.WriteLine(“MORALE IS HIGH”)

Goto LN1700

LN1660:

If O<5 Then

Goto LN1690

EndIf

TextWindow.WriteLine(“MORALE IS FAIR”)

Goto LN1700

LN1690:

TextWindow.WriteLine(“MORALE IS POOR”)

LN1700:

If BD <> “YES” Then

Goto LN1760

EndIf

OArray[Z]=O

EndFor

O2=OArray[2]

O=OArray[1]

TextWindow.Write(“CONFEDERATE GENERAL—“)

LN1760:

‘   – ACTUAL OFF/DEF BATTLE SITUATION

If M <> 3 Then

Goto LN1800

EndIf

TextWindow.WriteLine(“YOU ARE ON THE OFFENSIVE”)

Goto LN1840

LN1800:

If M <> 1 Then

Goto LN1830

EndIf

TextWindow.WriteLine(“YOU ARE ON THE DEFENSIVE”)

Goto LN1840

LN1830:

TextWindow.WriteLine(“BOTH SIDES ARE ON THE OFFENSIVE “)

LN1840:

TextWindow.WriteLine(“”)

‘   – CHOOSE STRATEGIES

If BD <> “YES” Then

Goto LN1910

EndIf

For I=1 To 2

If (I = 1) Then

Goto LN1890

ElseIf (I = 2) Then

Goto LN1920

EndIf

LN1890:

TextWindow.Write(“CONFEDERATE STRATEGY? “)

Goto LN1920

LN1910:

TextWindow.Write(“YOUR STRATEGY? “)

LN1920:

Y = TextWindow.ReadNumber()

If Math.Abs(Y-3)<3 Then

Goto LN1960

EndIf

TextWindow.WriteLine(“STRATEGY “+Y+” NOT ALLOWED.”)

Goto LN1910

LN1960:

If BD=”YES” Then

Goto LN2000

EndIf

If Y=5 Then

Goto LN2830

EndIf

Sub3110()

Goto LN2170

LN2000:

If I=2 Then

Goto LN2040

EndIf

Y1=Y

LN2020:

TextWindow.Write(“UNION STRATEGY? “)

EndFor

LN2040:

Y2=Y

Y=Y1

If Y2=5 Then

Goto LN2020

EndIf

‘  

‘SIMULATED LOSSES-NORTH

C6=(2*C2/5)*(1+1/(2*(Math.Abs(Y2-Y)+1)))

C6=C6*(1.28+(5*M2/6)/(B[2]+1))

C6=Math.Floor(C6*(1+1/O2)+.5)

‘   – IF LOSS > MEN PRESENT, RESCALE LOSSES

E2=100/O2

If Math.Floor(C6+E2)Then

Goto LN2190

EndIf

C6=Math.Floor(13*M6/20)

E2=7*C6/13

U2=1

LN2170:

‘   – CALCULATE SIMULATED LOSSES

TextWindow.WriteLine(“”)

LN2190:

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(”             CONFEDERACY    UNION”)

C5=(2*C1/5)*(1+1/(2*(Math.Abs(Y2-Y)+1)))

C5=Math.Floor(C5*(1+1/O)*(1.28+F1/(BArray[1]+1))+.5)

E=100/O

If C5+100/OThen

Goto LN2270

EndIf

C5=Math.Floor(13*M1/20*(1+(P1-T1)/(M3+1)))

E=7*C5/13

U=1

LN2270:

If D=1 Then

Goto LN2500

EndIf

LN2280:

TextWindow.WriteLine(Text.Append(“CASUALTIES      “,C5)+”       “+C6)

TextWindow.WriteLine(Text.Append(“DESERTIONS      “,Math.Floor(E))+”            “+Math.floor(E2))

TextWindow.WriteLine(“”)

If BD <> “YES” Then

Goto LN2350

EndIf

TextWindow.WriteLine(“COMPARED TO THE ACTUAL CASUALTIES AT “+CD)

TextWindow.WriteLine(“CONFEDERATE: “+Math.Floor(100*(C5/C1)+.5)+”% OF THE ORIGINAL”)

TextWindow.WriteLine(“UNION: “+Math.Floor(100*(C6/C2)+.5)+”% OF THE ORIGINAL”)

LN2350:

TextWindow.WriteLine(“”)

‘   – 1 WHO ONE

If U <> 1 Then

Goto LN2380

EndIf

If U2=1 Then

Goto LN2460

EndIf

LN2380:

If U=1 Then

Goto LN2420

EndIf

If U2=1 Then

Goto LN2440

EndIf

If C5+E=C6+E2 Then

Goto LN2460

EndIf

If C5+EThen

Goto LN2440

EndIf

LN2420:

TextWindow.WriteLine(“THE UNION WINS “+CD)

Goto LN2600

LN2440:

TextWindow.WriteLine(“THE CONFEDERACY WINS “+CD)

Goto LN2660

LN2460:

TextWindow.WriteLine(“BATTLE OUTCOME UNRESOLVED”)

W0=W0+1

If A=0 Then

Goto LN2790

EndIf

Goto LN2680

LN2500:

C6=Math.Floor(17*C2*C1/(C5*20))

E2=5*O

Goto LN2280

TextWindow.WriteLine(“YOUR CASUALTIES WERE “+math.floor(100*(C5/C1)+.5)+”% OF “)

TextWindow.WriteLine(“THE ACTUAL CASUALTIES AT “+CD)

TextWindow.WriteLine(“”)

‘   – FIND WHO WON

If U=1 Then

Goto LN2590

EndIf

If C5+E<17*C2*C1/(C5*20)+5*O Then

Goto LN2630

EndIf

LN2590:

TextWindow.WriteLine(“YOU LOSE “+CD)

LN2600:

If A=0 Then

Goto LN2790

EndIf

L=L+1

Goto LN2680

LN2630:

TextWindow.WriteLine(“YOU WIN “+CD)

‘   – CUMULATIVE BATTLE FACTORS WHICH ALTER HISTORICAL

‘    RESOURCES AVAILABLE.IF A REPLAY DON’T UPDATE.

LN2660:

If A=0 Then

Goto LN2790

EndIf

W=W+1

LN2680:

T1=T1+C5+E

T2=T2+C6+E2

P1=P1+C1

P2=P2+C2

Q1=Q1+(F[1]+H[1]+B[1])

Q2=Q2+(F[2]+H[2]+B[2])

R1=R1+M1*(100-I1)/20

R2=R2+M2*(100-I2)/20

M3=M3+M1

M4=M4+M2

Sub3300()

LN2790:

U=0

U2=0

TextWindow.WriteLine(“—————“)

Goto LN620

‘  ——FINISH OFF

LN2830:

TextWindow.WriteLine(“THE CONFEDERACY HAS SURRENDERED”)

Goto LN2860

TextWindow.WriteLine(“THE UNION HAS SURRENDERED.”)

LN2860:

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“”)

TextWindow.Write(“THE CONFEDERACY “)

TextWindow.WriteLine(“HAS WON “+W+” BATTLES AND LOST “+L)

If Y=5 Then

Goto LN2940

EndIf

If Y2=5 Then

Goto LN2920

EndIf

If W <= L Then

Goto LN2940

EndIf

If Y=5 Then

Goto LN2940

EndIf

LN2920:

TextWindow.WriteLine(“THE CONFEDERACY HAS WON THE WAR”)

Goto LN2950

LN2940:

TextWindow.WriteLine(“THE UNION HAS WON THE WAR”)

LN2950:

TextWindow.WriteLine(“”)

If R1=0 Then

Goto LN3100

EndIf

TextWindow.WriteLine(“FOR THE “+(W+L+W0)+” BATTLES FOUGHT (EXCUDING RERUNS)”)

TextWindow.Write(”   “)

TextWindow.WriteLine(”                    CONFEDERACY   UNION”)

TextWindow.WriteLine(Text.Append(“HISTORICAL LOSSES          “, Math.floor(P1+.5))+”    “+Math.floor(P2+.5))

TextWindow.WriteLine(Text.Append(“SIMULATED LOSSES           “,Math.floor(T1+.5))+”   “+Math.Floor(T2+.5))

TextWindow.WriteLine(“”)

TextWindow.WriteLine(Text.Append(“% OF ORIGINAL              “,math.floor(100*(T1/P1)+.5))+”    “+Math.floor(100*(T2/P2)+.5))

If BD=”YES” Then

Goto LN3100

EndIf

TextWindow.WriteLine(“”)

TextWindow.WriteLine(“UNION INTELLIGENCE SUGGESTS THAT THE SOUTH USED “)

TextWindow.WriteLine(“STRATEGIES 1, 2, 3, 4 IN THE FOLLOWING PERCENTAGES”)

TextWindow.WriteLine(”   1 – ” + SArray[1])

TextWindow.WriteLine(”   2 – ” + SArray[2])

TextWindow.WriteLine(”   3 – ” + SArray[3])

TextWindow.WriteLine(”   4 – ” + SArray[4])

‘  ———————————

LN3100:

TextWindow.Write(“Press ENTER to Stop”)

JJJ = TextWindow.Read()

Program.End()

Sub Sub3110

‘   – UNION STRATEGY IS COMPUTER CHOSEN

TextWindow.Write(“UNION STRATEGY IS “)

If A <> 0 Then

Goto LN3180

EndIf

LN3140:

Y2 = TextWindow.ReadNumber()

If Y2 <=0 Then

Goto LN3160

EndIf

If Y2<5 Then

Goto LN3290

EndIf

LN3160:

TextWindow.WriteLine(“ENTER 1 , 2 ,3 , OR 4 (USUALLY PREVIOUS UNION STRATEGY)”)

Goto LN3140

LN3180:

S0=0

R=100*Math.GetRandomNumber(999)/1000

For I=1 To 4

S0=S0+SArray[I]

‘   – IF ACTUAL STRATEGY INFO IS IN PROGRAM DATA STATEMENTS

‘     THEN R-100 IS EXTRA WEIGHT GIVEN TO THAT STATEGY.

If RThen

Goto LN3270

EndIf

EndFor

‘   – IF ACTUAL STRAT. IN,THEN HERE IS Y2= HIST. STRAT.

LN3270:

Y2=I

TextWindow.WriteLine(Y2)

LN3290:

EndSub

Sub Sub3300

‘   LEARN  PRESENT STRATEGY, START FORGETTING OLD ONES

‘   – PRESENT STRATEGY OF SOUTH GAINS 3*S, OTHERS LOSE S

‘     PROBABILITY POINTS, UNLESS A STRATEGY FALLS BELOW 5%.

S = 3

S0=0

For I=1 To 4

If SArray[I] <= 5 Then

Goto LN3390

EndIf

SArray[I]=SArray[I]-S

S0=S0+S

LN3390:

EndFor

SArray[Y]=SArray[Y]+S0

EndSub

LN3580:

TextWindow.WriteLine(“JULY 21, 1861.  GEN. BEAUREGARD, COMMANDING THE SOUTH, MET”)

TextWindow.WriteLine(“UNION FORCES WITH GEN. MCDOWELL IN A PREMATURE BATTLE AT”)

TextWindow.WriteLine(“BULL RUN. GEN. JACKSON HELPED PUSH BACK THE UNION ATTACK.”)

Goto LN1150

LN3620:

TextWindow.WriteLine(“APRIL 6-7, 1862.  THE CONFEDERATE SURPRISE ATTACK AT”)

TextWindow.WriteLine(“SHILOH FAILED DUE TO POOR ORGANIZATION.”)

Goto LN1150

LN3650:

TextWindow.WriteLine(“JUNE 25-JULY 1, 1862.  GENERAL LEE (CSA) UPHELD THE”)

TextWindow.WriteLine(“OFFENSIVE THROUGHOUT THE BATTLE AND FORCED GEN. MCCLELLAN”)

TextWindow.WriteLine(“AND THE UNION FORCES AWAY FROM RICHMOND.”)

Goto LN1150

LN3690:

TextWindow.Write(“AUG 29-30, 1862.  THE COMBINED CONFEDERATE FORCES UNDER”)

TextWindow.WriteLine(” LEE”)

TextWindow.WriteLine(“AND JACKSON DROVE THE UNION FORCES BACK INTO WASHINGTON.”)

Goto LN1150

LN3720:

TextWindow.WriteLine(“SEPT 17, 1862.  THE SOUTH FAILED TO INCORPORATE MARYLAND”)

TextWindow.WriteLine(“INTO THE CONFEDERACY.”)

Goto LN1150

LN3750:

TextWindow.WriteLine(“DEC 13, 1862.  THE CONFEDERACY UNDER LEE SUCCESSFULLY”)

TextWindow.WriteLine(“REPULSED AN ATTACK BY THE UNION UNDER GEN. BURNSIDE.”)

Goto LN1150

LN3780:

TextWindow.Write(“DEC 31, 1862.  THE SOUTH UNDER GEN. BRAGG WON A CLOSE “)

TextWindow.WriteLine(“BATTLE.”)

Goto LN1150

LN3800:

TextWindow.WriteLine(“MAY 1-6, 1863.  THE SOUTH HAD A COSTLY VICTORY AND LOST”)

TextWindow.WriteLine(“ONE OF THEIR OUTSTANDING GENERALS, ‘STONEWALL’ JACKSON.”)

Goto LN1150

LN3830:

TextWindow.WriteLine(“JULY 4, 1863.  VICKSBURG WAS A COSTLY DEFEAT FOR THE SOUTH”)

TextWindow.WriteLine(“BECAUSE IT GAVE THE UNION ACCESS TO THE MISSISSIPPI.”)

Goto LN1150

LN3860:

TextWindow.Write(“JULY 1-3, 1863.  A SOUTHERN MISTAKE BY GEN. LEE AT “)

TextWindow.WriteLine(“GETTYSBURG”)

TextWindow.WriteLine(“COST THEM ONE OF THE MOST CRUCIAL BATTLES OF THE WAR.”)

Goto LN1150

LN3890:

TextWindow.WriteLine(“SEPT. 15, 1863. CONFUSION IN A FOREST NEAR CHICKAMAUGA LED”)

TextWindow.WriteLine(“TO A COSTLY SOUTHERN VICTORY.”)

Goto LN1150

LN3920:

TextWindow.WriteLine(“NOV. 25, 1863. AFTER THE SOUTH HAD SIEGED GEN. ROSENCRANS'”)

TextWindow.WriteLine(“ARMY FOR THREE MONTHS, GEN. GRANT BROKE THE SIEGE.”)

Goto LN1150

LN3950:

TextWindow.WriteLine(“MAY 5, 1864.  GRANT’S PLAN TO KEEP LEE ISOLATED BEGAN TO”)

TextWindow.WriteLine(“FAIL HERE, AND CONTINUED AT COLD HARBOR AND PETERSBURG.”)

Goto LN1150

LN3980:

TextWindow.WriteLine(“AUGUST, 1864.  SHERMAN AND THREE VETERAN ARMIES CONVERGED”)

TextWindow.WriteLine(“ON ATLANTA AND DEALT THE DEATH BLOW TO THE CONFEDERACY.”)

Goto LN1150

Sample Run:

COPYRIGHTED MATERIAL