java - 使用 MouseAdapter 在 Java 中进行 Tic Tac Toe 游戏

标签 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 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;
}
}

TicTacToeBox 类应该扩展 ClickableBox,以便每个框都将是一个监听器。它需要被设计成每个 Box 对象都能照顾自己 - 它知道它是否被单击,如果被单击,它是否会显示 x 或 o。

TicTacToeBox 类是我遇到问题的地方。这就是我的游戏板所需要的。关于如何简单地实现这一点有什么建议吗?下面是我到目前为止的 TicTacToeBox(不多):

我们将不胜感激一些指导和/或帮助!谢谢。

import java.awt.Color;
import java.awt.Container;


public class TicTacToeBox extends ClickableBox {

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

  }
}

最佳答案

也许你需要重写mouseReleased() - 像这样:

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”...

关于java - 使用 MouseAdapter 在 Java 中进行 Tic Tac Toe 游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9927920/

相关文章:

java - 如何从java中的任何文本文件中查找偶数和奇数

java - 如何分别获取图像的rgb矩阵?

java - 当框架在屏幕上移动时,鼠标不会保持其位置

javascript - 使用鼠标滚轮插件更改背景图像

将 SVG 形状添加到 Raphael 组火灾事件中,就像分开一样

java - 如何在java中精确复制图像?

java - Java 解释器是否将字节码文件转换为可执行文件?

java - 如何在java中解析soap字符串

c# - WPF 鼠标按下事件

c++ - SendInput - (鼠标移动模拟)