Canvas 上没有出现圆圈

Circles not appearing on Canvas

我正在尝试按照教程构建一个带有处理的 connect4 游戏。

What I have so far is here.

The tutorial is here.

我在 4:05 标记处停下来检查我的代码,但我注意到了一些东西...我不知道为什么,但是当我单击时 应该 会弹出圆圈但他们不是......有人可以帮忙吗?谢谢

以防万一,这是代码:

int h = 6; 
int w = 7;
int bs = 100;
int[][] board = new int[h][w];
int player = 1;

void setup() {
    size(700, 600);
    ellipseMode(CORNER);

}

int nextSpace(int x){
    for (int y = h - 1; y >= 0; y--) if (board[y][x] == 0) return y;
    return -1;
}

void mousePressed(){
    int x = mouseX / bs; 
    int y = nextSpace(x);
    if (y >= 0){
        board[y][x] = player;
        player = player == 1 ? 2 : 1;
    }

}

void draw() {
    for (int j = 0; j < h; j++){
        for (int i = 0; i < w; i++){
            fill(255);
            rect(i * bs, j * bs, bs, bs);
            if (board[j][i] > 0){
                fill(board[j][i] == 1 ? 255 : 0, board[j][i] == 2 ? 255 : 0, 0);
                ellipse(i * bs, j * bs, bs, bs);
            
            }
        }       
    }
}

下次您遇到此类问题时,请尝试使用系统的方法来定义您的错误所在:

  • 你的 draw() 功能坏了吗?检查是否在您的板上放了一些东西,看看它是否显示。例如,在 setup() 中添加 board[1][1]=1,您会看到一个圆圈,因此问题不在 draw()

  • 那么,如果您点击屏幕,它会按预期更新您的 board 吗?第一件事是在mousePressed()中添加一个简单的println("Clicked");。现在你看到你的点击事件运行良好,因为每次点击时都会显示字符串,所以这一定是你如何获得 xy.

    的问题
  • 使用println(x);println(y);在 mousePressed() 中了解您的价值观。你会注意到你没有得到整数 x 你得到的是十进制数。

这是你的问题:你无法访问 board[1.543] 它没有意义,所以你只需要保留 mouseX / bs 的整数部分。为此,您可以像这样使用 int()

int x = int(mouseX / bs); 

你的草图现在工作正常。