五子棋人人对战实现

来源:互联网 发布:千牛店铺数据模块 编辑:程序博客网 时间:2024/04/30 06:37


在十字交差点画棋子,有几种方法,第一种:获取当前鼠标点击的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胜利,如果上面和下面都没有,

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






0 0
原创粉丝点击