五子棋初步详解

以下是本算法的主要思想步骤,而具体算法分析及注解,相关图片请下载文件

 

 

另外还可以在算法中添加悔棋、重来一局、显示当前步骤的算法,详细算法将在以后的博文中讲述,这里也给出了加强版的图片于下载文件中

 

 

 

编写五子棋程序,初步功能思想摘要:

1.框架类的实现:

      最基本的是能实现在屏幕上显示一个窗口,类似windows窗口,该窗口的属性有:标题(如“中国五子棋--梅竹寒香”)、初始显示的窗口大小、是否可以改变的大小、窗口初始显示在屏幕的位置、以及窗口关闭时程序是否真正退出(若设计成不退出,那么只有通过任务管理器进行强制关闭了,有点麻烦哈)等。这些都会用到JAVA本身提供的javax.swing.JFrame类进行相关的设置,这些相对来说比较简单,多看几遍就会应用了

2.画布的取得:

    每个JFram 类中,都包含一个默认的画布对象,由于本程序没有调用图片素材,所以棋盘的实现与棋子的实现都是通过画布的绘画功能实现的,例如棋盘的横竖线通过drawLine,棋子通过drawOval来绘出,这样稍稍繁琐了些,也是个小小的挑战,但能很大程度上巩固画布方面的java知识

 

3.画布的重绘:

    当窗口移动,最小化后再重新显示,或被其他的程序窗口覆盖后再重新显示,都要用到画布重绘函数(这个方法不用程序显式调用,当上述三种情况发生时程序会自动调用),因为窗口所呈现的图像或文字,都是用数据的形式展现出来的,当发生上述三种情况是,系统将会把以上数据压入缓冲盘中暂时存放,当窗口重新显示是,这些数据就会被重新调出来,按照压入时的情况进行重绘,这样图像文字等内容才能重新显示,由于这个重绘函数继承于父类,而父类中的重绘函数没有进行数据记录与多余的重绘信息(就类似一个空函数)所以如果不作更改,当发生上述三种情况窗口重现时,主体窗口中将显示空白,为解决这个问题就要进行父类重绘函数的重写(进行覆盖)

 

4.鼠标监听器

    这是系统提供的用来跟踪鼠标点击事件的函数,把鼠标监听器添加到JFrame中,就可以记录鼠标点击窗体时的坐标,从而可以用这个坐标值来确定落子的位置,还有利用他可以判断某处是否已经下过棋子

 

5.轮流下子:

    可以用一个整型数进行跟踪记录,初始值设为0(当它为0时表明要下白子,当它为1时表明要下黑子),每次鼠标点击时,当这个值是0就下白子,当这个值是1时就下黑子,此时要定义一个数组来记录落子点的坐标,落子颜色,与是否已经落过子,方便后面的输赢与是否和局的判断

 

6.判断某节点处是否已落子和已落子的颜色

    还是用类似标题5中的方法进行记录,这是就要用两个整型数分别进行记录

 

7.计算总步数

     定义一个全局整型变量鼠标每点击落子成功,该整型数就自加1,这样就可以记录整个过程中所走的步数

 

8.判断输赢

     编写一个判断输赢类WinONo,用来判断输赢,每次进行鼠标点击并落子成功,就向WinONo中的set函数中传递一次落子位置与落子颜色,把这个落子点作为基点(定义一个整型数sameColorCount记录不间断相同棋子的个数,初始值设为1)向他的四个方向进行查找颜色相同的棋子,例如在水平方向上,先向右进行五次循环,如果这几点右边界,那么直接结束循环,sameColorCount还为1,如果没有到达右边界,那么就向基点的有方向搜索,每次搜索到一个连续的相同颜色的棋子sameColorCount自加1,知道遇到循环结束或右边界或遇到不同颜色属性值(如果基点的棋子是白色,那么它的颜色属性值为0,而不同的颜色属性值有1和-1两种情况,1代表黑棋子,-1代表那个节点没有下棋子)就停止循环,接着用同样的方法从基点向左方向搜索,最后判断sameColorCount的值,如果大于等于5,则表明在这个方向上存在五子连珠的情况,再根据基点的颜色属性值弹出消息框提示执该颜色棋子方胜利,如果sameColorCount小于5,则什么也不执行,其他方向情况类似。每次进行鼠标点击调用一下这个函数进行输赢判断

 

9.重新布局

   一旦某方胜利的时候让判断输赢函数中传出一个true,这样编写一个重新布局函数,将上一局的所有记录数据恢复到初始状态,在调用this.repaint()方法,实际上调用前面的paint()方法,进行初始化重绘

 

10.用红线画出五子连珠

    在标题8判断输赢中,还例如是水平方向上的,分别记录五子连珠的左右端点的棋盘坐标,在调用drawLine画出红色判定线

 

 

提示:将含有代码的文件夹直接拷贝的到 src文件夹下,点击主函数类运行   

你可能感兴趣的:(框架,算法,windows,swing,中国移动)