mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-12 15:50:20 -08:00
Merge pull request #659 from roygilliam/Orbit_Work
Initial C# conversion
This commit is contained in:
199
68_Orbit/csharp/program.cs
Normal file
199
68_Orbit/csharp/program.cs
Normal file
@@ -0,0 +1,199 @@
|
||||
using System.Text;
|
||||
|
||||
namespace Orbit
|
||||
{
|
||||
class Orbit
|
||||
{
|
||||
private void DisplayIntro()
|
||||
{
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("ORBIT".PadLeft(23));
|
||||
Console.WriteLine("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine();
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("SOMEWHERE ABOVE YOUR PLANET IS A ROMULAN SHIP.");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("THE SHIP IS IN A CONSTANT POLAR ORBIT. ITS");
|
||||
Console.WriteLine("DISTANCE FROM THE CENTER OF YOUR PLANET IS FROM");
|
||||
Console.WriteLine("10,000 TO 30,000 MILES AND AT ITS PRESENT VELOCITY CAN");
|
||||
Console.WriteLine("CIRCLE YOUR PLANET ONCE EVERY 12 TO 36 HOURS.");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("UNFORTUNATELY, THEY ARE USING A CLOAKING DEVICE SO");
|
||||
Console.WriteLine("YOU ARE UNABLE TO SEE THEM, BUT WITH A SPECIAL");
|
||||
Console.WriteLine("INSTRUMENT YOU CAN TELL HOW NEAR THEIR SHIP YOUR");
|
||||
Console.WriteLine("PHOTON BOMB EXPLODED. YOU HAVE SEVEN HOURS UNTIL THEY");
|
||||
Console.WriteLine("HAVE BUILT UP SUFFICIENT POWER IN ORDER TO ESCAPE");
|
||||
Console.WriteLine("YOUR PLANET'S GRAVITY.");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("YOUR PLANET HAS ENOUGH POWER TO FIRE ONE BOMB AN HOUR.");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("AT THE BEGINNING OF EACH HOUR YOU WILL BE ASKED TO GIVE AN");
|
||||
Console.WriteLine("ANGLE (BETWEEN 0 AND 360) AND A DISTANCE IN UNITS OF");
|
||||
Console.WriteLine("100 MILES (BETWEEN 100 AND 300), AFTER WHICH YOUR BOMB'S");
|
||||
Console.WriteLine("DISTANCE FROM THE ENEMY SHIP WILL BE GIVEN.");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("AN EXPLOSION WITHIN 5,000 MILES OF THE ROMULAN SHIP");
|
||||
Console.WriteLine("WILL DESTROY IT.");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("BELOW IS A DIAGRAM TO HELP YOU VISUALIZE YOUR PLIGHT.");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine();
|
||||
Console.WriteLine(" 90");
|
||||
Console.WriteLine(" 0000000000000");
|
||||
Console.WriteLine(" 0000000000000000000");
|
||||
Console.WriteLine(" 000000 000000");
|
||||
Console.WriteLine(" 00000 00000");
|
||||
Console.WriteLine(" 00000 XXXXXXXXXXX 00000");
|
||||
Console.WriteLine(" 00000 XXXXXXXXXXXXX 00000");
|
||||
Console.WriteLine(" 0000 XXXXXXXXXXXXXXX 0000");
|
||||
Console.WriteLine(" 0000 XXXXXXXXXXXXXXXXX 0000");
|
||||
Console.WriteLine(" 0000 XXXXXXXXXXXXXXXXXXX 0000");
|
||||
Console.WriteLine("180<== 00000 XXXXXXXXXXXXXXXXXXX 00000 ==>0");
|
||||
Console.WriteLine(" 0000 XXXXXXXXXXXXXXXXXXX 0000");
|
||||
Console.WriteLine(" 0000 XXXXXXXXXXXXXXXXX 0000");
|
||||
Console.WriteLine(" 0000 XXXXXXXXXXXXXXX 0000");
|
||||
Console.WriteLine(" 00000 XXXXXXXXXXXXX 00000");
|
||||
Console.WriteLine(" 00000 XXXXXXXXXXX 00000");
|
||||
Console.WriteLine(" 00000 00000");
|
||||
Console.WriteLine(" 000000 000000");
|
||||
Console.WriteLine(" 0000000000000000000");
|
||||
Console.WriteLine(" 0000000000000");
|
||||
Console.WriteLine(" 270");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("X - YOUR PLANET");
|
||||
Console.WriteLine("O - THE ORBIT OF THE ROMULAN SHIP");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("ON THE ABOVE DIAGRAM, THE ROMULAN SHIP IS CIRCLING");
|
||||
Console.WriteLine("COUNTERCLOCKWISE AROUND YOUR PLANET. DON'T FORGET THAT");
|
||||
Console.WriteLine("WITHOUT SUFFICIENT POWER THE ROMULAN SHIP'S ALTITUDE");
|
||||
Console.WriteLine("AND ORBITAL RATE WILL REMAIN CONSTANT.");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("GOOD LUCK. THE FEDERATION IS COUNTING ON YOU.");
|
||||
}
|
||||
|
||||
private bool PromptYesNo(string Prompt)
|
||||
{
|
||||
bool Success = false;
|
||||
|
||||
while (!Success)
|
||||
{
|
||||
Console.Write(Prompt);
|
||||
string LineInput = Console.ReadLine().Trim().ToLower();
|
||||
|
||||
if (LineInput.Equals("yes"))
|
||||
return true;
|
||||
else if (LineInput.Equals("no"))
|
||||
return false;
|
||||
else
|
||||
Console.WriteLine("Yes or No");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private int PromptForNumber(string Prompt)
|
||||
{
|
||||
bool InputSuccess = false;
|
||||
int ReturnResult = 0;
|
||||
|
||||
while (!InputSuccess)
|
||||
{
|
||||
Console.Write(Prompt);
|
||||
string Input = Console.ReadLine().Trim();
|
||||
InputSuccess = int.TryParse(Input, out ReturnResult);
|
||||
if (!InputSuccess)
|
||||
Console.WriteLine("*** Please enter a valid number ***");
|
||||
}
|
||||
|
||||
return ReturnResult;
|
||||
}
|
||||
|
||||
private void PlayOneRound()
|
||||
{
|
||||
Random rand = new Random();
|
||||
string Prompt = "";
|
||||
|
||||
int A_AngleToShip = 0;
|
||||
int D_DistanceFromBombToShip = 0;
|
||||
int R_DistanceToShip = 0;
|
||||
int H_Hour = 0;
|
||||
int A1_Angle = 0;
|
||||
int D1_DistanceForDetonation = 0;
|
||||
int T = 0;
|
||||
double C_ExplosionDistance = 0;
|
||||
|
||||
A_AngleToShip = Convert.ToInt32(360 * rand.NextDouble());
|
||||
D_DistanceFromBombToShip = Convert.ToInt32(200 * rand.NextDouble()) + 200;
|
||||
R_DistanceToShip = Convert.ToInt32(20 * rand.NextDouble()) + 10;
|
||||
|
||||
while (H_Hour < 7)
|
||||
{
|
||||
H_Hour++;
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine();
|
||||
Prompt = "This is hour " + H_Hour.ToString() + ", at what angle do you wish to send\nyour photon bomb? ";
|
||||
A1_Angle = PromptForNumber(Prompt);
|
||||
|
||||
D1_DistanceForDetonation = PromptForNumber("How far out do you wish to detonate it? ");
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine();
|
||||
|
||||
A_AngleToShip += R_DistanceToShip;
|
||||
if (A_AngleToShip >= 360)
|
||||
A_AngleToShip -= 360;
|
||||
|
||||
T = Math.Abs(A_AngleToShip = A1_Angle);
|
||||
if (T >= 180)
|
||||
T = 360 - T;
|
||||
|
||||
C_ExplosionDistance = Math.Sqrt(D_DistanceFromBombToShip * D_DistanceFromBombToShip + D1_DistanceForDetonation *
|
||||
D1_DistanceForDetonation - 2 * D_DistanceFromBombToShip * D1_DistanceForDetonation *
|
||||
Math.Cos(T * 3.14159 / 180));
|
||||
|
||||
Console.WriteLine("Your photon bomb exploded {0:N3}*10^2 miles from the", C_ExplosionDistance);
|
||||
Console.WriteLine("Romulan ship.");
|
||||
|
||||
if (C_ExplosionDistance <= 50)
|
||||
{
|
||||
Console.WriteLine("You have successfully completed your mission.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine("You allowed the Romulans to escape.");
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
public void Play()
|
||||
{
|
||||
bool ContinuePlay = true;
|
||||
|
||||
DisplayIntro();
|
||||
|
||||
do
|
||||
{
|
||||
PlayOneRound();
|
||||
|
||||
Console.WriteLine("Another Romulan ship has gone in to orbit.");
|
||||
ContinuePlay = PromptYesNo("Do you wish to try to destroy it? ");
|
||||
}
|
||||
while (ContinuePlay);
|
||||
|
||||
Console.WriteLine("Good bye.");
|
||||
}
|
||||
}
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
|
||||
new Orbit().Play();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user