1 回答

TA貢獻1825條經驗 獲得超6個贊
首先你要有控制蛇移動方向的全局變量(定義在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 就可以了
- 1 回答
- 0 關注
- 83 瀏覽
添加回答
舉報