请问下面的内容该怎样可以实现?

我先编写了一个倒计时的函数
void time()
{
int hour, minute, second,i,j;
hour = 0;
minute = 0;
second = 5;
for (;;)
{
printf("-------------------------\n");
printf("*\t%02d:%02d:%02d\t*\n", hour, minute, second);
printf("-------------------------\n");
Sleep(1000);
system("cls");
second--;
if (second == 0)
{
if (minute == 0)
{
if (hour == 0)break;
hour--;
minute = 60;
}
if (minute == 0 && hour == 0)break;
minute--;
second = 59;
}
if (minute == 0 && hour == 0&&second==0)break;
}
printf("-------------------------\n");
printf("*\t时间到!!!\t*\n");
printf("-------------------------\n");
}
如果想要它能在运行主函数的游戏内容时起到计时的作用,就必须让这个函数和主函数同时运行。

蓝山帝景
浏览 46回答 1
1回答

胡子哥哥

首先你要有控制蛇移动方向的全局变量(定义在main以外因为线程函数也要调用它,每次键盘输入都会修改它的值), 比如 char direction 'a' ==左 'w' == 右 'd'==上 's' == 下,然后你在移动时应该是在while里面操作的吧,你每移动一步前都读一下direction这个变量的数值然后再控制移动方向(注意s这个键可以忽略因为不会倒着走) 然后你可以用pthread.h这个库 例子是 pthread t;// 定义一个线程 pthread_create(&t, null, listen_keyboard_input, null);//建立线程执行listen_keyboard_input这个函数 这个线程执行的函数 void listen_keyboard_input(){ while(应该通过某个信号来退出这个循环,从而表示游戏结束){ direction =getchar(); } } 但是这里存在同步问题, 比如当这个线程的getchar()在给direction辅助的同时,你控制贪吃蛇移动的线程正在调用 direction的值来判断下一个移动方向,这就会出问题,所以要加一个锁,叫 mutex lock;这个也定义成全局变量可以使各线程共享。 pthread_mutex_t mutex; //定义一个锁 pthread_mutex_init(&mutex, null, null);//初始化 然后把函数修改成 void listen_keyboard_input(){ while(应该通过某个信号来退出这个循环,从而表示游戏结束){ pthread_mutex_lock(&mutex); direction =getchar(); pthread_mutex_unlock(&mutex); } } 另外一个控制贪吃蛇移动的时候也要加锁 while(.....){ char c; pthread_mutex_lock(&mutex); c = direction; pthread_mutex_unlock(&mutex); switch(c){ ................ } ................................... } 这样就好了 注意你的控制贪吃蛇移动的部分也必须要放在另外一个pthread 里面执行,如果放在主线程, 主线程会一直等listen_keyboard_input而什么事都不会做 你把这两个线程用 pthread_create 创建完成后 用 t1.join(); t2.join(); 就可以使这两个线程并发执行了 如果你用的是linux 来编译的,你再输入gcc 指令后加上 -lpthread 就可以了 
打开App,查看更多内容
随时随地看视频慕课网APP