想知道在c++语言写的简单的贪吃蛇游戏中,怎么设置空格键暂停开始。利用# include

请叫我勒布朗先生 2017-09-30 11:18:45
主函数
int main()
{
char map[ROW_MAX][LINE_MAX];
int snake[ROW_MAX][LINE_MAX];
srand(time(NULL));

/**************初始画面**************/
memset(map, 0, sizeof(map));
memset(snake, 0, sizeof(snake));
system("cls");
CreateMap(map);
// gotoxy(1, 1);
CreateSnake(snake);
CreateFood(map, snake);
TraverseMap(map, snake);
/**************初始画面**************/

/*********运动*****************/
run(map, snake);
/******************************/

Result();

return 0;
}
这个是主函数。
整个程序是按照二维数组构成的。其中地图是二维数组构成围墙。蛇的移动是利用上下左右或者wasd空着蛇的走位. 以及当蛇每走一步就利用 system(“cls”)清屏, 重新打印, 模拟蛇的移动.我想利用system("pause")来实现暂停开始的功能。
下面这一段是关于设置的代码,如果我要加入暂停开始 应该加在哪儿。怎么使用。谢谢各位了
设置
由于不同的处理器, 蛇的移动速度也不一样;
以及可以修改地图的大小;
int ROW = ROW_MAX;
int LINE = LINE_MAX;
int times = 1;//均为全局变量
//若增加此函数, 要达到修改的目的, 须将之前所有函数体中的 _MAX 删去(函数名中的_MAX不必删除)
//或者等后面的源代码

void SetUp(void){

char ch;
int row;
int line;
int speed;
system("cls");
printf("\tSET UP\n");
printf("1. speed\n");
printf("2. area\n");
printf("0. return\n");

ch = getch();
while(1){
switch (ch){

case '1':
printf("The less the figure the faster speed level(1~8)\n");
printf("Speed level: ");
scanf("%d", &speed);
times = speed>8? 8: speed<1? 1: speed;
printf("The speed leve: %ld", times);
break;
case '2':
printf("Update length and width(the max size is 80 x 80 and input 0 default)\n");
printf("length: ");
scanf("%d", &row);
printf("width: ");
scanf("%d", &line);

if(line != 0 && row != 0){

ROW = row+2;
LINE = line+2;
Head_x = ROW/2;
Head_y = LINE/2;
}
printf("After updating length: %d\twidth: %d\n", row, line);

break;

default:
return;
}
for(long i = 0; i < 400000000; ++i);//延时显示结果
//fflush(stdin);
system("cls");
printf("\tSET UP\n");
printf("1. speed\n");
printf("2. area\n");
printf("0. return\n");

ch = getch();
}

}
延时函数
void dely (void){

for(long i = 0; i <= pow(16, times); ++i)
;
}
将此代码插入到此位置即可.
//处理按上下左右;
if(direct == 'w'){

if(sh == 'P')
continue;
}
else if (direct == 's'){

if(sh == 'H')
continue;
}
else if (direct == 'a'){

if(sh == 'M')
continue;
}
else{

if(sh == 'K')
continue;
}

//处理按wasd;
while(1){

if(JudgeWall()){
/**********判断键盘是否敲击***********/

/************************************/

/**************蛇的运动******************/

/****************************************/
}
else
return;
dely();
}
...全文
552 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
codedoctor 2017-10-11
  • 打赏
  • 举报
回复
噢,再推荐一下这个函数GetAsyncKeyState(),比用getchar好太多了
codedoctor 2017-10-11
  • 打赏
  • 举报
回复
void pause()  
{  
    while(true)  
    {  
        Sleep(300);  
        if(GetAsyncKeyState(VK_SPACE))  
        {  
            break;  
        }  
    }  
}  
这样是最好的,如果暂停,就把cpu时间交给操作系统。最好不要让操作系统觉得你的这个程序是一个cpu密集使用的进程,不然可能会导致分配给你的程序的cpu时间片减少,当然你这个程序也不需要在意这些。
C艾斯蒂嗯蟹 2017-10-11
  • 打赏
  • 举报
回复
用system("pause")

if (key == ' '){
   system("pause");
}
你用_getchar获取按键后,直接system("pause") 再按任意键继续 另外如果你再一个while里不停的getchar最好外面再写一个判断_kbhit()

while(isRun){
  if (_kbhit()){
     ch = _getchar();
     if (ch == ' '){
        system("pause");
  }
 }
}
ooolinux 2017-10-01
  • 打赏
  • 举报
回复
曾经写的另一个程序的暂停:
					case KEY_ENTER:	//暂停
						{
							int ch;
							do
							{
								ch=_getch();
								if(ch==KEY_ESC)
									return 1;
								else if(ch!=KEY_ENTER)
									Sleep(500);
							}while(ch!=KEY_ENTER);
						}
						break;

64,640

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧