⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maincontrol.java~8~

📁 Java做的黑白棋
💻 JAVA~8~
📖 第 1 页 / 共 5 页
字号:
                } else if (chessNum[0] < chessNum[2]) {
                    res = "白棋获胜!";
                } else {
                    res = "平局!";
                }

                JOptionPane.showMessageDialog(null,
                                              "本局游戏结束!\n" + res + "黑棋 " +
                                              chessNum[0] + " :" + chessNum[2] +
                                              " 白棋 ");
                ini();
                mode = -5;
                repaint();
                //重新开局,重新初始化矩阵
                return;
            }
            if (chessNum[0] + chessNum[2] >= 64) {
                String res = "";
                //比赛结果
                if (chessNum[0] > chessNum[2]) {
                    res = "黑棋获胜!";
                } else if (chessNum[0] < chessNum[2]) {
                    res = "白棋获胜!";
                } else {
                    res = "平局!";
                }
                repaint();
                JOptionPane.showMessageDialog(null,
                                              "本局游戏结束!\n" + res + "黑棋 " +
                                              chessNum[0] + " :" + chessNum[2] +
                                              " 白棋 ");
                ini();
                mode = -5;
                checkObjects( -1);
                repaint();
                //重新开局,重新初始化矩阵
                return;
            }
            repaint();

            nextToGo *= ( -1);
            //交换下一步走棋的人
            checkObjects(nextToGo);

            int exchange = 0;
            //交换次数,用来判断是否出现死锁情况!
            while (objectPlaces == 0)
            //if( objectPlaces == 0 )
            {
                exchange++;
                //交换次数加1
                if (exchange == 2) {
                    //还得判断输赢情况,双方棋子比例!告知用户!
                    String res = "";
                    //比赛结果
                    if (chessNum[0] > chessNum[2]) {
                        res = "黑棋获胜!";
                    } else if (chessNum[0] < chessNum[2]) {
                        res = "白棋获胜!";
                    } else {
                        res = "平局!";
                    }
                    if (chessNum[0] + chessNum[2] < 64) {
                        JOptionPane.showMessageDialog(null,
                                "双方均无棋可走,本局游戏结束!\n" + res + "黑棋 " + chessNum[0] +
                                " :" + chessNum[2] + " 白棋 ");
                        ini();
                        mode = -5;
                        checkObjects( -1);
                        repaint();
                        //重新开局,重新初始化矩阵
                    }
                    break;
                    //return;
                }
                //如果出现当前方nextToGo无法走棋的情况,则弹出提示信息告知用户,然后把走棋权交给对方,尤其注意死锁的情况,即两方都无法走棋时,则游戏中止
                String msg = "";
                //弹出对话框消息内容
                if (nextToGo == -1) {
                    msg = "黑棋无棋可走,必须停走一步!\n白棋连走一步!";
                } else {
                    msg = "白棋无棋可走,必须停走一步!\n黑棋连走一步!";
                }
                JOptionPane.showMessageDialog(null, msg);

                process.addElement(matrix);
                //把吃棋前的矩阵加入向量

                //System.exit( 0 );
                nextToGo *= ( -1);
                //交换下一步走棋的人
                checkObjects(nextToGo);
            }
            //从while循环中出来时已经保证已经有可放棋子的地方
            exchange = 0;
            //清0
            repaint();
        } else {
            //播放声音警告、声音提示( ao ao ),导入音频文件
            JOptionPane.showMessageDialog(null, "这里不能放棋子!");
            repaint();
            //System.exit( 0 );
        }
    }

    public
    /*static*/ void eat(int i, int j, int side) {
        //从8个方向上来看side这一方由于这一棋子(i,j)的加入所能吃掉的对方的棋子,并修改对应的matrix的值
        //紧挨着的是对方的棋子,并且有自方的棋子可以截至,中间若遇到空格则直接跳出,对方棋子则继续往下走,自方棋子则吃掉中间夹着的棋子(利用for循环,里面有一个计数器)并跳出
        //上
        //////////////////////////////////////////////////////////
        if (i != 0) {
            //如果不为第一行,则向上搜索
            if (matrix[i - 1][j] == ( -1) * side) {
                //说明在“上”这个方向是对方的棋子,则还有检索下去的必要
                for (int m = i - 2; m >= 0; m--) {
                    if (matrix[m][j] == side) {
                        for (int l = i; l >= m; l--) {
                            matrix[l][j] = side;
                            //中间夹着的所有棋子全部变为刚走的棋子(吃棋的一方)
                        }
                        //chessNum[side + 1] += ( i - m );
                        //side方增加的棋子:吃掉的加上刚加入的一个
                        //chessNum[(-1)*side + 1] -= ( i - m -1);
                        //对方损失的棋子:被吃掉的夹在中间的棋子
                        break;
                        //如果"遭遇"相同的棋子,则这个棋子就是吃棋的信号、或称导火索、终结符,停止搜索,跳出
                    } else if (matrix[m][j] == 0) {
                        break;
                        //如果出现“空格”,则没法吃棋,直接跳出
                    } else if (matrix[m][j] == ( -1) * side) {
                        //如果仍为与当前棋子不同颜色的棋子,则继续往下走
                    }
                }
            }
        }
        ///////////////////////////////////////////////////////////////////////

        //下
        //////////////////////////////////////////////////////////////////////
        if (i != 7) {
            //如果不为最后一行,则向下搜索
            if (matrix[i + 1][j] == ( -1) * side) {
                //说明在“下”这个方向是对方的棋子,则还有检索下去的必要
                for (int m = i + 2; m <= 7; m++) {
                    if (matrix[m][j] == side) {
                        for (int l = i; l <= m; l++) {
                            matrix[l][j] = side;
                            //中间夹着的所有棋子全部变为刚走的棋子(吃棋的一方)
                        }
                        //chessNum[side + 1] += ( m - i );
                        //side方增加的棋子:吃掉的加上刚加入的一个
                        //chessNum[(-1)*side + 1] -= ( m - i -1);
                        //对方损失的棋子:被吃掉的夹在中间的棋子

                        break;
                        //如果"遭遇"相同的棋子,则这个棋子就是吃棋的信号、或称导火索、终结符,停止搜索,跳出
                    } else if (matrix[m][j] == 0) {
                        break;
                        //如果出现“空格”,则没法吃棋,直接跳出
                    } else if (matrix[m][j] == ( -1) * side) {
                        //如果仍为与当前棋子不同颜色的棋子,则继续往下走
                    }
                }
            }
        }
        //////////////////////////////////////////////////////////////////////
        //左
        //////////////////////////////////////////////////////////
        if (j != 0) {
            //如果不为第一列,则向左搜索
            if (matrix[i][j - 1] == ( -1) * side) {
                //说明在“左”这个方向是对方的棋子,则还有检索下去的必要
                for (int m = j - 2; m >= 0; m--) {
                    if (matrix[i][m] == side) {
                        for (int l = j; l >= m; l--) {
                            matrix[i][l] = side;
                            //中间夹着的所有棋子全部变为刚走的棋子(吃棋的一方)
                        }
                        //chessNum[side + 1] += ( j - m );
                        //side方增加的棋子:吃掉的加上刚加入的一个
                        //chessNum[(-1)*side + 1] -= ( j - m -1);
                        //对方损失的棋子:被吃掉的夹在中间的棋子
                        break;
                        //如果"遭遇"相同的棋子,则这个棋子就是吃棋的信号、或称导火索、终结符,停止搜索,跳出
                    } else if (matrix[i][m] == 0) {
                        break;
                        //如果出现“空格”,则没法吃棋,直接跳出
                    } else if (matrix[i][m] == ( -1) * side) {
                        //如果仍为与当前棋子不同颜色的棋子,则继续往下走
                    }
                }
            }
        }
        ///////////////////////////////////////////////////////////////////////
        //右
        //////////////////////////////////////////////////////////////////////
        if (j != 7) {
            //如果不为最后一列,则向右搜索
            if (matrix[i][j + 1] == ( -1) * side) {
                //说明在“右”这个方向是对方的棋子,则还有检索下去的必要
                for (int m = j + 2; m <= 7; m++) {
                    if (matrix[i][m] == side) {
                        for (int l = j; l <= m; l++) {
                            matrix[i][l] = side;
                            //中间夹着的所有棋子全部变为刚走的棋子(吃棋的一方)
                        }
                        //chessNum[side + 1] += ( m - j );
                        //side方增加的棋子:吃掉的加上刚加入的一个
                        //chessNum[(-1)*side + 1] -= ( m - j -1);
                        //对方损失的棋子:被吃掉的夹在中间的棋子

                        break;
                        //如果"遭遇"相同的棋子,则这个棋子就是吃棋的信号、或称导火索、终结符,停止搜索,跳出
                    } else if (matrix[i][m] == 0) {
                        break;
                        //如果出现“空格”,则没法吃棋,直接跳出
                    } else if (matrix[i][m] == ( -1) * side) {
                        //如果仍为与当前棋子不同颜色的棋子,则继续往下走
                    }
                }
            }
        }
        //////////////////////////////////////////////////////////////////////
        //左上
        //////////////////////////////////////////////////////////////////////
        if (i != 0 && j != 0) {
            //如果不为第一列或第一列,则向左上搜索
            if (matrix[i - 1][j - 1] == ( -1) * side) {
                //说明在“左上”这个方向是对方的棋子,则还有检索下去的必要
                for (int m = i - 2, n = j - 2; m >= 0 && n >= 0; m--, n--) {
                    if (matrix[m][n] == side) {
                        //把先前的夹在中间的进行修改
                        for (int l = i, q = j; l >= m && q >= n; l--, q--) {
                            matrix[l][q] = side;
                            //中间夹着的所有棋子全部变为刚走的棋子(吃棋的一方)
                        }
                        //chessNum[side + 1] += ( i - m );
                        //side方增加的棋子:吃掉的加上刚加入的一个
                        //chessNum[(-1)*side + 1] -= ( i - m -1);
                        //对方损失的棋子:被吃掉的夹在中间的棋子
                        break;
                        //如果"遭遇"相同的棋子,则这个棋子就是吃棋的信号、或称导火索、终结符,停止搜索,跳出
                    } else if (matrix[m][n] == 0) {

                        break;
                        //如果出现“空格”,则没法吃棋,直接跳出
                    } else if (matrix[m][n] == ( -1) * side) {
                        //如果仍为与当前棋子不同颜色的棋子,则继续往下走
                    }
                }
            }
        }
        //////////////////////////////////////////////////////////////////////
        //右上
        //////////////////////////////////////////////////////////////////////
        if (i != 0 && j != 7) {
            //如果不为最后一列或第一行,则向右上搜索
            if (matrix[i - 1][j + 1] == ( -1) * side) {
                //说明在“右上”这个方向是对方的棋子,则还有检索下去的必要
                for (int m = i - 2, n = j + 2; m >= 0 && n <= 7; m--, n++) {
                    if (matrix[m][n] == side) {
                        //把先前的夹在中间的进行修改
                        for (int l = i, q = j; l >= m && q <= n; l--, q++) {
                            matrix[l][q] = side;
                            //中间夹着的所有棋子全部变为刚走的棋子(吃棋的一方)
                        }
                        //chessNum[side + 1] += ( i - m );
                        //side方增加的棋子:吃掉的加上刚加入的一个
                        //chessNum[(-1)*side + 1] -= ( i - m -1);
                        //对方损失的棋子:被吃掉的夹在中间的棋子

                        break;
                        //如果"遭遇"相同的棋子,则这个棋子就是吃棋的信号、或称导火索、终结符,停止搜索,跳出
                    } else if (matrix[m][n] == 0) {

                        break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -