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

📄 maincontrol.java~8~

📁 Java做的黑白棋
💻 JAVA~8~
📖 第 1 页 / 共 5 页
字号:

        }
        else if (cmd.equals("读取游戏进度"))
        {

        }
        else if (cmd.equals("放弃该局"))
        {

        } else if (cmd.equals("退出")) {
            int ans = JOptionPane.showConfirmDialog(null, "确定要退出吗?(Y/N)");
            if (ans == 0) {
                this.dispose();
                System.exit(0);
            } else {
                repaint();
            }
        } else if (cmd.equals("新建游戏")) {
            //如果选择此项,则在两者通信时此机器作为服务器
            NetWork w = new NetWork();
            w.setVisible(true);
            repaint();
            isServer = true;
            //标志是服务器
            //con.ConnectToClient();
        } else if (cmd.equals("加入游戏")) {
            //如果选择此项,则在两者通信时此机器作为客户端
            NetWork w = new NetWork();
            w.setVisible(true);
            repaint();
            isServer = false;
            //标志是客户端
            //con.ConnectToClient();
        }
        else
        {
            repaint();
        }
    }

    /*初始化节点矩阵matrix*/
    public
    /*static*/ void ini() {
        //初始化matrix矩阵
        for (int i = 0; i < LINE_NUM; i++) {
            for (int j = 0; j < COLUMN_NUM; j++) {
                if ((i == 3 && j == 3) || (i == 4 && j == 4)) {
                    matrix[i][j] = 1;
                    //白子
                } else if ((i == 3 && j == 4) || (i == 4 && j == 3)) {
                    matrix[i][j] = -1;
                    //黑子
                } else {
                    matrix[i][j] = 0;
                    //其它:无子
                }
            }
        }
    }

    /*初始化棋盘上各个位置处的权重*/
    public void iniWeight() {
        //weight = { 5 , 0 , 4 , 3 , 3 , 4 , 0 , 5 ; 0,0, 1,1,1,1,0,0;4,1,2,2,2,2,1,4;3,1,2,2,2,2,1,3;3,1,2,2,2,2,1,3;4,1,2,2,2,2,1,4;0,0, 1,1,1,1,0,0;5 , 0 , 4 , 3 , 3 , 4 , 0 , 5 ;}
    }

    public int[][] getMatrix() {
        return matrix;
    }

    public void setMatrix(int[][] matrix) {
        this.matrix = matrix;
    }

    /*矩阵中位置与前台坐标之间的相互转化方法,返回值不好处理*/
    public void convert() {

    }

    /*check方法:检测出所有当前执棋方能到达的位置,之所以叫做checkObject,是用于下面画“X”的地方,修改其matrix值*/
    public void checkObjects(int side) {
        // side 表示当前(接下来)要走棋的是哪一方,然后此方法查找所有这一方所能到达的地方,并修改其matrix值并调用paint()方法
        for (int i = 0; i < LINE_NUM; i++) {
            for (int j = 0; j < COLUMN_NUM; j++) {
                //用来定位到棋盘上的某一棋子,然后从8个方向上来定位搜索可到达的位置
                if (matrix[i][j] == side) {
                    //如果当前位置棋子为待检测的棋子,则从8个方向上来定位搜索可到达的位置,
                    //看在哪一些地方可以放置要走的这一步棋子,并修改对应的matrix的值

                    //上
                    //////////////////////////////////////////////////////////
                    if (i != 0) {
                        //如果不为第一行,则向上搜索
                        if (matrix[i - 1][j] == ( -1) * side) {
                            //说明在“上”这个方向是对方的棋子,则还有检索下去的必要
                            for (int m = i - 2; m >= 0; m--) {
                                if (matrix[m][j] == side) {
                                    break;
                                    //如果"遭遇"相同的棋子,这个方向就停止搜索,跳出
                                } else if (matrix[m][j] % 2 == 0) {
                                    matrix[m][j] += 2;
                                    objectPlaces++;
                                    break;
                                    //如果出现“空格”,就修改其matrix的值,以供repaint()画"X"时使用
                                } 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) {
                                    break;
                                    //如果"遭遇"相同的棋子,这个方向就停止搜索,跳出
                                } else if (matrix[m][j] % 2 == 0) {
                                    matrix[m][j] += 2;
                                    objectPlaces++;
                                    break;
                                    //如果出现“空格”,就修改其matrix的值,以供repaint()画"X"时使用
                                } 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) {
                                    break;
                                    //如果"遭遇"相同的棋子,这个方向就停止搜索,跳出
                                } else if (matrix[i][m] % 2 == 0) {
                                    matrix[i][m] += 2;
                                    objectPlaces++;
                                    break;
                                    //如果出现“空格”,就修改其matrix的值,以供repaint()画"X"时使用
                                } 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) {
                                    break;
                                    //如果"遭遇"相同的棋子,这个方向就停止搜索,跳出
                                } else if (matrix[i][m] % 2 == 0) {
                                    matrix[i][m] += 2;
                                    objectPlaces++;
                                    break;
                                    //如果出现“空格”,就修改其matrix的值,以供repaint()画"X"时使用
                                } 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) {
                                    break;
                                    //如果"遭遇"相同的棋子,这个方向就停止搜索,跳出
                                } else if (matrix[m][n] % 2 == 0) {
                                    matrix[m][n] += 2;
                                    objectPlaces++;
                                    break;
                                    //如果出现“空格”,就修改其matrix的值,以供repaint()画"X"时使用
                                } 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) {
                                    break;
                                    //如果"遭遇"相同的棋子,这个方向就停止搜索,跳出
                                } else if (matrix[m][n] % 2 == 0) {
                                    matrix[m][n] += 2;
                                    objectPlaces++;
                                    break;
                                    //如果出现“空格”,就修改其matrix的值,以供repaint()画"X"时使用
                                } else if (matrix[m][n] == ( -1) * side) {
                                    //如果仍为与当前棋子不同颜色的棋子,则继续往下走
                                }
                            }
                        }
                    }
                    //////////////////////////////////////////////////////////////////////
                    //左下
                    //////////////////////////////////////////////////////////////////////
                    if (i != 7 && j != 0) {
                        //如果不为最后一行或第一列,则向左下搜索
                        if (matrix[i + 1][j - 1] == ( -1) * side) {
                            //说明在“左下”这个方向是对方的棋子,则还有检索下去的必要
                            for (int m = i + 2, n = j - 2; m <= 7 && n >= 0; m++,
                                    n--) {
                                if (matrix[m][n] == side) {
                                    break;
                                    //如果"遭遇"相同的棋子,这个方向就停止搜索,跳出
                                } else if (matrix[m][n] % 2 == 0) {
                                    matrix[m][n] += 2;
                                    objectPlaces++;
                                    break;
                                    //如果出现“空格”,就修改其matrix的值,以供repaint()画"X"时使用
                                } else if (matrix[m][n] == ( -1) * side) {
                                    //如果仍为与当前棋子不同颜色的棋子,则继续往下走
                                }
                            }
                        }
                    }
                    //////////////////////////////////////////////////////////////////////
                    //右下
                    //////////////////////////////////////////////////////////////////////
                    if (i != 7 && j != 7) {
                        //如果不为最后一列或最后一列,则向右下搜索
                        if (matrix[i + 1][j + 1] == ( -1) * side) {
                            //说明在“右下”这个方向是对方的棋子,则还有检索下去的必要
                            for (int m = i + 2, n = j + 2; m <= 7 && n <= 7; m++,
                                    n++) {
                                if (matrix[m][n] == side) {
                                    break;
                                    //如果"遭遇"相同的棋子,这个方向就停止搜索,跳出
                                } else if (matrix[m][n] % 2 == 0) {
                                    matrix[m][n] += 2;
                                    objectPlaces++;
                                    break;
                                    //如果出现“空格”,就修改其matrix的值,以供repaint()画"X"时使用
                                } else if (matrix[m][n] == ( -1) * side) {
                                    //如果仍为与当前棋子不同颜色的棋子,则继续往下走
                                }
                            }
                        }
                    }
                    //////////////////////////////////////////////////////////////////////
                }
            }
        }
    }

    /*paint()方法,要求必须导入AWT包*/
    public void paint(Graphics g) {
        //画图方法:注意,整个窗口的原点是( 0 , 0 ),而棋盘的原点是( dx , dy )

⌨️ 快捷键说明

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