嵌套if语句。每次都遵循相同的条件

时间:2012-04-25 13:44:16

标签: java tic-tac-toe

我只是将错误的条件打印到applet。我假设我的嵌套if语句有问题吗?

ClickableBox.Java

public class ClickableBox extends MouseAdapter {

  private int x, y, width, height;
  private Color borderColor, backColor, oldColor;
  private boolean drawBorder, clicked, isX;
  private Container parent;
  TheGame game;

  public ClickableBox(int x, int y, int width, int height, Color borderColor,
      Color backColor, boolean drawBorder, TheGame parent) {

    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.borderColor = borderColor;
    this.backColor = backColor;
    this.drawBorder = drawBorder;
    this.parent = parent;

  }

  public void draw(Graphics g) {

    oldColor = g.getColor();
    g.setColor(backColor);
    g.fillRect(x, y, width, height);
    if (drawBorder) {
      g.setColor(borderColor);
      g.drawRect(x, y, width, height);
    }
    g.setColor(oldColor);
  }

  public void mouseReleased(MouseEvent e) {

    if (x < e.getX() && e.getX() < x + width && y < e.getY()
        && e.getY() < y + height) {
      clicked = true;
      setX(!isX);
      parent.repaint();

    }
  }

  public boolean isClicked() {
    return clicked;
  }

  public int getX() {
    return x;
  }

  public void setX(int x) {
    this.x = x;
  }

  public int getY() {
    return y;
  }

  public void setY(int y) {
    this.y = y;
  }

  public int getWidth() {
    return width;
  }

  public void setWidth(int width) {
    this.width = width;
  }

  public int getHeight() {
    return height;
  }

  public void setHeight(int height) {
    this.height = height;
  }

  public Color getBorderColor() {
    return borderColor;
  }

  public void setBorderColor(Color borderColor) {
    this.borderColor = borderColor;
  }

  public Color getBackColor() {
    return backColor;
  }

  public void setBackColor(Color backColor) {
    this.backColor = backColor;
  }

  public boolean isDrawBorder() {
    return drawBorder;
  }

  public void setDrawBorder(boolean drawBorder) {
    this.drawBorder = drawBorder;
  }

  public boolean isX() {
    return isX;
  }

  public void setX(boolean isX) {
    this.isX = isX;
  }

}

TicTacToeBox.Java

 public class TicTacToeBox extends ClickableBox {

  Container parent;
  TheGame game;

  public TicTacToeBox(int x, int y, int width, int height, Color borderColor,
      Color backColor, boolean drawBorder, TheGame parent) {
    super(x, y, width, height, borderColor, backColor, drawBorder, parent);

    this.parent = parent;

  }

  public void draw(Graphics g) {

    if (isClicked()) {
      if (super.isX()) {
        g.drawLine(getX(), getY(), getX() + getWidth(), getY() + getHeight());
        g.drawLine(getX() + getWidth(), getY(), getX(), getY() + getHeight());
        if (isDrawBorder()) {
          g.drawRect(getX(), getY(), getWidth(), getHeight());
        }
      } else {
        g.drawOval(getX() + 3, getY() + 3, getWidth() - 6, getHeight() - 6);
        if (isDrawBorder()) {
          g.drawRect(getX(), getY(), getWidth(), getHeight());
        }
      }
    } else {
      g.drawRect(getX(), getY(), getWidth(), getHeight());
    }
  }

}

以下是实际的applet代码...... TheGame.java

public class TheGame extends Applet {

  private final int START_X = 20;
  private final int START_Y = 40;
  private final int ROWS = 3;
  private final int COLS = 3;
  private final int BOX_WIDTH = 70;
  private final int BOX_HEIGHT = 70;

  private TicTacToeBox boxes[][];

  private Button resetButton;
  private boolean isX;

  private boolean blank;

  public void init() {
    boxes = new TicTacToeBox[ROWS][COLS];

    resize(300, 300);
    buildBoxes();

    resetButton = new Button("Reset Game");
    resetButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {

        buildBoxes();
        repaint();
      }
    });
    add(resetButton);
  }

  public void paint(Graphics g) {
    // loop through the boxes rows

    setX(!isX);
    // System.out.println(isX());

    for (int row = 0; row < boxes.length; row++) {
      for (int col = 0; col < boxes[row].length; col++) {

        boxes[row][col].draw(g);

        if (boxes[row][col].isClicked()) {

        }
      }
    }

  }

  private void buildBoxes() {

    for (int row = 0; row < boxes.length; row++) {
      for (int col = 0; col < boxes[row].length; col++) {
        boxes[row][col] = new TicTacToeBox(START_X + col * BOX_WIDTH, START_Y
            + row * BOX_HEIGHT, BOX_WIDTH, BOX_HEIGHT, Color.black,
            Color.white, true, this);
        addMouseListener(boxes[row][col]);

      }
    }
  }

  public boolean isX() {
    return isX;
  }

  public void setX(boolean isX) {
    this.isX = isX;
  }

  public boolean isBlank() {
    return blank;
  }

  public void setBlank(boolean blank) {
    this.blank = blank;
  }

}

关于如何让条件从true切换到false以及实际输出我对每种条件所拥有的条件的任何输入都将非常感激。

1 个答案:

答案 0 :(得分:5)

你不断重新实施TheGame,这就是为什么你总是得到你的if的同一个分支。 game应该是你包含类而不是局部变量的成员,你应该在构造函数中初始化它:

public class TicTacToeBox {
    private TheGame game;

    // I am guessing your constructor is something like this (but it is just guessing)
    public TicTacToeBox(int i, int j , int k , int l, Color c1, Color c2, boolean b, TheGame game) {
         ...
         this.game = game;
    }
    ...
    public void draw(Graphics g) {
        // TheGame game = new TheGame();
        ...
    }