Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MouseAdapter在Java中玩Tic-Tac-Toe游戏_Java_Mouseevent - Fatal编程技术网

使用MouseAdapter在Java中玩Tic-Tac-Toe游戏

使用MouseAdapter在Java中玩Tic-Tac-Toe游戏,java,mouseevent,Java,Mouseevent,我有一个CLickableBox类,它可以为我创建框,现在我需要这样做,当单击时,X或O将显示在适当的位置。这是ClickableBox类 import java.awt.event.MouseAdapter; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.Container; public class ClickableBox exten

我有一个CLickableBox类,它可以为我创建框,现在我需要这样做,当单击时,X或O将显示在适当的位置。这是ClickableBox类

 import java.awt.event.MouseAdapter;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.Container;


public class ClickableBox extends MouseAdapter {

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

  public ClickableBox(int x, int y, int width, int height, Color borderColor, 
      Color backColor, boolean drawBorder, Container 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;
        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 Color getOldColor() {
    return oldColor;
  }

  public void setOldColor(Color oldColor) {
    this.oldColor = oldColor;
  }

  public boolean isDrawBorder() {
    return drawBorder;
  }

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



  public void setClicked(boolean clicked) {
    this.clicked = clicked;
}
}

也许您需要覆盖
mousererelease()
-类似这样的内容:

public void mouseReleased(MouseEvent e) {
  if ( this.value == NONE ) {
    if ( currentTurn == Turn.X ) {
      this.value = X;
    }
    else {
      this.value = O;
    }
  }
  super.mouseReleased();
}

使用一些全局
currentTurn
变量跟踪轮到谁,并使用
value
字段表示此框的当前值。您可能还想覆盖
draw()
以使其呈现“X”或“O”…

哪些部分给您带来了麻烦?我不确定如何在我的TictoeBox中实现,当单击框时,它们将变为X或O的功能。
public void mouseReleased(MouseEvent e) {
  if ( this.value == NONE ) {
    if ( currentTurn == Turn.X ) {
      this.value = X;
    }
    else {
      this.value = O;
    }
  }
  super.mouseReleased();
}