【发布时间】:2011-08-03 09:33:11
【问题描述】:
我创建了一个小机器人,例如基于 javascript 的 Karel 机器人 (Wikipedia)。
机器人可以通过一些简单的命令来控制,如“前进”、“右转”等。
用户可以编写一个javascript程序来控制机器人,然后通过javascript的“eval()”函数使机器人移动。
问题是我想让机器人慢慢移动,这样你就可以看到他在做什么,这样你就可以在编辑器中突出显示当前的代码行。
当前方法:解析
目前我已经解决了这个问题(在离线版本中),方法是解析 textarea 中的每一行,然后构建一组操作,然后使用 window.setTimeout 依次执行这些操作。但这当然是有限的,因为我必须为每个小的 javascript 语言结构编写解析代码,这需要大量工作且容易出错。
对此的一些附加信息:
解析版本:http://abi-physik.de/_niki2/niki.php
解析版js代码:http://abi-physik.de/_niki2/js/niki.js
重要的函数在脚本底部:run()、execute()
我目前正在逐行解析用户脚本并将操作添加到堆栈中。如果解析器遇到“if”,它将开始一个新堆栈并将所有操作添加到该堆栈。如果解析器随后遇到“}”,它将关闭“if”堆栈并继续向基本堆栈添加操作。
有什么改进的办法吗?
【问题讨论】:
-
你试过在“;”上分割线吗或者 \n 然后一个一个地传递给 eval
-
我想过,但我还没有尝试。 if 条件会发生什么?
-
在这种情况下,您还必须为 if 、 while 循环实现一些东西。您可以将它们组合成单个代码块,但它不会显示动画。
-
编辑了您的帖子以为您修复 URL,因为它们显然是相关的,所以应该是正确的链接
-
您是否打算使用嵌套的 while 和 for 循环?
while( while() )
标签: javascript timer eval karel