2012-03-29 77 views
0

我有一个CLickableBox类为我创建框,现在我需要使它能够在单击时将X或O显示在适当位置。这是ClickableBox类。使用MouseAdapter的Java中的Tic Tac Toe游戏

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); 

    } 
} 
+0

哪些部件会给您带来麻烦? – kevingreen 2012-03-29 14:55:08

+0

我不知道如何实现我的TicTacToeBox,当点击框的功能时,它们将变为X或O. – MontyTheMack 2012-03-29 14:56:42

回答

1

也许你需要重写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”...