C语言迷宫游戏设计如何解决屏幕严重刷屏问题同时实现运行时间的显示?
/* 迷宫游戏.exe 3.0 */
#include<stdio.h> //标准输入输出头文件
#include<stdlib.h> //函数system():发出一个DOS命令
#include<conio.h> //函数kbhit():检测键盘是否按下; 函数getch():获取用户输入(无需回车)
#include<windows.h> //函数Sleep():将程序挂起一段时间
#include<time.h> //计算游戏时间
#define N 50
#define M 50
void Show(int maze[][M],int n,int m);
void MazeUpdate(int maze[][M],int n,int m,double start);
int maze[N][M] =
{{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1},
{1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1},
{1,0,1,0,1,0,1,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,1,0,1},
{1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,1,1,1},
{1,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1},
{1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1},
{1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1},
{1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1},
{1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
};
double times;
int main(void)
{
clock_t start; //首先用clock_t定义两个变量储存开始与结束值
printf("游戏加载中...\n");
Sleep(500);
system("PAUSE");
start = clock(); //记录开始时间
int n = 12,m = 25; // n行m列
Show(maze,n,m);
MazeUpdate(maze,n,m,start);
return 0;
}
//函数功能:显示迷宫地图
void Show(int maze[][M],int n,int m)
{
int i,j;
for (i=0;i<n;i++) //显示n行m列迷宫地图数据
{
for (j=0;j<m;j++)
{
if (maze[i][j]==0)
{
printf(" "); //显示路径
}
else if (maze[i][j]==1)
{
printf("▓ "); //显示障碍物
}
else if (maze[i][j]==2)
{
printf("☆"); //显示电子鼠
}
else if (maze[i][j]==3)
{
printf("★");
}
}
printf("\n");
}
}
//函数功能:完成与用户输入有关的迷宫更新
void MazeUpdate(int maze[][M],int n,int m,double start)
{
int x = 1,y = 23; //初始位置
int exitX = 10, exitY = 24; //迷宫出口
char input;
clock_t end;
while (x!=exitX || y!=exitY) //判断是否达到迷宫出口
{
if (kbhit()) //检查是否有键盘输入,没有就继续循环
{
input = getch(); //从键盘获取输入(不会在屏幕显示)
if (input=='a' && maze[x][y-1]!=1) //左移
{
maze[x][y] = 0;
y--;
maze[x][y] = 2;
}
if (input=='d' && maze[x][y+1]!=1) //右移
{
maze[x][y] = 0;
y++;
maze[x][y] = 2;
}
if (input=='w' && maze[x-1][y]!=1) //上移
{
maze[x][y] = 0;
x--;
maze[x][y] = 2;
}
if (input=='s' && maze[x+1][y]!=1) //下移
{
maze[x][y] = 0;
x++;
maze[x][y] = 2;
}
}
system("cls"); //清屏
printf(" \t\t迷宫游戏3.0.exe\n");
if (x!=exitX || y!=exitY) //副标题提示进行和结束
{
printf(" \t\t 进行中\n");
}
else
{
printf(" \t\t 已结束\n");
}
Show(maze,n,m); //显示更新后的迷宫
Sleep(100); //延时100ms
end = clock(); //记录结束时间
times = ((double)(end-start))/CLK_TCK;
printf("总用时间%.1fs",times);
}
printf("You win!\n");
system("PAUSE"); //Windows系统下暂停程序运行
}