艺术化的程序设计
计算机的硬件也有限,而人的创造也无限,程序设计美于思维和行为,记得1997年一个叫做 “OMNISCENT”的DEMO使人感慨万分, 作者就像一名艺术家在一粒小小的米粒上雕刻着自己的作品一般。能力虽有不及,仍不妨我校仿,以此挖掘计算机最原始的艺术表现形式:
(此为自去年九月到现在三次发布中的最终版本: EXFORCE)
在DOS窗口中运行DEBUG,然后把横线下的内容复制、粘贴到DEBUG窗口中,回车就可以见到了。
……写自己的代码,让别人猜去吧!
计算机的硬件也有限,而人的创造也无限,程序设计美于思维和行为,记得1997年一个叫做 “OMNISCENT”的DEMO使人感慨万分, 作者就像一名艺术家在一粒小小的米粒上雕刻着自己的作品一般。能力虽有不及,仍不妨我校仿,以此挖掘计算机最原始的艺术表现形式:
(此为自去年九月到现在三次发布中的最终版本: EXFORCE)
在DOS窗口中运行DEBUG,然后把横线下的内容复制、粘贴到DEBUG窗口中,回车就可以见到了。
……关于路径搜索算法的实用性优化
UESTC 20013080 林 伟 2002.9.12
介绍:本文阐述对著名的路径搜索算法 A*
算法的重要改进,使之更实用于大规模,高效率,多阻塞,模糊求解的任务中。希望本文起一个抛砖引玉的作用,使读者能举一反三。
这里所提及的 A*
算法在许多领域内得到广泛的应用,比如我们熟悉的即时战略游戏正是利用这个算法来实现路径搜索的。 但是人工智能的书上只是说,却很少有实现的例子,理论与实际差距太大,一些专业人士也曾经书写过代码,但代码的优点在于说明算法,而在效率与实用性方面就有些欠缺。
A*
是启发试搜索加动态规划。具体实现依靠两个队列Open队列和Close队列。从一点开始探走几个相邻的格子如果可以移动且当前移动为起点到哪个格子的历 史最佳方法则把那个格子按照估价值从小到大插入Open队列里面,几个方向试探结素后取出估价值最小的节点放入Close再从这里开始试探几个相邻的方向 同样放入Open队列里面,放入Open的条件是1.这步在地图上面是可以移动的,2.这步所在节点在Open里面并不存在,3.从起点到这步的实际距离 比这点的历史最小距离还短满足这三个条件就把节点放入Open队列。具体的算法网友们已经描述的再清楚不过了大致算法如下:
WHILE TRUE BEGIN
1. 把S点加入OPEN队列(按该点到E点的距离排序+走过的步数从小到大排序)
2. 排序队列OPEN队列中距离最小的第一个点出列,并保存入CLOSE队列中
3. 从出列的点出发,分别向4个(或8个)方向中的一个各走出一步
4. 估算第3步所走到位置到目标点的距离,并把该位置按估价距离从小到大排序后并放入OPEN中
5. 如果该点从四个方向上都不能移动,则把该点从CLOSE队列中删除
6. 从目标点回溯树,直到树根则可以找到最佳路径,并保存在PATH中
END
图表1:A*
路径搜索算法流程
2001-2002期间开发的虚拟机/编译器开源项目代码和资料
所有资料可以从下面地址下载: 下载可执行 源程序下载 设计说明书
关于虚拟机及其编译器的说明
记得3DS/MAX里面实现了一个类似BASIC的脚本,Animator里面实现了一个类C的脚本语言,Autodesk公司的软件对于脚本支持的很出色,好的脚本引擎在乎平台无关性、高效性和扩充性,一个脚本引擎的需要对一个好程序来说非常迫切,于是半年前我写了一款虚拟机,最近又实现了一个类Basic的脚本编译器,特性说明:
通过半年的修改我自己觉得虚拟机够高效开放,就是vmbasic编译器写的没有多高的水准:完全没有对生成代码做优化,弄出许多繁琐的中间代码,不过还是明显快于及时解释语言,通过测试速度大概是DOS自带的QBASIC程序的三倍左右(可以通过目录下的几个算法程序来实验)。
……