gpt4 book ai didi

c - 更新打印到屏幕的 ascii 网格而不重新打印网格

转载 作者:行者123 更新时间:2023-11-30 16:40:29 25 4
gpt4 key购买 nike

int main() {

struct matrix m;

m.rows = 20;
m.columns = 20;

m.grid = create_grid(m.rows,m.columns,'&');

/* Example animation */
printf("\033[H\033[2J");
for (int i = 0; i < m.columns; i++) {
update_matrix(m.grid,10,i,'x');

if ( i > 0) {
update_matrix(m.grid,10,i-1,'&');
}
printf("\033[H\033[2J");
sleep(1);
printMatrix(m.grid,m.rows,m.columns);
}



for (int i = 0; i < m.rows; i++) {
free(m.grid[i]);
}
free(m.grid);

return 0;
}


void update_matrix(char** grid, int row,int column,char symbol) {
grid[row][column] = symbol;
}

char** create_grid(int rows, int columns, char symbol) {

int i,j;

char **grid = malloc(rows * sizeof(char *));

for (i = 0; i < rows; i++) {
grid[i] = malloc(columns * sizeof(char));
}

for (i = 0; i < rows; i++) {
for(j = 0; j < columns; j++) {
grid[i][j] = symbol;
}
}

return grid;
}

void printMatrix(char** array, int rows, int columns) {

for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
printf("%c",array[i][j]);
}
printf("\n");
}
}

我的动画方法本质上是......

  • 打印矩阵
  • 更新矩阵
  • 暂停
  • 清屏
  • 重新打印矩阵

这种动画方法的问题是它会产生闪烁效果,而且我确信效率非常低。我可以做什么,这样我就不必每次都清除屏幕并重新打印整个矩阵。

我运行Linux。

最佳答案

除了使用 ncurses 之外,你还可以这样做

printf("\033%d;%df", row, column);

将光标设置到所需的行和列(请注意,此处第一行是 1不是 0)而不是

printf("\033[H\033[2J");

设置后打印一次矩阵,然后在修改时更改显示的矩阵。

在打印初始矩阵之前,您可能需要将光标定位到第一行和第一列,例如

printf("\033[%d;%df", 1, 1);

m.grid = create_grid(m.rows,m.columns,'&');
printMatrix(m.grid, m.rows, m.columns);
/* Example animation */
for (int i = 0; i < m.columns; i++) {
update_matrix(m.grid,10,i,'x');

printf("%c[%d;%df", 0x1B, 10+1, i+1);
printf("%c", 'x');

if ( i > 0) {
update_matrix(m.grid,10,i-1,'&');
printf("%c[%d;%df", 0x1B, 10+1, i-1+1);
printf("%c", '&');
}
sleep(1);
fflush(stdout);
}
可能需要

fflush(stdout); 来刷新输出流。否则,写入 stdout 的更改可能不会在更改时显示在屏幕上。

但对于此类用途,ncurses 更好。

看看here并在 this维基百科页面也是如此。

关于c - 更新打印到屏幕的 ascii 网格而不重新打印网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46623004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com