C 中的 Brick-Breaker - 递增砖行问题
Brick-Breaker in C - incrementing rows of bricks issue
我正在尝试使用 C 和 Stanford Portable Library (SPL) 重新创建 brickbreaker。我的 initBricks 函数的目标是添加 5 行砖块,每行 10 列(总共 50 块砖块)。当我 运行 这段代码时,我的 window 只有 1 排 10 块积木。由于某种原因,它不会输出其他 4 行。我看不出我的代码哪里出错了。在创建每一行后,我将 y 坐标(0,0 是 window 的左上角)增加 40。
// number of rows of bricks
#define ROWS 5
// number of columns of bricks
#define COLS 10
// height and width of bricks
#define BRICK_H 7.5
#define BRICK_W 35
// initializes window with grid of bricks
void initBricks(GWindow window)
{
// set initial brick coordinates
int x_coord = 2;
int y_coord = 10;
for (int i = 0; i < ROWS; i++)
{
// Create 10 columns of bricks
for (int j = 0; j < COLS; j++)
{
// create a brick
GRect brick = newGRect(x_coord, y_coord, BRICK_W, BRICK_H);
setFilled(brick, true);
setColor(brick, "RED");
add(window, brick);
// increment x coordinate for column spacing
x_coord += 40;
}
// increment y coordinate for row spacing
y_coord += 40;
}
}
如有任何帮助,我们将不胜感激!
您需要为每一行重新设置 X 坐标。
for (int i = 0; i < ROWS; i++)
{
// Create 10 columns of bricks
int x_coord = 2; // <---- move line down to here
for (int j = 0; j < COLS; j++)
{
...
您没有在外部 for 循环中重置 x_coord
变量,因此在第一行的末尾,您的 x_coord
是 202,这就是它开始写入下一行的地方离开你的 window。只需在 y_coord += 40;
之后添加 x_coord = 2;
即可解决问题。
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
// create a brick
GRect brick = newGRect(x_coord, y_coord, BRICK_W, BRICK_H);
setFilled(brick, true);
setColor(brick, "RED");
add(window, brick);
// increment x coordinate for column spacing
x_coord += 40;
}
// increment y coordinate for row spacing
y_coord += 40;
//reset c coordinate
x_coord = 2;
}
如前所述,问题是 X 坐标。您可以通过将 X、Y 计算移动到 for
循环
来修复它
void initBricks(GWindow window)
{
int row, col, x, y;
for ( y = 10, row = 0; row < ROWS; row++, y += 40 )
for ( x = 2, col = 0; col < COLS; col++, x += 40 )
{
GRect brick = newGRect(x, y, BRICK_W, BRICK_H);
setFilled(brick, true);
setColor(brick, "RED");
add(window, brick);
}
}
您应该必须在外循环体中初始化 y 坐标。
因为每次到达下一行时,y 坐标都想返回其初始位置。
// number of rows of bricks
#define ROWS 5
// number of columns of bricks
#define COLS 10
// height and width of bricks
#define BRICK_H 7.5
#define BRICK_W 35
// initializes window with grid of bricks
void initBricks(GWindow window)
{
// set initial brick coordinates
int x_coord = 2;
for (int i = 0; i < ROWS; i++)
{
int y_coord = 10;
// Create 10 columns of bricks
for (int j = 0; j < COLS; j++)
{
// create a brick
GRect brick = newGRect(x_coord, y_coord, BRICK_W, BRICK_H);
setFilled(brick, true);
setColor(brick, "RED");
add(window, brick);
// increment x coordinate for column spacing
x_coord += 40;
}
// increment y coordinate for row spacing
y_coord += 40;
}
}
我正在尝试使用 C 和 Stanford Portable Library (SPL) 重新创建 brickbreaker。我的 initBricks 函数的目标是添加 5 行砖块,每行 10 列(总共 50 块砖块)。当我 运行 这段代码时,我的 window 只有 1 排 10 块积木。由于某种原因,它不会输出其他 4 行。我看不出我的代码哪里出错了。在创建每一行后,我将 y 坐标(0,0 是 window 的左上角)增加 40。
// number of rows of bricks
#define ROWS 5
// number of columns of bricks
#define COLS 10
// height and width of bricks
#define BRICK_H 7.5
#define BRICK_W 35
// initializes window with grid of bricks
void initBricks(GWindow window)
{
// set initial brick coordinates
int x_coord = 2;
int y_coord = 10;
for (int i = 0; i < ROWS; i++)
{
// Create 10 columns of bricks
for (int j = 0; j < COLS; j++)
{
// create a brick
GRect brick = newGRect(x_coord, y_coord, BRICK_W, BRICK_H);
setFilled(brick, true);
setColor(brick, "RED");
add(window, brick);
// increment x coordinate for column spacing
x_coord += 40;
}
// increment y coordinate for row spacing
y_coord += 40;
}
}
如有任何帮助,我们将不胜感激!
您需要为每一行重新设置 X 坐标。
for (int i = 0; i < ROWS; i++)
{
// Create 10 columns of bricks
int x_coord = 2; // <---- move line down to here
for (int j = 0; j < COLS; j++)
{
...
您没有在外部 for 循环中重置 x_coord
变量,因此在第一行的末尾,您的 x_coord
是 202,这就是它开始写入下一行的地方离开你的 window。只需在 y_coord += 40;
之后添加 x_coord = 2;
即可解决问题。
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
// create a brick
GRect brick = newGRect(x_coord, y_coord, BRICK_W, BRICK_H);
setFilled(brick, true);
setColor(brick, "RED");
add(window, brick);
// increment x coordinate for column spacing
x_coord += 40;
}
// increment y coordinate for row spacing
y_coord += 40;
//reset c coordinate
x_coord = 2;
}
如前所述,问题是 X 坐标。您可以通过将 X、Y 计算移动到 for
循环
void initBricks(GWindow window)
{
int row, col, x, y;
for ( y = 10, row = 0; row < ROWS; row++, y += 40 )
for ( x = 2, col = 0; col < COLS; col++, x += 40 )
{
GRect brick = newGRect(x, y, BRICK_W, BRICK_H);
setFilled(brick, true);
setColor(brick, "RED");
add(window, brick);
}
}
您应该必须在外循环体中初始化 y 坐标。 因为每次到达下一行时,y 坐标都想返回其初始位置。
// number of rows of bricks
#define ROWS 5
// number of columns of bricks
#define COLS 10
// height and width of bricks
#define BRICK_H 7.5
#define BRICK_W 35
// initializes window with grid of bricks
void initBricks(GWindow window)
{
// set initial brick coordinates
int x_coord = 2;
for (int i = 0; i < ROWS; i++)
{
int y_coord = 10;
// Create 10 columns of bricks
for (int j = 0; j < COLS; j++)
{
// create a brick
GRect brick = newGRect(x_coord, y_coord, BRICK_W, BRICK_H);
setFilled(brick, true);
setColor(brick, "RED");
add(window, brick);
// increment x coordinate for column spacing
x_coord += 40;
}
// increment y coordinate for row spacing
y_coord += 40;
}
}