如何将二进制矩阵绘制到显示器上
How to draw a binary matrix to the display
我正在用 C++ 为入门项目重新创建俄罗斯方块。我正在使用 allegro 进行用户输入和绘图到显示器。每个动作、移动、旋转都被插入到一个
2x2 矩阵。现在我被困在将实际矩阵绘制到屏幕上。
这是我当前的代码:
void drawGrid(int grid[10][20]) { // Draws the grid to the screen
for (int y = 0; y < 20; y++) {
for (int x = 0; x < 10; x++) {
if (grid[x][y] == 1) {
al_draw_filled_rectangle(x * 32 + 10, y * 32, x * 32 + 10 + 32, y * 32 + 32,
al_map_rgb(255, 255, 255)); // Draws a white square, 32x32
}
}
}
}
它显示旋转 90 度的白色方块,并且在方块之间有一些随机的空格。例如
我要打印的网格:
0011000000
0001100000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
我得到的结果:
我可以告诉你,你的矩阵图片与你传递给函数的二维数组不匹配。该函数采用 20 列的 10 红色数组。您的图片是倒置的,因此屏幕的着色方式是倒置的。如果你想绘制你在绘图上的内容,只需切换行和列,所以传入一个 [20][10]
的数组
我正在用 C++ 为入门项目重新创建俄罗斯方块。我正在使用 allegro 进行用户输入和绘图到显示器。每个动作、移动、旋转都被插入到一个 2x2 矩阵。现在我被困在将实际矩阵绘制到屏幕上。 这是我当前的代码:
void drawGrid(int grid[10][20]) { // Draws the grid to the screen
for (int y = 0; y < 20; y++) {
for (int x = 0; x < 10; x++) {
if (grid[x][y] == 1) {
al_draw_filled_rectangle(x * 32 + 10, y * 32, x * 32 + 10 + 32, y * 32 + 32,
al_map_rgb(255, 255, 255)); // Draws a white square, 32x32
}
}
}
}
它显示旋转 90 度的白色方块,并且在方块之间有一些随机的空格。例如
我要打印的网格:
0011000000
0001100000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
我得到的结果:
我可以告诉你,你的矩阵图片与你传递给函数的二维数组不匹配。该函数采用 20 列的 10 红色数组。您的图片是倒置的,因此屏幕的着色方式是倒置的。如果你想绘制你在绘图上的内容,只需切换行和列,所以传入一个 [20][10]
的数组