IDA* implementation for labirinth, Artificial Intelligence, Year 3, Semester 1
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
3.0 KiB

using IdaStar;
3 years ago
string[] labyrinthIN = File.ReadAllLines(@"./labyrinth.txt");
3 years ago
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.WriteLine("The input labyrinth: ");
foreach (string line in labyrinthIN)
{
FormattedLabRow(line);
Console.WriteLine();
}
var algoBoard = new IdaStar.WorkingBoard(labyrinthIN.Select((row) => row.ToList()).ToList());
int step = 0;
ConsoleColor border = ConsoleColor.Magenta;
bool printSteps = false;
Console.WriteLine();
Console.WriteLine("Show each step? (Y/N) ");
if(Console.ReadLine()?.Trim() == "Y") {
printSteps = true;
}
if(printSteps) {
algoBoard.AlgorithmStep += (_, threshold) => {
PrintBoard(threshold, false);
};
}
algoBoard.RunIdaStar();
PrintBoard(0, true);
static void FormattedLabRow(string line) {
char[] characters = line.ToCharArray();
foreach (char c in characters) {
switch ( c ) {
case '#': {
Console.BackgroundColor = ConsoleColor.White;
Console.Write(" ");
break;
}
case ' ': {
Console.BackgroundColor = ConsoleColor.Black;
Console.Write(" ");
break;
}
case 'S': {
Console.BackgroundColor = ConsoleColor.Green;
Console.Write("<•>");
break;
}
case 'F': {
Console.BackgroundColor = ConsoleColor.Red;
Console.Write("[ ]");
break;
}
case 'P': {
Console.BackgroundColor = ConsoleColor.Blue;
Console.Write(" • ");
break;
}
default: break;
}
}
Console.ResetColor();
}
void PrintBoard(int threshold, bool done){
Console.Clear();
step++;
if(done){
Console.WriteLine("The solved labyrinth is:");
}else if(step%2 == 0) {
Console.WriteLine($"Computing (threshold: {threshold}) [• ]");
}else {
Console.WriteLine($"Computing (threshold: {threshold}) [ •]");
}
//top border
Console.BackgroundColor = border;
for (var i=0; i< algoBoard.Board[0].Count + 2; i++){
Console.Write(" ");
}
Console.ResetColor();
Console.WriteLine();
foreach (var line in algoBoard.Board)
{
var charlist = line.Select((state) => CellStateUtil.ToInput(state));
var str = string.Join("", charlist);
//left border
Console.BackgroundColor = border;
Console.Write(" ");
Console.ResetColor();
//labyrinth line
FormattedLabRow(str);
//right border
Console.BackgroundColor = border;
Console.Write(" ");
Console.ResetColor();
Console.WriteLine();
}
//bottom border
Console.BackgroundColor = border;
for (var i=0; i< algoBoard.Board[0].Count + 2; i++){
Console.Write(" ");
}
Console.ResetColor();
Console.WriteLine();
Thread.Sleep(200);
// Console.ReadLine();
}