五子棋图片版(实现了简单的人机)

最近纠结了一段时间,终于把一个简单的可以人机的五子棋写好了。

 

1.功能介绍:

           该五子棋主要实现的功能有:下子,判输赢,人人对战,简单人机对战,悔棋。界面主要是模仿QQ五子棋的风格。

 

2.图片展示:


五子棋图片版(实现了简单的人机)_第1张图片
 
五子棋图片版(实现了简单的人机)_第2张图片
 
五子棋图片版(实现了简单的人机)_第3张图片
 

3.技术要点: 主要是用二维数组保存棋局,实现棋子的重绘和输赢的判定以及人机对战。其次就是人机对战中的的搜索局面和落子点优先级的判定,以及用随机算子实现同优先级的落子点的获得(本人采用的是在每种情况下暴力搜索出落子点,然后将该落子点保存在该情况下的队列里,优先级的判定用到了一些布尔变量,然后用条件语句就可以实现)。
五子棋图片版(实现了简单的人机)_第4张图片

悔棋主要就是通过用自定义的一个队列保存落子点在数组中的下标索引,悔棋时将自定义队列里最后的一个元素拿出来,把数组中该下标的元素便成0,然后重绘窗体,再移除自定义队列里的最后一个元素。还有就是将图片与程序一起打包的方法,示例如下:先将图片的地址变成url的地址,然后再new ImageIcon的对象时,用该 URL的地址,最后把图片所在的包与程序所在的包一起打包就可以了。


五子棋图片版(实现了简单的人机)_第5张图片
 
五子棋图片版(实现了简单的人机)_第6张图片
 还是就是绘制图像的方法:调用drawImage.

 

4.制作过程中遇到的问题和现在尚未解决的问题.

     制作过程中的问题主要有:在计算棋盘左上角坐标时,由于用JPanel把窗体分成2半,所以用MouseListener获得的左上角坐标和实际上该点在JPanel上的坐标不对应,导致我纠结了一下(最后还是慢慢的试,才把误差给找出来)。还有就是人机对战是,清空保存落子点队列的时机选择不当,老有棋子被覆盖(由于上次的落子点还在队列里),最后还是纠结了几个小时才发现。。

     尚未解决的问题:AI功能还太弱。。 

 

 

你可能感兴趣的:(qq)