Canvas 上没有出现圆圈
Circles not appearing on Canvas
我正在尝试按照教程构建一个带有处理的 connect4 游戏。
我在 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");
。现在你看到你的点击事件运行良好,因为每次点击时都会显示字符串,所以这一定是你如何获得 x
和 y
.
的问题
使用println(x);
和println(y)
;在 mousePressed()
中了解您的价值观。你会注意到你没有得到整数 x
你得到的是十进制数。
这是你的问题:你无法访问 board[1.543]
它没有意义,所以你只需要保留 mouseX / bs
的整数部分。为此,您可以像这样使用 int()
:
int x = int(mouseX / bs);
你的草图现在工作正常。
我正在尝试按照教程构建一个带有处理的 connect4 游戏。
我在 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");
。现在你看到你的点击事件运行良好,因为每次点击时都会显示字符串,所以这一定是你如何获得x
和y
.使用
println(x);
和println(y)
;在mousePressed()
中了解您的价值观。你会注意到你没有得到整数x
你得到的是十进制数。
这是你的问题:你无法访问 board[1.543]
它没有意义,所以你只需要保留 mouseX / bs
的整数部分。为此,您可以像这样使用 int()
:
int x = int(mouseX / bs);
你的草图现在工作正常。