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

本文分享了一个简易五子棋程序的设计与实现过程,包括功能介绍、技术要点、界面展示及遇到的问题。程序实现了人机对战、悔棋等功能,并采用二维数组存储棋局状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

1.功能介绍:

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

 

2.图片展示:



 

 

 

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

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



 

 还是就是绘制图像的方法:调用drawImage.

 

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

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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值