Как распознать, что персонаж находится в конце лабиринта?

У меня есть два отдельных уровня для моей игры-лабиринта для калькулятора ti-84, оба имеют одинаковый код. Хотя один из уровней не завершается, когда персонаж достигает конца, и рассматривает последнее место как стену.

ClrHome
1→A
1→B
For(y,1,8
For(x,1,16
Output(y,x,sub(" XD", 1+[F](y,x),1
End:End
Repeat K=21 or [F](A,B)=2
getkey→K
If Ans
Output(A,B," ")
sum(△List(Ans={25,34}))
A+Ans([F](A+Ans,B)≠1)→A
sum(△List(K={24,26}))
B+Ansnot([F](A,B+Ans)→B
Output(A,Ans,"Θ")
End
ClrHome
Display "You Win"
Pause
Goto 99

person Ryan Allen    schedule 01.06.2015    source источник
comment
Если только один из ваших уровней не работает и оба уровня используют один и тот же код, скорее всего, ошибка связана с матрицей, лежащей в основе вашего лабиринта. Вы относитесь к 1 как к стене, а 2 как к цели. Исправление, вероятно, делает цель квадратной для обеих матриц 2   -  person ankh-morpork    schedule 05.06.2015


Ответы (1)


Проблема в вашей логике горизонтального движения, и я готов поспорить, что в работающем лабиринте вы двигаетесь либо вверх, либо вниз к цели, а в неработающем лабиринте вы двигаетесь вправо или влево к цели. цель.

Ваш коэффициент вертикального перемещения Ans, ([F](A+Ans,B)≠1), оценивается как истина, если текущая ячейка не равна 1, стена. С другой стороны, ваш коэффициент горизонтального перемещения Ans, not([F](A,B+Ans), оценивается как истина, если текущая ячейка не равна 1 или 2, стене или цели. Измените его, чтобы он был похож на вертикальную логику, ([F](A,B+Ans)≠1), и ваша игра должна быть исправлена.

Редактировать:

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

If K
Then
[Game Logic]
End
person Vaelus    schedule 19.06.2015