五子棋人人对战实现



在十字交差点画棋子,有几种方法,第一种:获取当前鼠标点击的x,y值,

遍历整个棋盘所有的交叉点坐标,与其在一定误差范围内的交叉点坐标即

为落子的坐标点。第二种:直接将获取的x,y坐标减去棋盘外围宽度然后

再除以棋盘每格的宽度,即可得到此坐标位于棋盘的那一行那一列,然后

即可将此点为落子的点。不过这个方法不好判断在哪个交叉点。



棋子可存储,不会因为界面变化而消失,我使用的是Vector集合存储的,

因此我还另外新建了一个棋子的类,每个棋子都保存这坐标,遍历Vector

集合,取出棋子中保存的x,y值即可在棋盘上画出棋子了。另外也可以用

二维数组来存储,里面可以用1代表白棋,2代表黑棋,遍历整个数组,

碰到1则画出白棋,碰到2则画出黑棋,数组的下标即为棋子的坐标,这

样更为简便!不过二维数组在悔棋的时候不方便,因为你只能得到当前

位置的坐标,不能得到上一步棋子的坐标,故你只能悔一步棋。



点击开始才可以下棋,设置一个flag_start的标志,一旦按了开始则

flag_start=true;就可以开始画棋子了。



点击重新开始就可以重新下棋,repaint()棋盘即可,记得要把存储棋子

的数组或者集合要清空!还有存储棋盘信息的数组也要清空。



可以悔棋(我设置的是最多悔一步,黑白各可以悔一步),设置一个

back_chess用来控制要悔几个棋子。我设置的是可以悔两个,即黑

白可以各悔一个棋子。悔棋要注意悔的什么颜色的棋子接下来就应该是什么

颜色下子。



用二维数组存储整个棋盘的信息,来判断下棋输赢。获取当前落子的

棋盘坐标,以此棋子为中心,向上搜索连续的4个棋盘坐标,如果都

与其相等(即都为1或者都为2),则判断1(白棋)胜利或者2(黑棋)

胜利,如果上面只有n(n<4)个与其相等,则向下继续搜索连续的4-n个

棋盘坐标,如果都与其相等则判断1或2胜利,如果上面和下面都没有,

则没有谁胜利。其他方向一样的方法进行判断。






  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值