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