Implement strategy pattern

This commit is contained in:
Stone_Red
2023-05-31 09:24:32 +02:00
parent 1b1b568bb0
commit 1775929ced
10 changed files with 80 additions and 43 deletions
+8 -8
View File
@@ -3,17 +3,17 @@ using Maze.Utlis;
namespace Maze.Solvers;
internal class BreadthFirstSearchMazeSolver : IMazeSolver<BfsNode>
internal class BreadthFirstSearchMazeSolver : IMazeSolver
{
public List<BfsNode> Solve(BfsNode node, BfsNode[,] maze, GraphicsMode graphicsMode = GraphicsMode.None)
public List<MazeNode> Solve(MazeNode node, MazeNode[,] maze, GraphicsMode graphicsMode = GraphicsMode.None)
{
if (!node.Start)
{
throw new MazeException("Node is not a start node.");
}
BfsNode currentNode;
Queue<BfsNode> queue = new Queue<BfsNode>();
MazeNode currentNode;
Queue<MazeNode> queue = new Queue<MazeNode>();
queue.Enqueue(node);
@@ -28,8 +28,8 @@ internal class BreadthFirstSearchMazeSolver : IMazeSolver<BfsNode>
if (currentNode.Goal)
{
List<BfsNode> path = new List<BfsNode>();
BfsNode? pathNode = currentNode;
List<MazeNode> path = new List<MazeNode>();
MazeNode? pathNode = currentNode;
while (pathNode is not null && !pathNode.Start)
{
@@ -41,7 +41,7 @@ internal class BreadthFirstSearchMazeSolver : IMazeSolver<BfsNode>
return path;
}
foreach (BfsNode child in currentNode.Neighbors.Where(n => !n.Visited && !n.Wall))
foreach (MazeNode child in currentNode.Neighbors.Where(n => !n.Visited && !n.Wall))
{
child.Parent = currentNode;
child.Visited = true;
@@ -65,6 +65,6 @@ internal class BreadthFirstSearchMazeSolver : IMazeSolver<BfsNode>
}
}
return new List<BfsNode>();
return new List<MazeNode>();
}
}
+8 -8
View File
@@ -3,18 +3,18 @@ using Maze.Utlis;
namespace Maze.Solvers;
internal class DepthFirstSearchMazeSolver : IMazeSolver<DfsNode>
internal class DepthFirstSearchMazeSolver : IMazeSolver
{
public List<DfsNode> Solve(DfsNode node, DfsNode[,] maze, GraphicsMode graphicsMode = GraphicsMode.None)
public List<MazeNode> Solve(MazeNode node, MazeNode[,] maze, GraphicsMode graphicsMode = GraphicsMode.None)
{
if (!node.Start)
{
throw new MazeException("Node is not a start node.");
}
DfsNode? currentNode = node;
DfsNode? tempNode = null;
Stack<DfsNode> path = new Stack<DfsNode>();
MazeNode? currentNode = node;
MazeNode? tempNode = null;
Stack<MazeNode> path = new Stack<MazeNode>();
while (!currentNode.Goal)
{
@@ -25,7 +25,7 @@ internal class DepthFirstSearchMazeSolver : IMazeSolver<DfsNode>
throw new MazeException("Node has no neighbors.");
}
if (path.TryPeek(out DfsNode? prevNode))
if (path.TryPeek(out MazeNode? prevNode))
{
prevNode.Updated = true;
}
@@ -39,7 +39,7 @@ internal class DepthFirstSearchMazeSolver : IMazeSolver<DfsNode>
throw new MazeException("No path found.");
}
if (path.TryPeek(out DfsNode? prevNode2))
if (path.TryPeek(out MazeNode? prevNode2))
{
prevNode2.Updated = true;
}
@@ -76,7 +76,7 @@ internal class DepthFirstSearchMazeSolver : IMazeSolver<DfsNode>
}
}
List<DfsNode> solution = path.ToList();
List<MazeNode> solution = path.ToList();
solution.ForEach(n => n.Updated = true);
return solution;
}
+2 -2
View File
@@ -2,7 +2,7 @@
namespace Maze.Solvers;
internal interface IMazeSolver<T> where T : BaseMazeNode<T>, new()
internal interface IMazeSolver
{
public List<T> Solve(T node, T[,] maze, GraphicsMode graphicsMode = GraphicsMode.None);
public List<MazeNode> Solve(MazeNode node, MazeNode[,] maze, GraphicsMode graphicsMode = GraphicsMode.None);
}