RAPTOR可视化编程.docx
《RAPTOR可视化编程.docx》由会员分享,可在线阅读,更多相关《RAPTOR可视化编程.docx(16页珍藏版)》请在冰豆网上搜索。
RAPTOR可视化编程
加入能量守恒的生命游戏
Raptor编程:
能量守恒的生命游戏
软件33任然
一,问题的由来
本作业的灵感是来自我在XX百科上阅读的一篇小论文,该文作者以能量的方式阐述了生命的由来,让我不禁眼前一亮,联系到老师给我们示范的生命游戏的Raptor程序,我便有了这个加入能量守恒定律规定生命游戏的想法,并付诸于实现。
二,规划方案
首先,该算法是基于生命游戏的一个衍生程序,所以我查找了有关生命游戏的Raptor程序,并进行了研究,改良〔这里要感谢程亮同学给我提供的一个参考〕。
该算法最困难的地方在于能量守恒和检测每一单元能量值的部分。
对此,我打算采用二维数组,以及循环嵌套的方法来完成。
另外关于界面交互方面,我打算用简洁明了的方式展现,是同学们在第一次试运行时可以轻松上手。
在能量守恒方面,我决定使用数组的方法,给初始单元所在数组赋予一定能量值,并采用了平均分配的方法,即一个单元在每一次循环中拿出它一半的能量平均分配给其周围八个单元,这样就有了能量的传递。
在显示方面,我设置了一个阈值,只有当单元所含能量值大于该阈值,该单元才会显示,这样就有了新单元的生成。
能量不断的被传递,伴随而来的便是不断地有新的单元显示和旧的单元消失。
而每个单元类似于一个生命,这也就有了生命的变化。
三,实施并解决问题
1,实践前期
在实践前期,用户交互部分完成较为顺利,在获取鼠标坐标显示单元部分,由于对循环程序运行不够明了,使得坐标获取后无法及时运行下一步算法,最终我采用了Wait_For_Mouse_Button(Left_Button)函数使问题解决。
(如图-4,图-5,图-8)
2,实践中期
在实践中期,由于能量守恒定律的加入,使该程序需要两次循环检测,第一次是分配能量,第二次是判断该单元是否显示并完成显示和消失。
因为检测有前后顺序,前面单元能量分配会影响到后面单元能量的分配,使整体图形向右偏移,所以我采用了双数组的形式,将单元初始值赋给第一个数组,将分配的能量值赋给第二个数组,等分配完毕后再将第二个数组的值加给第一个,然后将第二个数组归零,这样就巧妙的解决的图像右移的问题。
〔如
图-11,图-13〕
在能量赋值上,因为用户界面一共有3600个单元,我预设的阈值为30,所以要使全部单元都显示则一共需要108000的能量值,所以我给每个初始单元赋给了5000的能量值,这个结果是通过实验试出来的,如果愿意,可以自己更改。
在将第二个数组归零中,我开始是等整个运算完成后,在用循环结构将其归零,但发现这样增加了许多无用的步骤,使运行速度大幅度变慢。
最终,我将归零步骤放在第一次循环中,解决了这个问题。
〔如图-13〕
另外,由于双循环的存在使程序运行速度变慢,并且调用函数会使速度大大降低,为了减少函数调用的次数,我引入了第三个数组,将前一次显示的单元对应的地址赋予1,不显示的单元赋予0,在第二次循环完成显示与消失时可以减少调用填色的函数,在实际运行时,这一设置发挥了明显的作用。
〔如图-8,图-13,图-14,图-15〕
还有一个小细节,由于Raptor程序设定的因素,如果赋给数组的值小于其设定值,程序会显示错误,因此,我在分配能量中,对单元能量值得判断不是“是否大于一”,而是是否“大于十的负五次方”。
在这种设置下,能量的分配或许会有一点小误差,但由于数量级很小,可以忽略不计。
〔如图-10〕
3,实践后期
在制作后期,主要是界面优化,利用图片处理软件,得到预期想要的样式,由于Raptor不能输入汉字,所以采用这种图的形式效果最好。
然后将图填入,并利用鼠标坐标获取函数,得到有关位置〔如“开始”,“说明”,“退出”等〕的坐标范围,利用这些坐标范围进行后续有关程序是否运行的判断。
期间,为了加入“说明”中“返回”这个功能,我加入了循环,并给与了player三个值进行判断,使其可以无限次的返回。
(如图-1,图-6,图-11)
四,回忆与思考
回看整个程序,会发现在分配能量和检测单元能量值是否超过阈值的部分占用了大部分的运行时间,由于随着能量的分配范围的扩大,无法确定哪些地方没有能量,所以我采用了蛮力法,但这样使运算时间大大加大,所以我想,有没有一种算法可以在这种情况下对数组进行迅速判断,节省运行步骤,缩短时间。
并且,因为能力的关系,在用户界面方面,仍旧感觉有些呆板,不够生动,灵活。
在运行过程中单元的形式很简单。
但我觉得这是Raptor平台的一个不足之处,没有很好地界面图形编辑功能。
另外,由于Raptor的基础设定,许多功能无法实现,例如,对一个数组整体归零,在Raptor中需要一步一步来,并没有类似于C语言中的static函数调用。
另外,由于Raptor不支持汉字的输入与输出,所以想要表现出汉字还需要用图来解决,这使得很多问题复杂化。
但这种方法也有一个好处,那就是你可以使用你想用的任何一种字体来表现你的内容,这样会使程序的界面有了一个很大的提升。
最后,这个想法还只是在初步阶段,所以并没有像传统生命游戏那样,有那么多有趣的事例给人示范,在生动性上有所欠缺。
但我希望这个小程序能够作为一个启发,播下一颗种子,使更多的人将目光投向关于这类加权的生命游戏的思考之中。
五,参考文献与案例
程向前:
《可视化计算》
佚名:
《生命游戏的假设》,文章地址:
:
//baike.baidu/link?
url=Iqpg1oyeCVu0QTfT0efjPk9-XuZdLtV2DwIJtfEmj5WdmCW1F731QogAosxux-hw5vqxw4trZ0s4B8zbRMC6HK〔online〕参考时间:
2013/10/18
程亮,Raptor程序:
《gameoflife》
梁雨聪,Raptor程序:
《打砖块》
六,算法框图
main
图-1
Draw_Picture
图-2
图-3
Start
图-4
Start_2
Panduan
图-5
Over
图-6
图-7
Draw_map
图-8
Draw_point
Judge
图-9
图-10
Judge_2
Chushidian
图-11
Gaibian
图-12
图-13
Gaibain_2
图-13
Huadian
图-14
Huadian_2
图-15
Information
图-16
Panduan_2
图-17
七,心得总结
通过这次大作业的完成,让我明白了知识的摄取和理解需要不断地练习。
在制作Raptor过程中,我遇到了一些我当时知识所无法解决的问题,但通过对同学作品的参考以及对书本的重新学习,使我最终完成了这次大作业。
另外,在解决问题后,我感到我应该把课本当作字典来使用,在需要的时候就翻开查查,及时补充自己的不足。
只有当需要的时候,我们才会认认真真的去弄懂一个知识点。