论坛首页 Java企业应用论坛

自己写的java 光线折射游戏

浏览 12454 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-16  
确实很强大,能详细的说明一下不
0 请登录后投票
   发表时间:2011-11-16  
yangguo 写道
牛啊,讲下设计思路和需要掌握什么知识吧。

我表达能力不怎么好,少许讲解一下。
首先关于游戏中的道具拖动和旋转就略过了。无非就是改变角度和位置然后重绘。而
位置有约束在每个小方格里。相信大家很容易实现的。

这里定义了一个15*23的数组用于存各个道具的。源码中
定义了两个相同大小的二维数组,一个存道具对象(为了方便以坐标获取对象开辟的),
一个存对象属性的拼接属性字符串(刚开始是为了生成地图方便用的,可是后来发现累
赘了,由于写的乱就没改了- -。)

其中道具分为三种:
1.laser 就是那些会发光的东西
2.coin 接受相应颜色光照而从空心变成实心的道具
3.普通道具,就是接收光线并根据自己的规则改变光线路径或阻止光线传播的道具。

每个道具都继承自Element 类。画图和一些属性都集中定义在这里,如果单单继承它的道具
只是一个最简单Block道具,就是光线无法穿透并无折射现象的那种,要想自定义的道具具有
穿透或者改变光路径或分光就要重写父类中canGo(int inDirection)和 output(int indirection,int color)方法
,(方法名有点鹾- -),canGo就是根据光的方向和道具自身的方向然后判断是否穿透,给一个布尔值就行,比方说
游戏里有一个straight道具,当它的方向和光的方向一致或者反向时就return true,表示能通过。
output 是用来产生反射或折射或分光用的,根据接受光的方向和颜色和自身的方向生成一个数组,数组里存的是新生光线的
方向和颜色,一遍加进alllights 这个map里。至于存所有的光线,我用了map,是为了判断已有光线和新生是否为同一条而创
的,可以想象 从startPoint 到 endPoint 和从endPoint 到startPoint 连接的光是同一条,这样我就可以判断如果光线已存在,
并且新生的光线颜色和存在的光线颜色一样,那就不必再把新生光线加进map了,如果颜色不同就将存在的光线的颜色与新生光线
的颜色混合一下就行,这里为了方便颜色混合,颜色属性被设为int,之后就可以|,&就行了。
关于道具的方向是这样的,看下面。
8  1  2
7  0  3
6  5  4
零代表道具所在位置,从上到左上逆时针一圈的八方向。
默认是1就是原图,没有旋转,2的话就是旋转+45度,然后重绘,所以做图的时候要注意默认方向。

源码中定义了三个list,分别存laser,coin,和普通道具,都是为了方便取对象而浪费了资源。
每次循环都是从laser的位置开始,发出光线,一直在的方向上搜索有没有其他道具,如果有就检查该道具有没有一定的规则,就是
是不是block的,能不能分光,如果能就添加光线,这里要从这分光道具的位置开始重复上述步骤。
记得源码中是一个addlight()的递归方法。当光线生成完就重绘,每次操作,想旋转和拖动都要重新生成光并重绘,才能达到游戏效果。貌似基本就是这样了额。那个编辑器的话真的不想讲了,因为写的太烂了- -。
0 请登录后投票
   发表时间:2011-11-16  
zgzdzh 写道
有Android版的吗?游戏名字是???

有个Android版光线折射游戏叫Refraction,挺不错,有空玩玩。
0 请登录后投票
   发表时间:2011-11-16  
楼主太强大了!
0 请登录后投票
   发表时间:2011-11-16  
还真没玩过这个游戏,很好,只可惜窗口大小不合适。
我在笔记本上也玩不了
0 请登录后投票
   发表时间:2011-11-16  
楼主很强悍,佩服
0 请登录后投票
   发表时间:2011-11-17  
有意思,赞!
0 请登录后投票
   发表时间:2011-11-17  
运行不了,怎么运行
0 请登录后投票
   发表时间:2011-11-17  
没看懂是什么意思,能不能说说
0 请登录后投票
   发表时间:2011-11-17  
丁丁豆 写道
没看懂是什么意思,能不能说说


确保jre1.5以上,双击jar文件。
或者导入Eclipse或任意编辑器自行编译运行试试。

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics