TIC TAC TOE 消去版

来源:互联网 发布:唢呐软件下载 编辑:程序博客网 时间:2024/05/16 12:22

最近在翻学长留下的资料,发现了一个很奇怪的TIC TAC TOE的实现:

  • 两个玩家,一个打叉(X),一个打圈(O), 轮流在3乘3的格上打自己的符号,最先以横、直、斜连成一线则为胜。下图是一个X方取胜的例子。
  • tic tac toe
  • 因为旧玩法如果下法无误,将得和局,所以出现变化,新玩法是在下完第七子时(先方第四子),最初的第一子要消失,第八子下完第二子消失,以此类推,保持盘上只有六子,下子后必须先处理消失之子,方可判断是否连成一条线。

不知道是不是自己比较笨,第二种是现实想了好久好久(⊙﹏⊙)b,但总算还是想出来了:主要是用ArrayList + Comparable的借口实现排序(感觉说起来很简单的样子,不知道为什么搞了两天多)。。。

现在的问题就是:

  • 代码繁杂:不少地方用了类似的代码段,但其中有些细微的差别,貌似不能用函数来笼统解决这个问题,让我很无奈;
  • 记录步数有限:由于用了一个全局变量来记录总步数并将步数分配到每个按键上,导致最终的游戏总步数有限(虽然我想2^31-1步没人能玩下来),姑且算一个不足。

    希望各位大大给出建议~

代码如下:

import javax.swing.*;import java.awt.*;import java.util.List;import java.awt.event.*;import java.util.*;class ButtonX extends Button implements Comparable<ButtonX>{    int btID = 0;    public int compareTo(ButtonX other){        if(this.btID < other.btID) return -1;        if(this.btID == other.btID) return 0;        return 1;    }}public class TicMain extends Frame {    public static final int GAME_SIZE = 450;    public static final int DISAPPEAR_START = 6;    int totalStep = 0;    ButtonX bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9;    boolean player = true;    List<ButtonX> btList = new ArrayList<ButtonX>();    public void launchFrame() {        this.setLayout(new GridLayout(3, 3, 0, 0));        this.setTitle("TicTacToe! By CasterKKK");        this.setLocation(400, 400);        this.setSize(GAME_SIZE, GAME_SIZE);        this.setBackground(Color.WHITE);        this.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                System.exit(0);            }        });        this.setVisible(true);        this.setResizable(false);        bt1 = new ButtonX();        bt1.btID = Integer.MAX_VALUE;        btList.add(bt1);        add(bt1);        bt2 = new ButtonX();        bt2.btID = Integer.MAX_VALUE;        btList.add(bt2);        add(bt2);        bt3 = new ButtonX();        bt3.btID = Integer.MAX_VALUE;        btList.add(bt3);        add(bt3);        bt4 = new ButtonX();        bt4.btID = Integer.MAX_VALUE;        btList.add(bt4);        add(bt4);        bt5 = new ButtonX();        bt5.btID = Integer.MAX_VALUE;        btList.add(bt5);        add(bt5);        bt6 = new ButtonX();        bt6.btID = Integer.MAX_VALUE;        btList.add(bt6);        add(bt6);        bt7 = new ButtonX();        bt7.btID = Integer.MAX_VALUE;        btList.add(bt7);        add(bt7);        bt8 = new ButtonX();        bt8.btID = Integer.MAX_VALUE;        btList.add(bt8);        add(bt8);        bt9 = new ButtonX();        bt9.btID = Integer.MAX_VALUE;        btList.add(bt9);        add(bt9);        bt1.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                /**                 * Actually it is the first version of the TicTacToe. In this                 * version, you can put mostly nine chess pieces at all, and the                 * next version is focused on a new chessing process: the                 * chessboard can put six chess at all, while put on the seventh                 * chess piece, the first one will gone.                 */                // The first version                // if (player && bt1.getLabel() == "") {                // bt1.setLabel("X");                // player = !player;                // } else if (!player && bt1.getLabel() == "") {                // bt1.setLabel("O");                // player = !player;                // }                // The second version                if (totalStep < DISAPPEAR_START && bt1.getLabel() == "") {                    if (player) {                        bt1.setLabel("X");                        player = !player;                        totalStep++;                        bt1.btID = totalStep;                    } else if (!player) {                        bt1.setLabel("O");                        player = !player;                        totalStep++;                        bt1.btID = totalStep;                    }                } else {                    Collections.sort(btList);                    btList.get(0).setLabel("");                    btList.get(0).btID = Integer.MAX_VALUE;                    if (player) {                        bt1.setLabel("X");                        player = !player;                        totalStep++;                        bt1.btID = totalStep;                    } else if (!player) {                        bt1.setLabel("O");                        player = !player;                        totalStep++;                        bt1.btID = totalStep;                    }                }                if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 1) {                    JOptionPane.showMessageDialog(null, "X wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == -1) {                    JOptionPane.showMessageDialog(null, "O wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 0) {                    JOptionPane.showMessageDialog(null, "Equal! One more game?");                    initGame();                }            }        });        bt2.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {//              The first version//              if (player && bt2.getLabel() == "") {//                  bt2.setLabel("X");//                  player = !player;//              } else if (!player && bt2.getLabel() == "") {//                  bt2.setLabel("O");//                  player = !player;//              }                // The second version                if (totalStep < DISAPPEAR_START && bt2.getLabel() == "") {                    if (player) {                        bt2.setLabel("X");                        player = !player;                        totalStep++;                        bt2.btID = totalStep;                    } else if (!player) {                        bt2.setLabel("O");                        player = !player;                        totalStep++;                        bt2.btID = totalStep;                    }                } else {                    Collections.sort(btList);                    btList.get(0).setLabel("");                    btList.get(0).btID = Integer.MAX_VALUE;                    if (player) {                        bt2.setLabel("X");                        player = !player;                        totalStep++;                        bt2.btID = totalStep;                    } else if (!player) {                        bt2.setLabel("O");                        player = !player;                        totalStep++;                        bt2.btID = totalStep;                    }                }                if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 1) {                    JOptionPane.showMessageDialog(null, "X wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == -1) {                    JOptionPane.showMessageDialog(null, "O wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 0) {                    JOptionPane.showMessageDialog(null, "Equal! One more game?");                    initGame();                }            }        });        bt3.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {//              First version//              if (player && bt3.getLabel() == "") {//                  bt3.setLabel("X");//                  player = !player;//              } else if (!player && bt3.getLabel() == "") {//                  bt3.setLabel("O");//                  player = !player;//              }//          Second version                if (totalStep < DISAPPEAR_START && bt3.getLabel() == "") {                    if (player) {                        bt3.setLabel("X");                        player = !player;                        totalStep++;                        bt3.btID = totalStep;                    } else if (!player) {                        bt3.setLabel("O");                        player = !player;                        totalStep++;                        bt3.btID = totalStep;                    }                } else {                    Collections.sort(btList);                    btList.get(0).setLabel("");                    btList.get(0).btID = Integer.MAX_VALUE;                    if (player) {                        bt3.setLabel("X");                        player = !player;                        totalStep++;                        bt3.btID = totalStep;                    } else if (!player) {                        bt3.setLabel("O");                        player = !player;                        totalStep++;                        bt3.btID = totalStep;                    }                }                if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 1) {                    JOptionPane.showMessageDialog(null, "X wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == -1) {                    JOptionPane.showMessageDialog(null, "O wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 0) {                    JOptionPane.showMessageDialog(null, "Equal! One more game?");                    initGame();                }            }        });        bt4.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {//              First version//              if (player && bt4.getLabel() == "") {//                  bt4.setLabel("X");//                  player = !player;//              } else if (!player && bt4.getLabel() == "") {//                  bt4.setLabel("O");//                  player = !player;//              }//              Second version                if (totalStep < DISAPPEAR_START && bt4.getLabel() == "") {                    if (player) {                        bt4.setLabel("X");                        player = !player;                        totalStep++;                        bt4.btID = totalStep;                    } else if (!player) {                        bt4.setLabel("O");                        player = !player;                        totalStep++;                        bt4.btID = totalStep;                    }                } else {                    Collections.sort(btList);                    btList.get(0).setLabel("");                    btList.get(0).btID = Integer.MAX_VALUE;                    if (player) {                        bt4.setLabel("X");                        player = !player;                        totalStep++;                        bt4.btID = totalStep;                    } else if (!player) {                        bt4.setLabel("O");                        player = !player;                        totalStep++;                        bt4.btID = totalStep;                    }                }                if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 1) {                    JOptionPane.showMessageDialog(null, "X wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == -1) {                    JOptionPane.showMessageDialog(null, "O wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 0) {                    JOptionPane.showMessageDialog(null, "Equal! One more game?");                    initGame();                }            }        });        bt5.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {//              First Version//              if (player && bt5.getLabel() == "") {//                  bt5.setLabel("X");//                  player = !player;//              } else if (!player && bt5.getLabel() == "") {//                  bt5.setLabel("O");//                  player = !player;//              }//              Second version                if (totalStep < DISAPPEAR_START && bt5.getLabel() == "") {                    if (player) {                        bt5.setLabel("X");                        player = !player;                        totalStep++;                        bt5.btID = totalStep;                    } else if (!player) {                        bt5.setLabel("O");                        player = !player;                        totalStep++;                        bt5.btID = totalStep;                    }                } else {                    Collections.sort(btList);                    btList.get(0).setLabel("");                    btList.get(0).btID = Integer.MAX_VALUE;                    if (player) {                        bt5.setLabel("X");                        player = !player;                        totalStep++;                        bt5.btID = totalStep;                    } else if (!player) {                        bt5.setLabel("O");                        player = !player;                        totalStep++;                        bt5.btID = totalStep;                    }                }                if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 1) {                    JOptionPane.showMessageDialog(null, "X wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == -1) {                    JOptionPane.showMessageDialog(null, "O wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 0) {                    JOptionPane.showMessageDialog(null, "Equal! One more game?");                    initGame();                }            }        });        bt6.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {//              First version//              if (player && bt6.getLabel() == "") {//                  bt6.setLabel("X");//                  player = !player;//              } else if (!player && bt6.getLabel() == "") {//                  bt6.setLabel("O");//                  player = !player;//              }//              Second version                if (totalStep < DISAPPEAR_START && bt6.getLabel() == "") {                    if (player) {                        bt6.setLabel("X");                        player = !player;                        totalStep++;                        bt6.btID = totalStep;                    } else if (!player) {                        bt6.setLabel("O");                        player = !player;                        totalStep++;                        bt6.btID = totalStep;                    }                } else {                    Collections.sort(btList);                    btList.get(0).setLabel("");                    btList.get(0).btID = Integer.MAX_VALUE;                    if (player) {                        bt6.setLabel("X");                        player = !player;                        totalStep++;                        bt6.btID = totalStep;                    } else if (!player) {                        bt6.setLabel("O");                        player = !player;                        totalStep++;                        bt6.btID = totalStep;                    }                }                if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 1) {                    JOptionPane.showMessageDialog(null, "X wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == -1) {                    JOptionPane.showMessageDialog(null, "O wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 0) {                    JOptionPane.showMessageDialog(null, "Equal! One more game?");                    initGame();                }            }        });        bt7.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {//              First Version//              if (player && bt7.getLabel() == "") {//                  bt7.setLabel("X");//                  player = !player;//              } else if (!player && bt7.getLabel() == "") {//                  bt7.setLabel("O");//                  player = !player;//              }//              Second version                if (totalStep < DISAPPEAR_START && bt7.getLabel() == "") {                    if (player) {                        bt7.setLabel("X");                        player = !player;                        totalStep++;                        bt7.btID = totalStep;                    } else if (!player) {                        bt7.setLabel("O");                        player = !player;                        totalStep++;                        bt7.btID = totalStep;                    }                } else {                    Collections.sort(btList);                    btList.get(0).setLabel("");                    btList.get(0).btID = Integer.MAX_VALUE;                    if (player) {                        bt7.setLabel("X");                        player = !player;                        totalStep++;                        bt7.btID = totalStep;                    } else if (!player) {                        bt7.setLabel("O");                        player = !player;                        totalStep++;                        bt7.btID = totalStep;                    }                }                if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 1) {                    JOptionPane.showMessageDialog(null, "X wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == -1) {                    JOptionPane.showMessageDialog(null, "O wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 0) {                    JOptionPane.showMessageDialog(null, "Equal! One more game?");                    initGame();                }            }        });        bt8.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {//              Frist version//              if (player && bt8.getLabel() == "") {//                  bt8.setLabel("X");//                  player = !player;//              } else if (!player && bt8.getLabel() == "") {//                  bt8.setLabel("O");//                  player = !player;//              }//              Second version                if (totalStep < DISAPPEAR_START && bt8.getLabel() == "") {                    if (player) {                        bt8.setLabel("X");                        player = !player;                        totalStep++;                        bt8.btID = totalStep;                    } else if (!player) {                        bt8.setLabel("O");                        player = !player;                        totalStep++;                        bt8.btID = totalStep;                    }                } else {                    Collections.sort(btList);                    btList.get(0).setLabel("");                    btList.get(0).btID = Integer.MAX_VALUE;                    if (player) {                        bt8.setLabel("X");                        player = !player;                        totalStep++;                        bt8.btID = totalStep;                    } else if (!player) {                        bt8.setLabel("O");                        player = !player;                        totalStep++;                        bt8.btID = totalStep;                    }                }                if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 1) {                    JOptionPane.showMessageDialog(null, "X wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == -1) {                    JOptionPane.showMessageDialog(null, "O wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 0) {                    JOptionPane.showMessageDialog(null, "Equal! One more game?");                    initGame();                }            }        });        bt9.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {//              First version//              if (player && bt9.getLabel() == "") {//                  bt9.setLabel("X");//                  player = !player;//              } else if (!player && bt9.getLabel() == "") {//                  bt9.setLabel("O");//                  player = !player;//              }//              Second version                if (totalStep < DISAPPEAR_START && bt9.getLabel() == "") {                    if (player) {                        bt9.setLabel("X");                        player = !player;                        totalStep++;                        bt9.btID = totalStep;                    } else if (!player) {                        bt9.setLabel("O");                        player = !player;                        totalStep++;                        bt9.btID = totalStep;                    }                } else {                    Collections.sort(btList);                    btList.get(0).setLabel("");                    btList.get(0).btID = Integer.MAX_VALUE;                    if (player) {                        bt9.setLabel("X");                        player = !player;                        totalStep++;                        bt9.btID = totalStep;                    } else if (!player) {                        bt9.setLabel("O");                        player = !player;                        totalStep++;                        bt9.btID = totalStep;                    }                }                if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 1) {                    JOptionPane.showMessageDialog(null, "X wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == -1) {                    JOptionPane.showMessageDialog(null, "O wins! One more game?");                    initGame();                } else if (checkWin(bt1.getLabel(), bt2.getLabel(), bt3.getLabel(), bt4.getLabel(), bt5.getLabel(),                        bt6.getLabel(), bt7.getLabel(), bt8.getLabel(), bt9.getLabel()) == 0) {                    JOptionPane.showMessageDialog(null, "Equal! One more game?");                    initGame();                }            }        });    }    public int checkWin(String bt1, String bt2, String bt3, String bt4, String bt5, String bt6, String bt7, String bt8,                        String bt9) {        if (((bt1 == bt2 && bt1 == bt3 && bt1 == "X") || (bt4 == bt5 && bt4 == bt6 && bt4 == "X")                || (bt7 == bt8 && bt7 == bt9 && bt7 == "X") || (bt1 == bt4 && bt1 == bt7 && bt1 == "X")                || (bt2 == bt5 && bt5 == bt8 && bt2 == "X") || (bt3 == bt6 && bt6 == bt9 && bt3 == "X")                || (bt1 == bt5 && bt5 == bt9 && bt1 == "X") || (bt3 == bt5 && bt5 == bt7 && bt3 == "X"))) {            return 1;        } else if (((bt1 == bt2 && bt1 == bt3 && bt1 == "O") || (bt4 == bt5 && bt4 == bt6 && bt4 == "O")                || (bt7 == bt8 && bt7 == bt9 && bt7 == "O") || (bt1 == bt4 && bt1 == bt7 && bt1 == "O")                || (bt2 == bt5 && bt5 == bt8 && bt2 == "O") || (bt3 == bt6 && bt6 == bt9 && bt3 == "O")                || (bt1 == bt5 && bt5 == bt9 && bt1 == "O") || (bt3 == bt5 && bt5 == bt7 && bt3 == "O"))) {            return -1;        } else if (bt1 != "" && bt2 != "" && bt3 != "" && bt4 != "" && bt5 != "" && bt6 != "" && bt7 != "" && bt8 != ""                && bt9 != "") {            return 0;        }        return 2;    }    public void initGame() {        bt1.setLabel("");        bt2.setLabel("");        bt3.setLabel("");        bt4.setLabel("");        bt5.setLabel("");        bt6.setLabel("");        bt7.setLabel("");        bt8.setLabel("");        bt9.setLabel("");    }    public static void main(String[] args) {        TicMain tm = new TicMain();        tm.launchFrame();    }

PS:那个注释部分是第一种实现,没有把它融入整个游戏中;
PPS:没有注释真是不好意思;
PPPS:INTELLJ真是意外好用,貌似eclipse不能在ActionListener里头设断点,但IntellJ可以,而且Debug时顺手多了。

0 0