五子棋总结

花了5天的时间写了一个简单的五子棋游戏,其中碰到了许多问题。

1.在JPanel上添加背景图片的问题

因为不能直接在JPanel上直接添加图片,所以我是通过JLabel,把图片放到JLabel中,再将JLabel添加到JPanel中(使用BorderLayout布局),这样做是可以把图片添加上去,但是JPanel中的按钮(也用BorderLayout布局)就被挤到最上面了,这个问题至今没有解决。

2.关于悔棋

悔棋的话很简单,就是把保存在队列里的最后一个元素删除。然后将二维数组(标志棋盘上的某个点是否有棋子)中对应的位置清0,否则,如果再次下相同的位置,不会有棋子出现。如果是一次悔一个棋子,那么还要注意就是要改变标志棋子颜色的变量。

3.关于重绘

大概有3个地方用到重绘,第一,画棋盘的时候,因为棋盘要一直存在,所以我是把画棋盘的方法写在paint()方法中;第二,悔棋的时候,每悔一次棋,就要重绘一次,第三,黑棋或者白棋获胜的时候,因为我判断获胜的方法单独写在一个类中,所以一开始的时候,获胜后我重绘的是当前这个类的paint()方法,出现的现象是必须改变下窗体的状态后棋子才清空,后来次发现,应该重绘的是棋盘的paint()方法。.

4关于传参

可以达到传参效果的方法有,通过构造方法来传;通过自己定义的方法来传(和构造方法差不多);把你需要的变量设置为静态的

5.判断输赢

我的方法是,根据你鼠标点击的位置,分别向8个方向找,如果是相同的棋子,count++;然后在判断count和5的关系

6.关于人机对战

人机对战应该是时间花的最长的一部分了,现在实现的只是电脑只能去防守。我的思路是,根据人当前下棋子的位置,来检索它周围8个方向上的棋子,如果某个方向上有4个相连,(这种情况电脑必输)所以不做变化,但是如果某个方向上有4个相连并且最两边中的一边有电脑的棋子(冲四的情况),就把两边中没有电脑棋子的那一边的权值设为最大;如果某个方向上有3个相连的(活三),就把最两边空的的位置的权值设为第二大;如果有一端被堵(明三),则把没有堵的那端的权值设为第三大;以此类推,也许是我的权值大小设置不当,有时候人机对战会有bug。

7数组下标越界

因为棋盘比窗体小,而标志棋盘上某点有棋子的大小为棋盘,所以应该设置一些判断。

8.关于命名

因为英语水平有限,所以每次给变量取名字的时候都会很蛋疼,所以有的直接用拼音代替。


关于五子棋,我觉得应该注意的问题就这么多,关于人机,应该继续努力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值