Program GameScaleProgram;
(** c Copyright 1997 Louis R. Coatney **)
uses
CRT;
var
Done, LoopDone, LoopDeLoopDone, Loop1Done, Loop2Done, Loop3Done,
Loop4Done : Boolean;
Q : String[1];
GameScale, TimeScale, SpeedScale : real;
Procedure GameScaleDetermination;
begin
ClrScr;
GameScale := 333.33;
TimeScale := 5;
SpeedScale := 0.5;
GoToXY(18,1);writeln('NAVAL WARGAME GAMESCALE SELECTION');
writeln;
writeln('A very good scale for a naval wargame is 333.33 yards/meters per');
writeln(' inch/centimeter, 5 minutes per gameturn, and .5 in/cm per knot of speed.');
writeln;
writeln('This is ideal for floor play (in inches) at 1:1200 model scale');
writeln(' and tabletop play (in cms) at 1:4800 model scale.');
writeln;
Loop1Done := false;
While Loop1Done = false do
begin
Q := ' ';
writeln('At this scale of ',GameScale:6:2,' yds/m per in/cm, ...');
writeln;
writeln('the 36,000 yd range of a battleship comes out to ',36000/GameScale:5:0,
' in/cm or ',36000/GameScale/12:6:1,' feet.');
writeln('the 30,000 yd range of a heavy cruiser comes out to ',30000/GameScale:5:0,
' in/cm or ',30000/GameScale/12:6:1,' feet.');
writeln('the 24,000 yd range of a light cruiser comes out to ',24000/GameScale:5:0,
' in/cm or ',24000/GameScale/12:6:1,' feet.');
writeln('and the 18,000 yd range of a destroyer comes out to ',18000/GameScale:5:0,
' in/cm or ',18000/GameScale/12:6:1,' feet.');
writeln;
writeln;
writeln('At ',TimeScale:4:2,' minutes per turn -- which produces ',
60/TimeScale:4:2,' turns per hour');
writeln(' -- speed should be ',SpeedScale:4:2,' in/cm per knot per turn.');
writeln;
writeln('Thus, a 48-knot torpedo with an maximum range of 8,000 yds --');
writeln(' ',8000/GameScale:6:0,' in/cms -- could theoretically travel');
writeln(' ',48*SpeedScale:6:0,' in/cm per turn, equaling ',
48*SpeedScale/8000*GameScale*100:6:2,'% of its maximum range.');
writeln;
writeln(' To continue, just hit the ENTER key.');readln;
ClrScr;
writeln(' NAVAL WARGAME GAMESCALE VS. MODEL SELECTION CONSIDERATIONS');
writeln;
writeln('At a 1:1 model-to-range scale, the max. gun range of a battleship would be:');
writeln(' 750 feet (or 250 yards) at 1:144 (RC Combat) scale.');
writeln(' 360 feet (or 120 yards) at 1:300 scale.');
writeln(' 180 feet (or 60 yards) at 1:600 scale.');
writeln(' 154.3 feet (or 51.5 yards) at 1:700 scale.');
writeln(' 90 feet (or 30 yards) at 1:1200 scale.');
writeln(' 45 feet (or 15 yards) at 1:2400 scale.');
writeln(' 22.5 feet (or 7.5 yards) at 1:4800 scale.');
writeln(' 18 feet (or 6 yards) at 1:6000 scale.');
writeln;
writeln('For model-to-gamescale proportions, at this scale of ',GameScale:6:2,' yds/m per in/cm a');
writeln(' 1:144 (4 yds/in) model ship would be ',GameScale*36/144:6:2,' times the size it should be.');
writeln(' 1:300 (8.33 yds/in) model ship would be ',GameScale*36/300:6:2,' times the size it should be.');
writeln(' 1:600 (16.67 yds/in) model ship would be ',GameScale*36/600:6:2,' times the size it should be.');
writeln(' 1:700 (19.44 yds/in) model ship would be ',GameScale*36/700:6:2,' times the size it should be.');
writeln(' 1:720 (20 yds/in) model ship would be ',GameScale*36/720:6:2,' times the size it should be.');
writeln(' 1:1200 (33.33 yds/in) model ship would be ',GameScale*36/1200:6:2,' times the size it should be.');
writeln(' 1:2400 (66.67 yds/in) model ship would be ',GameScale*36/2400:6:2,' times the size it should be.');
writeln(' 1:3000 (83.33 yds/in) model ship would be ',GameScale*36/3000:6:2,' times the size it should be.');
writeln(' 1:4800 (133.33 yds/in) model ship would be ',GameScale*36/4800:6:2,' times the size it should be.');
writeln(' 1:6000 (166.67 yds/in) model ship would be ',GameScale*36/6000:6:2,' times the size it should be.');
writeln(' To continue, just hit the ENTER key.');readln;
ClrScr;
writeln;
writeln(' NAVAL WARGAME GAMESCALE SELECTION/CONFIRMATION');
writeln;
writeln;
writeln('Again, at this scale of ',GameScale:6:2,' yds/m per in/cm, ...');
writeln;
writeln('the 36,000 yd range of a battleship comes out to ',36000/GameScale:5:0,
' in/cm or ',36000/GameScale/12:6:1,' feet.');
writeln('the 30,000 yd range of a heavy cruiser comes out to ',30000/GameScale:5:0,
' in/cm or ',30000/GameScale/12:6:1,' feet.');
writeln('the 24,000 yd range of a light cruiser comes out to ',24000/GameScale:5:0,
' in/cm or ',24000/GameScale/12:6:1,' feet.');
writeln('and the 18,000 yd range of a destroyer comes out to ',18000/GameScale:5:0,
' in/cm or ',18000/GameScale/12:6:1,' feet.');
writeln;
writeln;
writeln('If these scales of');
writeln(' ',GameScale:6:2,' yards/meters per inch/centimeter');
writeln(' ',TimeScale:4:2,' minutes per gameturn');
writeln(' and ',SpeedScale:4:2,' inches/centimeters per knot of speed');
writeln(' are acceptable, just hit the ENTER key.');
writeln;
writeln('Otherwise,');
writeln(' if you want to change the yds/m per in/cm game-scale, Enter G');
writeln(' if you want to change the number of minutes per turn, Enter M');
writeln(' if you want to change the distance moved per knot per turn, Enter K');
readln(Q);
If (Q[1] = 'G') or (Q[1] = 'g') then
begin
writeln('How many yds/m per in/cm would you like?');
readln(GameScale);
SpeedScale := 2000/GameScale*TimeScale/60;
writeln('If you want to change the number of minutes per turn, Enter M');
writeln('If you want to change the distance moved per knot per turn, Enter K');
readln(Q);
end;
If (Q[1] = 'M') or (Q[1] = 'm') then
begin
writeln('How many minutes of real time per turn do you want?');
readln(TimeScale);
SpeedScale := 2000/GameScale*TimeScale/60;
writeln('If you would like to change the distance per knot per turn, Enter D');
readln(Q);
end;
If (Q[1] = 'K') or (Q[1] = 'k') then
begin
writeln('How many in/cms per knot per turn do you want a ship to travel?');
readln(SpeedScale);
TimeScale := SpeedScale*GameScale*60/2000;
end;
If (Q[1] = 'D') or (Q[1] = 'd') then
begin
writeln('How many in/cms per knot per turn do you want a ship to travel?');
readln(SpeedScale);
GameScale := TimeScale*2000/60/SpeedScale;
end;
If (Q[1] <> 'G') and (Q[1] <> 'g') and (Q[1] <> 'M') and (Q[1] <> 'm')
and (Q[1] <> 'K') and (Q[1] <> 'k') and (Q[1] <> 'D') and (Q[1] <> 'd')
then Loop1Done := true;
ClrScr;
If (Q[1] = 'G') or (Q[1] = 'g') or (Q[1] = 'M') or (Q[1] = 'm')
or (Q[1] = 'K') or (Q[1] = 'k') or (Q[1] = 'D') or (Q[1] = 'd')
then writeln(' NEW GAME SCALE'); writeln;
end;
end;
Procedure FrontPage;
begin
ClrScr;
(** TextColor(Black);TextBackground(LightGray); **)
GoToXY(30,8);writeln('GAMESCALE');
writeln;
writeln('A program to determine the distance and time scale of a naval wargame.');
GoToXY(20,16);writeln('Copyright 1996 Louis R. Coatney');
GoToXY(25,21);writeln('To begin, Hit ENTER');
readln
end;
Procedure Bye;
begin
GoToXY(25,12);writeln('BYE');
readln;
end;
begin
FrontPage;
GameScaleDetermination;
Bye;
end.