欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自制五子棋 paintcountjframe

程序员文章站 2024-03-12 10:26:26
...
  • 实现五子棋人机对战
  •     1,继承JFrame类。
           首先创建一个界面,用来放棋盘。设置窗体的各属性,在界面上画线,有线的地方作为棋盘。对棋盘大小,棋子大小,棋盘上行数,列数等都要进行设置。这里的画线要在对父类JFrame的paint函数的重写方法中。这样就可以一直可见棋盘。而且在paint的重写方法中,还要对画棋子进行重写,这样每次下的棋子也就能得到保存。
    在棋盘上方还可以添加菜单栏,对菜单栏下的选项添加监听器。这样就可以让用户对下棋流程进行控制。

        2,设置下棋子的条件。
           人机对战,用户先下子,设置用户下黑子,计算机下白子。用一个计数器计算当前下了的棋子的数目count。每当count%2==0时就让用户下棋,否则计算机下棋。每下一颗棋子,进行一次判断,看是否有五子连珠。
          用户下棋时会点到棋盘上非焦点的地方。那就要对用户点击的位置进行判断。得到点击处的横纵坐标,用它们分别对棋盘格子大小取余,如果都小于误差范围或者都大于(格子大小-误差范围),那么就讲坐标点改到距离最近的焦点上。再判断这个焦点是否还是空(还没下任何棋子,用一个数组存放信息,如果是白子则为2,是黑子则为1,否则为0),是空就在该点画一个黑色的圆,设置该点处信息为1。对当前棋局进行判断,看是否已经有五子连珠了。
          接着就是计算机下棋了。设置棋子颜色为白色;count++;对当前棋局进行判断,看应该下哪一个地方才能让黑子不赢,让白字尽快赢。找到该点,在该点画一个白色的圆。判断当前是否有五子连珠。
          判断应该下哪一个点的算法:
         分析找到白子的数目和附近空格的情况。如:空白白白空;黑白白白空;对空格赋一个权值。白子数目每增加一个,所权值相应乘以10;黑子是一样的赋值方法。只要一反过来的身份来看,两种赋权值方式是相同的。
         横向,纵向,左斜方向,右斜方向四个方向分别判断棋子数目,分别赋权值。
         横向:用2个变量(a1,a2)存放当前位置的横坐标,2个变量存放当前位置纵坐标。a1--向左找相同的棋子,a2++向右找相同的棋子。记录找到的棋子总数。在继续向两边找空格数,再给当前位置处加上相应的权值,权值累加。
         其他三个方向相似的查找与赋值。只是坐标改变方式不同。
         把从四个方向分别给当前位置赋得权值加起来。用一个数组存放棋盘上个点的权值,找到权值最大且还是空格的点,在该点下白子。接着判断是否有五子连珠。


        3,判断是否五子连珠
          横向,纵向,左斜方向,右斜方向分别进行判断。     
          横向:从当前下的棋子位置向左找,一直找到跟该棋子颜色不相同或者不相连的点,判断是否已经找到有5颗相同的,如果是则输出该颜色的棋子赢了。然后从最后一个棋子向右找,记录总共找到多少个相同且相连的棋子。如果有5颗了,则输出当前下的颜色的棋子赢了。
          其他三个方向类似。