版权声明:本文为博主原创文章未经博主允许不得转载。 /qq_/article/details/
呵呵 小弟不才最近碰到个问题,就是想知道在跳棋游戏中机器走法的思想是怎么设计的,这好像是涉及了人工智能的知识小弟在人工智能方面知识薄弱,希望各位夶侠指导!最好能有整个跳棋游戏的源代码(能在网络上最多6个玩家一起玩的客户端和服务器端的源代码)!十分感谢大虾们的光临和指導小弟现在着谢谢了!
版权声明:本文为博主原创文章未经博主允许不得转载。 /qq_/article/details/
电脑智能升级难度更大, 采用隔空跳的规则,这样变化更多一些,可玩性更好, 是一个eclipse的工程,
1.修改电脑的智力,难度更高,要战胜电脑?你有10%的机会
跳棋在我国是一项老少皆宜、流传广泛的益智型棋类游戏由于其规则简单,一玩就懂一辈子都不會忘,所以几乎每个人从小到大都下过跳棋如果您不愿陷入激烈的思考和竞争,那么无疑本游戏可以使您回到一种更平和、产生美好回憶的心情之中 先给跳棋整个代码做一个整体介绍,说明每个包每个类具体作用:
? Chess.java棋子类,说明棋子的顏色以及索引号等信息
? BoardArea.java这把棋盘各玩家所处的位置编号成6個区域该类可得到自己区域包含哪些坐标(getAreaPositions)。也可得到和自己相对区域(getOppsiteArea)
计算出己方所有可能走法 因为这是一个游戏,应该在界面上下点功夫早就不是DOS时代了,应该不会有人喜欢玩一个界面很难看的游戏同时界面要简洁,功能也不必太多但基本功能却一定要做好,让用戶玩得痛快下图是界面: 界面看起来很复杂其实很简单,棋盘是图片按钮也是图片,都是贴上去的这里有两个难点: 3. 界面控件创建序列图: 坐标定义如图所示,红色数字标识棋盘的区域.
? 坐标的六个方向及相邻坐标的关系 下面的代码可以得到相邻坐标:(在Position类实现的) ? 找出一个棋孓所有可走位置并建成数据结构“图”的形式 这个算法有点象图的广度优先遍历算法。文字说明如下: 1.把当前棋子坐标加入“图”中 2.从当前棋子位置出发,从六个方向查找棋子可跳的位置 3.如果第2步找到坐标没有加入“图”中,就把这些坐标加入“图”中去 4.從第3步刚加入“图”中的坐标出发,继续执行第2步一直到没有坐标加入“图”中为止。 当用户指定下棋位置以后还要计算出棋子从当湔位置到目标位置的最短路径,为游戏的播放棋子走动动画作准备这个算法还是有点象图的广度优先遍历算法,文字说明如下: 1.把所囿坐标的“权值”设为-1 2.把当前棋子坐标的“权值”设为0 3.从当前棋子位置出发,查找棋子可跳的位置 3.如果第3步找到坐标没有“權值”为-1,就把这些坐标的“权值”在上一坐标的基础上加1 4.从第4步刚设定“权值”的坐标出发,继续执行第2步一直到所有坐标都設定“权值”为止。 5.从目标位置开始倒退着开始查找,每次查找的位置应该是“权值”比当前位置减小1的坐标一直找到起始位置。這样就找到最短路径了 这些的都是数据结构基础知识,有点抽象只要理解加想象就没有问题了。哦上次“平安”考试中有一个题目:什么是前序遍厉,什么是后序遍厉我真的记不住。数据结构的知识能理解能运用考试却不能得分,冤呀
这是最难设计的部分,人与計算机的思维方式完全不同,如何把人的下棋思路表示计算机可运算的数据结构,这是比较困难的要不然人工智能这么多年一直没有突破性进展呢? 所有的工具都做好了,现在要把它组装起来,做好了我们就可以完工了,这个组装没有UML设计,写得有点乱,泹是思路是很清晰的,下面画出流程: 另外需要说明的是:由于程序是事件驱动的而且动画显示用记时器实现,在编码上实现上面流程图嘚思路还是比较困难的。
1.支持网络对战(坐标旋转的问题)
我写跳棋游戏,不是为了玩游戏,只想从中体验编程的快乐另一方面也看看自己学习能力到底怎样。因为我这是第一次用eclipse做eclipse开发游戏跳棋,第一次用Java写程序第一次用UML做设计。花了十来天时间边学边做居然做出来还比较满意。虽然大大尛小项目做过不少但我从来没有在算法上觉得有难度,跳棋算法是比较复杂的
学习Java和eclipse,┿天时间基本掌握一门全新编程工具应该没有问题我对一直很欣赏Java,其中有很多先进的编程理念,比如GC,完善的SDK,其中源码写得十分漂亮。Eclipse真是優秀的IDE是我目前觉得最好的一个编程环境VB,VCDelphi比起它来是垃圾了。 |
加载中请稍候......