1

我正在制作一个 connect 4 游戏,点击如下。

    public void mouseClicked(MouseEvent e) {
    xPos = e.getX();
    yPos = e.getY();
    this.repaint();

    x = e.getX(); 
    if(x <= 400) { 
        x = x/48; 
        System.out.println("Column number " + x);
        positions[0][0]=1;
        Component board = e.getComponent();
    }
}

然后我有一种方法可以在网格上创建一个红色圆圈,如下所示

    public void fillCircle(Graphics g) {
    {
        g.setColor(Color.red);
        g.fillOval(xPos,yPos,40,40);
    }
}

但是,单击时只会出现一个圆圈,当您再次单击时,该圆圈会被删除并放置在新位置。

我相信我需要在 fill circle 方法中包含某种循环,这样它就不会只是摆脱圆圈并将 onew 放在新位置,而是将它留在那里并在新位置放置一个新圆圈?

我该怎么做?

4

1 回答 1

4

您需要将位置添加到某个ArrayList或某物,因为您只是覆盖了变量xPos以及yPos单击时。我们可以创建一个Position类来保存 x 和 y 值,所以我们只需要一个ArrayList

ArrayList<Position> positions = new ArrayList<Position>();

public void mouseClicked(MouseEvent e) {
    positions.add(new Position(e.getX(), e.getY()));

    // ...
}

Position班级

class Position {
    public int x;
    public int y;

    public Position(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

然后在你的函数中画出所有的圆圈

public void fillCircle(Graphics g) {
{
    g.setColor(Color.red);
    for (int i = 0; i < positions.size(); i++)
        g.fillOval(positions.get(i).x, positions.get(i).y, 40, 40);
}

更新

将其包含在文件的最顶部。

import java.util.ArrayList;

这将导入您要使用的 ArrayList 库。

于 2013-03-25T11:52:50.617 回答