Игра Tic Tac Toe на Java с использованием MouseAdapter - PullRequest
0 голосов
/ 29 марта 2012

У меня есть класс 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);

  }
}

1 Ответ

1 голос
/ 29 марта 2012

Возможно, вам нужно переопределить 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" ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...