贪食蛇游戏,c语言怎么实现多线程, 高悬赏

发布网友 发布时间:2022-04-23 07:05

我来回答

1个回答

热心网友 时间:2022-06-17 05:45

首先你要有控制蛇移动方向的全局变量(定义在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 就可以了
还有什么不懂的你可以多找找 pthread 类的例子追问我的编译器是vs2013,为什么连pthread.h库都无法打开?

追答拿那么高端的平台开发那么底层的语言 O_O
ftp://sourceware.org/pub/pthreads-win32/pthreads-snap-2005-03-08.tar.gz
把这个下了以后把里面的所有文件放在你的工程文档里然后在vs里面引用.同时你要把
pthread.h 这个文件里面的 #include 改成 #include "sched.h"

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com