0

我正在使用一个名为 boe-bot 的机器人开展一个项目。

我的目标是两次穿越迷宫。在第一次运行时,我的 boe-bot 穿过迷宫,存储在内存中的路径。在第二次运行时,它会将所有路径存储在内存中,并删除导致死胡同的错误路径——因此 boe-bot 可以采用最短路径到达迷宫的尽头。

为了做到这一点,我需要创建替换规则来解析导致死胡同的错误路线。

我在 pbasic 中创建了一个代码,但我的代码出错了。有没有人可以帮助我解决这个问题?

' {$STAMP BS2}
' {$PBASIC 2.5}



' -----[ Variables ]----------------------------------------------------------
turn VAR Word
turns VAR Word
pointer VAR Byte
ptr VAR pointer 'create an alias for pointer

' -----[ Main Routine ]-------------------------------------------------------
DO ' Begin main routine

ptr = 0 'Points TO the NEXT available position in the array.

turns(ptr) = turn 'This puts an L in the first position of the array or left turn in array

ptr = ptr + 1  'Add one TO the pointer so the NEXT letter goes in the NEXT position in the array.

IF (turns < 3)THEN 'Array needs at least three characters for this algorithm to work
RETURN
IF (turns(3)(ptr) - 1 <> "U")THEN 'EXIT IF the NEXT-TO-last turn is NOT a U-Turn
RETURN

IF (turns(3) = "LUL") 'Look at the right three characters in the array Left U-Turn Left 
ptr = ptr - 3 'shorten the array by 3 characters. We'll "chop off" the LUL and replace with S
turns(ptr) = "S" 'The turn we should have taken (AND will take NEXT time.
ptr = ptr + 1 'set up the pointer TO point TO the NEXT character in the array.

IF (turns(3) == "LUR") 'Look at the right three characters in the array Left U-Turn Right
ptr = ptr - 3 'shorten the array by 3 characters. We'll "chop off" the LUL and replace with S
turns(ptr) = "U" 'The turn we should have taken (AND will take NEXT time.
ptr = ptr + 1 'set up the pointer TO point TO the NEXT character in the array.

IF (turns(3) == "LUS") 'Look at the right three characters in the array Left U-turn Straight
ptr = ptr - 3 'shorten the array by 3 characters. We'll "chop off" the LUL and replace with S
turns(ptr) = "R" 'The turn we should have taken (AND will take NEXT time.
ptr = ptr + 1 'set up the pointer TO point TO the NEXT character in the array.
' Increment/decrement routine only changes pulse durations by 2 at a time.

IF (turns(3) == "RUL") 'Look at the right three characters in the array Right U-turn Left 
ptr = ptr - 3 'shorten the array by 3 characters. We'll "chop off" the LUL and replace with S
turns(ptr) = "U" 'The turn we should have taken (AND will take NEXT time.
ptr = ptr + 1 'set up the pointer TO point TO the NEXT character in the array.

IF (turns(3) == "RUR") 'Look at the right three characters in the array Right U-turn Right
ptr = ptr - 3 'shorten the array by 3 characters. We'll "chop off" the LUL and replace with S
turns(ptr) = "L" 'The turn we should have taken (AND will take NEXT time.
ptr = ptr + 1 'set up the pointer TO point TO the NEXT character in the array.

IF (turns(3) == "RUS") 'Look at the right three characters in the array Right U-turn Straight
ptr = ptr - 3 'shorten the array by 3 characters. We'll "chop off" the LUL and replace with S
turns(ptr) = "L" 'The turn we should have taken (AND will take NEXT time.
ptr = ptr + 1 'set up the pointer to point to the NEXT character in the array.

IF (turns(3) == "SUL") 'Look at the right three characters in the array Straight U-turn Left 
ptr = ptr - 3 'shorten the array by 3 characters. We'll "chop off" the LUL and replace with S
turns(ptr) = "R" 'The turn we should have taken (AND will take NEXT time.
ptr = ptr + 1 'set up the pointer TO point TO the NEXT character in the array.

IF (turns(3) == "SUR") 'Look at the right three characters in the array Straight U-turn Right
pointer = pointer - 3 'shorten the array by 3 characters. We'll "chop off" the LUL and replace with S
turns(pointer) = "L" 'The turn we should have taken (AND will take NEXT time.
pointer = pointer + 1 'set up the pointer TO point TO the NEXT character in the array.

IF (turns(3) == "SUS") 'Look at the right three characters in the array Straight U-turn Straight 
pointer = pointer - 3 'shorten the array by 3 characters. We'll "chop off" the LUL and replace with S
turns(pointer) = "U" 'The turn we should have taken (AND will take NEXT time.
pointer = pointer + 1 'set up the pointer TO point TO the NEXT character in the array.
4

1 回答 1

1

这种迷宫求解方法是 A* 规划算法的简单版本。您可能想查看我描述此迷宫解决方法的页面:http ://www.benaxelrod.com/robots/maze/index.html

那里有伪代码可以帮助您修复代码。

于 2012-09-08T14:17:24.830 回答