mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-12 15:50:20 -08:00
Merge pull request #379 from marijnz0r/main
Add csharp version of 40_Gunner
This commit is contained in:
124
42_Gunner/csharp/Program.cs
Normal file
124
42_Gunner/csharp/Program.cs
Normal file
@@ -0,0 +1,124 @@
|
||||
namespace Gunner
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
PrintIntro();
|
||||
|
||||
string keepPlaying = "Y";
|
||||
|
||||
while (keepPlaying == "Y") {
|
||||
PlayGame();
|
||||
Console.WriteLine("TRY AGAIN (Y OR N)");
|
||||
keepPlaying = Console.ReadLine();
|
||||
}
|
||||
}
|
||||
|
||||
static void PlayGame()
|
||||
{
|
||||
int totalAttempts = 0;
|
||||
int amountOfGames = 0;
|
||||
|
||||
while (amountOfGames < 4) {
|
||||
|
||||
int maximumRange = new Random().Next(0, 40000) + 20000;
|
||||
Console.WriteLine($"MAXIMUM RANGE OF YOUR GUN IS {maximumRange} YARDS." + Environment.NewLine + Environment.NewLine + Environment.NewLine);
|
||||
|
||||
int distanceToTarget = (int) (maximumRange * (0.1 + 0.8 * new Random().NextDouble()));
|
||||
Console.WriteLine($"DISTANCE TO THE TARGET IS {distanceToTarget} YARDS.");
|
||||
|
||||
(bool gameWon, int attempts) = HitTheTarget(maximumRange, distanceToTarget);
|
||||
|
||||
if(!gameWon) {
|
||||
Console.WriteLine(Environment.NewLine + "BOOM !!!! YOU HAVE JUST BEEN DESTROYED" + Environment.NewLine +
|
||||
"BY THE ENEMY." + Environment.NewLine + Environment.NewLine + Environment.NewLine
|
||||
);
|
||||
PrintReturnToBase();
|
||||
break;
|
||||
} else {
|
||||
amountOfGames += 1;
|
||||
totalAttempts += attempts;
|
||||
|
||||
Console.WriteLine($"TOTAL ROUNDS EXPENDED WERE:{totalAttempts}");
|
||||
|
||||
if (amountOfGames < 4) {
|
||||
Console.WriteLine("THE FORWARD OBSERVER HAS SIGHTED MORE ENEMY ACTIVITY...");
|
||||
} else {
|
||||
if (totalAttempts > 18) {
|
||||
PrintReturnToBase();
|
||||
} else {
|
||||
Console.WriteLine($"NICE SHOOTING !!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static (bool, int) HitTheTarget(int maximumRange, int distanceToTarget)
|
||||
{
|
||||
int attempts = 0;
|
||||
|
||||
while (attempts < 6)
|
||||
{
|
||||
int elevation = GetElevation();
|
||||
|
||||
int differenceBetweenTargetAndImpact = CalculateDifferenceBetweenTargetAndImpact(maximumRange, distanceToTarget, elevation);
|
||||
|
||||
if (Math.Abs(differenceBetweenTargetAndImpact) < 100)
|
||||
{
|
||||
Console.WriteLine($"*** TARGET DESTROYED *** {attempts} ROUNDS OF AMMUNITION EXPENDED.");
|
||||
return (true, attempts);
|
||||
}
|
||||
else if (differenceBetweenTargetAndImpact > 100)
|
||||
{
|
||||
Console.WriteLine($"OVER TARGET BY {Math.Abs(differenceBetweenTargetAndImpact)} YARDS.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"SHORT OF TARGET BY {Math.Abs(differenceBetweenTargetAndImpact)} YARDS.");
|
||||
}
|
||||
|
||||
attempts += 1;
|
||||
}
|
||||
return (false, attempts);
|
||||
}
|
||||
|
||||
static int CalculateDifferenceBetweenTargetAndImpact(int maximumRange, int distanceToTarget, int elevation)
|
||||
{
|
||||
double weirdNumber = 2 * elevation / 57.3;
|
||||
double distanceShot = maximumRange * Math.Sin(weirdNumber);
|
||||
return (int)distanceShot - distanceToTarget;
|
||||
}
|
||||
|
||||
static void PrintReturnToBase()
|
||||
{
|
||||
Console.WriteLine("BETTER GO BACK TO FORT SILL FOR REFRESHER TRAINING!");
|
||||
}
|
||||
|
||||
static int GetElevation()
|
||||
{
|
||||
Console.WriteLine("ELEVATION");
|
||||
int elevation = int.Parse(Console.ReadLine());
|
||||
if (elevation > 89) {
|
||||
Console.WriteLine("MAXIMUM ELEVATION IS 89 DEGREES");
|
||||
return GetElevation();
|
||||
}
|
||||
if (elevation < 1) {
|
||||
Console.WriteLine("MINIMUM ELEVATION IS 1 DEGREE");
|
||||
return GetElevation();
|
||||
}
|
||||
return elevation;
|
||||
}
|
||||
|
||||
static void PrintIntro()
|
||||
{
|
||||
Console.WriteLine(new String(' ', 30) + "GUNNER");
|
||||
Console.WriteLine(new String(' ', 15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" + Environment.NewLine + Environment.NewLine + Environment.NewLine);
|
||||
Console.WriteLine("YOU ARE THE OFFICER-IN-CHARGE, GIVING ORDERS TO A GUN");
|
||||
Console.WriteLine("CREW, TELLING THEM THE DEGREES OF ELEVATION YOU ESTIMATE");
|
||||
Console.WriteLine("WILL PLACE A PROJECTILE ON TARGET. A HIT WITHIN 100 YARDS");
|
||||
Console.WriteLine("OF THE TARGET WILL DESTROY IT." + Environment.NewLine);
|
||||
}
|
||||
}
|
||||
}
|
||||
10
42_Gunner/csharp/csharp.csproj
Normal file
10
42_Gunner/csharp/csharp.csproj
Normal file
@@ -0,0 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
Reference in New Issue
Block a user