Java五子棋(人人对战)学习经验

五子棋算是我学习java一个月以来第一次做的一个项目,也算是小游戏。开始觉得五子棋遥不可及,后来在老师的指导下也一步步攻克难关,做了出来。
首先是最初的界面实现。用一个再寻常不过的JFrame窗体,并常规的设置属性。
不过在勾画棋盘时,我们第一次用到了对界面的重绘。代码是public void paint (Graphics g){}这个方法是重写原来默认的JFrame自带paint方法,在此方法中用循环的方式,画出一条条线,并需要精确计算,以保证能画出15*15的棋盘。当然重绘的不仅只有棋盘而已,在后来每下一个棋子,在最小化JFrame窗体界面后又会这些下的棋子会自动消失,这时就需要我们用重绘的方法将它们一一画出来。这个代码实现就相对难一些,后面再讨论。
接下来是画棋子,这里自然免不了添加MouseListener监听器。在Released操作中,在每次释放鼠标后便要在释放的位置最近的那个点画出一个棋子。我起初觉得这是一件很困难的事,并尝试用取余的方法分了四种情况一一讨论,也实现了目标。不过,在老师的指导下,我引入了行和列的关系,巧妙的给坐标加上20以后不用取余,得到我需要的行数和列数,进而画出想要的位置的棋子。而引入行数和列数,自然需要构建对接下来的事件很有必要的数组。因为棋盘和行列之分。所以只要构建两个变量相组合便能方便地记录棋盘上的每一个位置,而再没有比二维数组更有效的方式。
有了数组,除了实现画棋子,在前面提到了重绘方法上,也变得容易了,只要把画的棋子所对应的数组的位置传到前面,那么就能简单地画出每一个画过的棋子,并保存。除此以外,给画过黑棋和白棋的位置所对应的数组分别赋上一个值,这样也方便能在画过的地方不再重画。然后,采用计数器或者时间真假的方法,用循环的方式,来规定一次下黑棋一次下白棋。
最后,也是最难的地方,便是五子棋判断输赢的部分。起初觉得好像这部分的实现遥不可及。可仔细想想,五子棋判断输赢的方式也很简单啊。无非是有没有五个相同颜色的棋子横向或竖向或斜向连在一起。于是,在定义数组后这显得很简单了,我单独定义一个类用以判断输赢,每下一个棋子,就判断这个棋子在横向、竖向和两个斜向上是否有五子连在一起,然后调用这四个方向的判断方法,最终完成了判断输赢方法的编写。然后,在继承MouseListener的类中,下完棋子后,调用这个方法,以此判断输赢。最后,人人版的五子棋便大功告成了。

你可能感兴趣的:(java,五子棋)