如题,每次移动时重新调用一遍print函数导致屏幕闪烁,请问有什么好的解决方案吗?
代码如下
void CreateMaze(int **maze, int x, int y) {//构建迷宫
maze[x][y] = ROUTE;
//确保四个方向随机,而不再是固定的上下左右这种排列
int direction[4][2] = { { 1,0 },{ -1,0 },{ 0,-1 },{ 0,1 } };
for (int i = 0; i < 4; i++) {
int r = rand() % 4;
int temp = direction[0][0];
direction[0][0] = direction[r][0];
direction[r][0] = temp;
temp = direction[0][1];
direction[0][1] = direction[r][1];
direction[r][1] = temp;
}
//向四个方向开挖
for (int i = 0; i < 4; i++) {
int dx = x;
int dy = y;
//控制挖的距离,由Rank来调整大小
int range = 1 + (Rank == 0 ? 0 : rand() % Rank);
while (range > 0) {
//计算出将要访问到的坐标
dx += direction[i][0];
dy += direction[i][1];
//排除掉回头路
if (maze[dx][dy] == ROUTE) {
break;
}
//判断是否挖穿路径
int count = 0;
for (int j = dx - 1; j < dx + 2; j++) {
for (int k = dy - 1; k < dy + 2; k++) {
//abs(j - dx) + abs(k - dy) == 1 确保只判断九宫格的四个特定位置
if (abs(j - dx) + abs(k - dy) == 1 && maze[j][k] == ROUTE) {
count++;
}
}
}
//count大于1表明墙体会被挖穿,停止
if (count > 1)
break;
//确保不会挖穿时,前进
range -= 1;
maze[dx][dy] = ROUTE;
}
//没有挖穿危险,以此为节点递归
if (range <= 0) {
CreateMaze(maze, dx, dy);
}
}
}