' Parallel execution of Tremaux's algorithm
' Stevan Tosic
' 26/05/2020
' Turtle is replaced as tryhest proposed in KRX737 (turtleMove and initTurtle here)
mazeTable[1][1] = "XOXXXOXXXXXX"
mazeTable[1][2] = "X X O"
mazeTable[1][3] = "X XXXXX X X"
mazeTable[1][4] = "X X "
mazeTable[1][5] = "XXX X X X X"
mazeTable[1][6] = "O X X"
mazeTable[1][7] = "X XXXXXXX X"
mazeTable[1][8] = "X X X OX"
mazeTable[1][9] = "X X X X XXX"
mazeTable[1][10] = "X X X X"
mazeTable[1][11] = "XXXXX XXXXX"
mazeTable[2][1] = "XOXXXOXXXXXX"
mazeTable[2][2] = "X X O"
mazeTable[2][3] = "XXXOXX X XX"
mazeTable[2][4] = "X X "
mazeTable[2][5] = "XXX X X X "
mazeTable[2][6] = "X X "
mazeTable[2][7] = "X XXX XX X"
mazeTable[2][8] = "X X X XX"
mazeTable[2][9] = "X X X XXX"
mazeTable[2][10] = "X X XO X"
mazeTable[2][11] = "XXXXX XXXXX"
mazeTable[3][1] = "XXXXXOXXXXX"
mazeTable[3][2] = "X X "
mazeTable[3][3] = "XXXOXX X X"
mazeTable[3][4] = "X X "
mazeTable[3][5] = "XXX X X X "
mazeTable[3][6] = "O X "
mazeTable[3][7] = "X XXXX XX X"
mazeTable[3][8] = "X X OX"
mazeTable[3][9] = "X X X XXX"
mazeTable[3][10] = "X X X X"
mazeTable[3][11] = "XXXXX XXXXX"
initVariables()
initRooms()
While(aliveSearch[1] = "True" Or aliveSearch[2] = "True" Or aliveSearch[3] = "True")
For room = 1 To numRooms
search()
EndFor
Program.Delay(20)
EndWhile
Sub toFieldIfFree
checkEdge()
checkUsedField()
checkWall()
checkSearchLimit()
If(isEdge[room]="False" And isWall[room] = "False" And isUsedField[room] = "False" And isSearchLimit[room] = "False") Then
LDCall.Function("turtleMove", cellSize)
row = turtlePath[room]["Y"][stepCounter[room]] + dY[room]
col = turtlePath[room]["X"][stepCounter[room]] + dX[room]
If(tableState[room][row][col] = charUsedField) Then
isUsedField[room] = "True"
Else
col = turtlePath[room]["X"][stepCounter[room]]
row = turtlePath[room]["Y"][stepCounter[room]]
tableState[room][row][col] = charUsedField
EndIf
EndSub
Sub checkWall
isWall[room] = "False"
row = turtlePath[room]["Y"][stepCounter[room]] + dY[room]
col = turtlePath[room]["X"][stepCounter[room]] + dX[room]
If(tableState[room][row][col] = charWall) Then
isWall[room] = "True"
EndIf
EndSub
Sub setTargetColor
GraphicsWindow.BrushColor = colorMarkedTarget
tx = targets[room]["X"][i]
ty = targets[room]["Y"][i]
cellTable = Shapes.AddRectangle(cellSize, cellSize)
Shapes.Move(cellTable, tx * cellSize + tableOffsetX[room] * cellSize, ty * cellSize)
EndSub
Sub checkTarget
For i=1 To numTarget[room]
If(turtlePath[room]["X"][stepCounter[room]] = targets[room]["X"][i] And turtlePath[room]["Y"][stepCounter[room]] = targets[room]["Y"][i]) Then
setTargetColor()
EndIf
EndFor
EndSub
Sub writeLimitedturtlePath
TextWindow.Write(msgEnd)
For i = 1 To depthSearchLimit[room]
TextWindow.Write(" " + turtlePath[room]["Y"][i] + "," + turtlePath[room]["X"][i] + " ")
EndFor
TextWindow.WriteLine("")
TextWindow.WriteLine("********")
EndSub
Sub setWallField
tableState[room][row][col] = charWall
EndSub
Sub setTarget
tableState[room][row][col] = charTarget
EndSub
Sub setFreeField
tableState[room][row][col] = charFreeField
EndSub
Sub addTargetXY
targets[room]["Y"][numTarget[room]] = row
targets[room]["X"][numTarget[room]] = col
EndSub
Sub readTableFromFile
row = 1
' The following line could be harmful and has been automatically commented.
' line = File.ReadLine(fileName, row)
numTarget[room]=0
maxCol = 0
While(line <> "")
numColumn[room] = Text.GetLength(line)
For col=1 To numColumn[room]
char = Text.GetSubText(line,col,1)
charCode = Text.GetCharacterCode(char)
If(charCode = asciiWall) Then
setWallField()
ElseIf(charCode = asciiTarget) Then
setTarget()
numTarget[room] = numTarget[room] + 1
addTargetXY()
Else
setFreeField()
EndIf
EndFor
If(numColumn[room] > maxCol) Then
maxCol = numColumn[room]
EndIf
row = row + 1
' The following line could be harmful and has been automatically commented.
' line = File.ReadLine(fileName, row)