2012-01-27 6 views
0

Я работаю над проектом с роботом, который называется boe-bot.вычисляет кратчайшее расстояние лабиринта с боу-ботом в Pbasic

Моя цель - дважды пройти через лабиринт. На первом запуске мой бои-бот пересекает лабиринт, сохраняя пути, принятые в памяти. Во втором прогоне он имеет все пути, хранящиеся в памяти, и удаляет плохие пути, которые приводят к мертвым концам, поэтому бой-бот может пройти по кратчайшему пути до конца лабиринта.

Для этого мне нужно создать правила замены, чтобы разобрать неправильные маршруты, которые приводят к тупикам.

Я создал код в 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. 
+0

Является ли ваша проблема синтаксисом или алгоритмом? –

+0

Если вы хотите получить более качественные ответы, вы можете добавить еще теги (pbasic и т. Д.), Выведенные ошибки и (возможно) псевдокод. http://sscce.org/ – Glycan

+0

вам действительно нужно опубликовать свои ошибки. –

ответ

1

Этот метод решения лабиринта представляет собой простую версию алгоритма планирования A *. Вы можете проверить мою страницу, описывающую этот метод решения лабиринта: http://www.benaxelrod.com/robots/maze/index.html

Существует псевдокод, который может помочь вам исправить ваш код.