贪吃蛇游戏,C语言如何实现多线程,奖励高。

首先你要有一个控制蛇移动方向的全局变量(因为thread函数也调用它,所以定义在main之外,每次键盘输入都会修改它的值),比如char direction ' a ' = = left ' w ' = = right ' d ' = = up ' s ' = = down,然后移动的时候要在while中操作,所以每一步之前都要读取这个变量。

然后就可以使用pthread.h库了

例子有

pthread t;//定义一个线程

pthread _ create(amp;t,null,listen_keyboard_input,null);//创建一个线程来执行函数listen_keyboard_input。

该线程执行的函数

void listen_keyboard_input(){

While(你应该通过一个信号退出这个循环,从而表示游戏结束){

direction = getchar();

}

}

但是,这里有一个同步问题。比如这个线程的getchar()在辅助方向的时候,你控制蛇移动的线程在调用方向的值来判断下一个移动的方向,这会产生问题,所以加一个锁叫互斥锁;这也被定义为可以被线程共享的全局变量。

pthread_mutex_t互斥体;//定义一个锁

pthread_mutex_init互斥,null,null);//初始化

然后将函数修改为

void listen_keyboard_input(){

While(你应该通过一个信号退出这个循环,从而表示游戏结束){

pthread_mutex_lock互斥);

direction = getchar();

pthread _ mutex _ unlock(& amp;互斥);

}

}

另一个在控制蛇的移动时也要锁定。

而(.....){

char c;

pthread_mutex_lock互斥);

c =方向;

pthread _ mutex _ unlock(& amp;互斥);

开关(c){

................

}

...................................

}

那很好。

请注意,您控制蛇移动的部分也必须在另一个pthread中执行。如果放在主线程中,主线程会等待listen_keyboard_input,什么都不做。

用pthread_create创建这两个线程后,

使用t 1 . join();

T2 . join();

您可以让这两个线程并发执行。

如果使用linux编译,只需输入gcc指令,添加-lpthread即可。

如果什么都不懂,可以找更多pthread类的例子。