Introduce enum for directions

Instead of cleverly constructing the output string, explicitly test for
what the resulting direction is.
This commit is contained in:
epvanhouten
2021-02-27 19:50:56 -06:00
parent 8f613a0237
commit c206605da5

View File

@@ -43,7 +43,8 @@ namespace hurkle
X = int.Parse(seperateStrings[0]), X = int.Parse(seperateStrings[0]),
Y = int.Parse(seperateStrings[1]) Y = int.Parse(seperateStrings[1])
}; };
if(Math.Abs(guessPoint.X-hurklePoint.X) + Math.Abs(guessPoint.Y-hurklePoint.Y) == 0)
if(guessPoint.GetDirectionTo(hurklePoint) == CardinalDirection.None)
{ {
/* /*
500 REM 500 REM
@@ -71,51 +72,103 @@ namespace hurkle
private static void PrintInfo(GamePoint guess, GamePoint target) private static void PrintInfo(GamePoint guess, GamePoint target)
{ {
/*
610 PRINT "GO ";
*/
Console.Write("GO "); Console.Write("GO ");
/* switch(guess.GetDirectionTo(target))
620 IF Y=B THEN 670
630 IF Y<B THEN 660
640 PRINT "SOUTH";
650 GO TO 670
660 PRINT "NORTH";
*/
if(guess.Y>target.Y)
{ {
Console.Write("SOUTH"); case CardinalDirection.East:
}else if(guess.Y<target.Y) Console.WriteLine("EAST");
{ break;
Console.Write("NORTH"); case CardinalDirection.North:
} Console.WriteLine("NORTH");
/* break;
670 IF X=A THEN 720 case CardinalDirection.South:
680 IF X<A THEN 710 Console.WriteLine("SOUTH");
690 PRINT "WEST"; break;
700 GO TO 720 case CardinalDirection.West:
710 PRINT "EAST"; Console.WriteLine("WEST");
*/ break;
if(guess.X<target.X) case CardinalDirection.NorthEast:
{ Console.WriteLine("NORTHEAST");
Console.Write("EAST"); break;
}else if(guess.X>target.X) case CardinalDirection.NorthWest:
{ Console.WriteLine("NORTHWEST");
Console.Write("WEST"); break;
case CardinalDirection.SouthEast:
Console.WriteLine("SOUTHEAST");
break;
case CardinalDirection.SouthWest:
Console.WriteLine("SOUTHWEST");
break;
} }
Console.WriteLine(); Console.WriteLine();
/* }
720 PRINT
730 RETURN private enum CardinalDirection
*/ {
None,
North,
NorthEast,
East,
SouthEast,
South,
SouthWest,
West,
NorthWest
} }
private class GamePoint private class GamePoint
{ {
public int X {get;init;} public int X {get;init;}
public int Y {get;init;} public int Y {get;init;}
public CardinalDirection GetDirectionTo(GamePoint target)
{
if(X == target.X)
{
if(Y > target.Y)
{
return CardinalDirection.South;
}
else if(Y < target.Y)
{
return CardinalDirection.North;
}
else
{
return CardinalDirection.None;
}
}
else if(X > target.X)
{
if(Y == target.Y)
{
return CardinalDirection.West;
}
else if(Y > target.Y)
{
return CardinalDirection.SouthWest;
}
else
{
return CardinalDirection.NorthWest;
}
}
else
{
if(Y == target.Y)
{
return CardinalDirection.East;
}
else if(Y > target.Y)
{
return CardinalDirection.SouthEast;
}
else{
return CardinalDirection.NorthEast;
}
}
}
} }
} }
} }