mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2026-01-05 09:39:32 -08:00
Removed spaces from top-level directory names.
Spaces tend to cause annoyances in a Unix-style shell environment. This change fixes that.
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
using SuperStarTrek.Space;
|
||||
|
||||
namespace SuperStarTrek.Systems.ComputerFunctions
|
||||
{
|
||||
internal abstract class ComputerFunction
|
||||
{
|
||||
protected ComputerFunction(string description, Output output)
|
||||
{
|
||||
Description = description;
|
||||
Output = output;
|
||||
}
|
||||
|
||||
internal string Description { get; }
|
||||
|
||||
protected Output Output { get; }
|
||||
|
||||
internal abstract void Execute(Quadrant quadrant);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using SuperStarTrek.Space;
|
||||
|
||||
namespace SuperStarTrek.Systems.ComputerFunctions
|
||||
{
|
||||
internal class CumulativeGalacticRecord : GalacticReport
|
||||
{
|
||||
internal CumulativeGalacticRecord(Output output, Galaxy galaxy)
|
||||
: base("Cumulative galactic record", output, galaxy)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void WriteHeader(Quadrant quadrant) =>
|
||||
Output.NextLine().WriteLine($"Computer record of galaxy for quadrant {quadrant.Coordinates}").NextLine();
|
||||
|
||||
protected override IEnumerable<string> GetRowData() =>
|
||||
Galaxy.Quadrants.Select(row => " " + string.Join(" ", row));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using SuperStarTrek.Objects;
|
||||
using SuperStarTrek.Space;
|
||||
|
||||
namespace SuperStarTrek.Systems.ComputerFunctions
|
||||
{
|
||||
internal class DirectionDistanceCalculator : NavigationCalculator
|
||||
{
|
||||
private readonly Enterprise _enterprise;
|
||||
private readonly Input _input;
|
||||
|
||||
internal DirectionDistanceCalculator(Enterprise enterprise, Output output, Input input)
|
||||
: base("Direction/distance calculator", output)
|
||||
{
|
||||
_enterprise = enterprise;
|
||||
_input = input;
|
||||
}
|
||||
|
||||
internal override void Execute(Quadrant quadrant)
|
||||
{
|
||||
Output.WriteLine("Direction/distance calculator:")
|
||||
.Write($"You are at quadrant {_enterprise.QuadrantCoordinates}")
|
||||
.WriteLine($" sector {_enterprise.SectorCoordinates}")
|
||||
.WriteLine("Please enter");
|
||||
|
||||
WriteDirectionAndDistance(
|
||||
_input.GetCoordinates(" Initial coordinates"),
|
||||
_input.GetCoordinates(" Final coordinates"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using SuperStarTrek.Space;
|
||||
|
||||
namespace SuperStarTrek.Systems.ComputerFunctions
|
||||
{
|
||||
internal abstract class GalacticReport : ComputerFunction
|
||||
{
|
||||
internal GalacticReport(string description, Output output, Galaxy galaxy)
|
||||
: base(description, output)
|
||||
{
|
||||
Galaxy = galaxy;
|
||||
}
|
||||
|
||||
protected Galaxy Galaxy { get; }
|
||||
|
||||
protected abstract void WriteHeader(Quadrant quadrant);
|
||||
|
||||
protected abstract IEnumerable<string> GetRowData();
|
||||
|
||||
internal sealed override void Execute(Quadrant quadrant)
|
||||
{
|
||||
WriteHeader(quadrant);
|
||||
Output.WriteLine(" 1 2 3 4 5 6 7 8")
|
||||
.WriteLine(" ----- ----- ----- ----- ----- ----- ----- -----");
|
||||
|
||||
foreach (var (row, index) in GetRowData().Select((r, i) => (r, i)))
|
||||
{
|
||||
Output.WriteLine($" {index+1} {row}")
|
||||
.WriteLine(" ----- ----- ----- ----- ----- ----- ----- -----");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using SuperStarTrek.Resources;
|
||||
using SuperStarTrek.Space;
|
||||
|
||||
namespace SuperStarTrek.Systems.ComputerFunctions
|
||||
{
|
||||
internal class GalaxyRegionMap : GalacticReport
|
||||
{
|
||||
internal GalaxyRegionMap(Output output, Galaxy galaxy)
|
||||
: base("Galaxy 'region name' map", output, galaxy)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void WriteHeader(Quadrant quadrant) =>
|
||||
Output.WriteLine(" The Galaxy");
|
||||
|
||||
protected override IEnumerable<string> GetRowData() =>
|
||||
Strings.RegionNames.Split('\n').Select(n => n.TrimEnd('\r'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using SuperStarTrek.Space;
|
||||
using SuperStarTrek.Utils;
|
||||
|
||||
namespace SuperStarTrek.Systems.ComputerFunctions
|
||||
{
|
||||
internal abstract class NavigationCalculator : ComputerFunction
|
||||
{
|
||||
protected NavigationCalculator(string description, Output output)
|
||||
: base(description, output)
|
||||
{
|
||||
}
|
||||
|
||||
protected void WriteDirectionAndDistance(Coordinates from, Coordinates to)
|
||||
{
|
||||
var (direction, distance) = from.GetDirectionAndDistanceTo(to);
|
||||
Write(direction, distance);
|
||||
}
|
||||
|
||||
protected void WriteDirectionAndDistance((float X, float Y) from, (float X, float Y) to)
|
||||
{
|
||||
var (direction, distance) = DirectionAndDistance.From(from.X, from.Y).To(to.X, to.Y);
|
||||
Write(direction, distance);
|
||||
}
|
||||
|
||||
private void Write(float direction, float distance) =>
|
||||
Output.WriteLine($"Direction = {direction}")
|
||||
.WriteLine($"Distance = {distance}");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using SuperStarTrek.Objects;
|
||||
using SuperStarTrek.Resources;
|
||||
using SuperStarTrek.Space;
|
||||
|
||||
namespace SuperStarTrek.Systems.ComputerFunctions
|
||||
{
|
||||
internal class StarbaseDataCalculator : NavigationCalculator
|
||||
{
|
||||
private readonly Enterprise _enterprise;
|
||||
|
||||
internal StarbaseDataCalculator(Enterprise enterprise, Output output)
|
||||
: base("Starbase nav data", output)
|
||||
{
|
||||
_enterprise = enterprise;
|
||||
}
|
||||
|
||||
internal override void Execute(Quadrant quadrant)
|
||||
{
|
||||
if (!quadrant.HasStarbase)
|
||||
{
|
||||
Output.WriteLine(Strings.NoStarbase);
|
||||
return;
|
||||
}
|
||||
|
||||
Output.WriteLine("From Enterprise to Starbase:");
|
||||
|
||||
WriteDirectionAndDistance(_enterprise.SectorCoordinates, quadrant.Starbase.Sector);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using SuperStarTrek.Commands;
|
||||
using SuperStarTrek.Objects;
|
||||
using SuperStarTrek.Space;
|
||||
|
||||
namespace SuperStarTrek.Systems.ComputerFunctions
|
||||
{
|
||||
internal class StatusReport : ComputerFunction
|
||||
{
|
||||
private readonly Game _game;
|
||||
private readonly Galaxy _galaxy;
|
||||
private readonly Enterprise _enterprise;
|
||||
|
||||
internal StatusReport(Game game, Galaxy galaxy, Enterprise enterprise, Output output)
|
||||
: base("Status report", output)
|
||||
{
|
||||
_game = game;
|
||||
_galaxy = galaxy;
|
||||
_enterprise = enterprise;
|
||||
}
|
||||
|
||||
internal override void Execute(Quadrant quadrant)
|
||||
{
|
||||
Output.WriteLine(" Status report:")
|
||||
.Write("Klingon".Pluralize(_galaxy.KlingonCount)).WriteLine($" left: {_galaxy.KlingonCount}")
|
||||
.WriteLine($"Mission must be completed in {_game.StardatesRemaining:0.#} stardates.");
|
||||
|
||||
if (_galaxy.StarbaseCount > 0)
|
||||
{
|
||||
Output.Write($"The Federation is maintaining {_galaxy.StarbaseCount} ")
|
||||
.Write("starbase".Pluralize(_galaxy.StarbaseCount)).WriteLine(" in the galaxy.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Output.WriteLine("Your stupidity has left you on your own in")
|
||||
.WriteLine(" the galaxy -- you have no starbases left!");
|
||||
}
|
||||
|
||||
_enterprise.Execute(Command.DAM);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using SuperStarTrek.Objects;
|
||||
using SuperStarTrek.Resources;
|
||||
using SuperStarTrek.Space;
|
||||
|
||||
namespace SuperStarTrek.Systems.ComputerFunctions
|
||||
{
|
||||
internal class TorpedoDataCalculator : NavigationCalculator
|
||||
{
|
||||
private readonly Enterprise _enterprise;
|
||||
|
||||
internal TorpedoDataCalculator(Enterprise enterprise, Output output)
|
||||
: base("Photon torpedo data", output)
|
||||
{
|
||||
_enterprise = enterprise;
|
||||
}
|
||||
|
||||
internal override void Execute(Quadrant quadrant)
|
||||
{
|
||||
if (!quadrant.HasKlingons)
|
||||
{
|
||||
Output.WriteLine(Strings.NoEnemyShips);
|
||||
return;
|
||||
}
|
||||
|
||||
Output.WriteLine("From Enterprise to Klingon battle cruiser".Pluralize(quadrant.KlingonCount));
|
||||
|
||||
foreach (var klingon in quadrant.Klingons)
|
||||
{
|
||||
WriteDirectionAndDistance(_enterprise.SectorCoordinates, klingon.Sector);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user