第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問下面的內(nèi)容該怎樣可以實現(xiàn)?

請問下面的內(nèi)容該怎樣可以實現(xiàn)?

C
藍山帝景 2023-03-03 14:10:22
我先編寫了一個倒計時的函數(shù)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");}如果想要它能在運行主函數(shù)的游戲內(nèi)容時起到計時的作用,就必須讓這個函數(shù)和主函數(shù)同時運行。
查看完整描述

1 回答

?
胡子哥哥

TA貢獻1825條經(jīng)驗 獲得超6個贊

首先你要有控制蛇移動方向的全局變量(定義在main以外因為線程函數(shù)也要調(diào)用它,每次鍵盤輸入都會修改它的值), 比如 char direction 'a' ==左 'w' == 右 'd'==上 's' == 下,然后你在移動時應(yīng)該是在while里面操作的吧,你每移動一步前都讀一下direction這個變量的數(shù)值然后再控制移動方向(注意s這個鍵可以忽略因為不會倒著走) 然后你可以用pthread.h這個庫 例子是 pthread t;// 定義一個線程 pthread_create(&t, null, listen_keyboard_input, null);//建立線程執(zhí)行l(wèi)isten_keyboard_input這個函數(shù) 這個線程執(zhí)行的函數(shù) void listen_keyboard_input(){ while(應(yīng)該通過某個信號來退出這個循環(huán),從而表示游戲結(jié)束){ direction =getchar(); } } 但是這里存在同步問題, 比如當(dāng)這個線程的getchar()在給direction輔助的同時,你控制貪吃蛇移動的線程正在調(diào)用 direction的值來判斷下一個移動方向,這就會出問題,所以要加一個鎖,叫 mutex lock;這個也定義成全局變量可以使各線程共享。 pthread_mutex_t mutex; //定義一個鎖 pthread_mutex_init(&mutex, null, null);//初始化 然后把函數(shù)修改成 void listen_keyboard_input(){ while(應(yīng)該通過某個信號來退出這個循環(huán),從而表示游戲結(jié)束){ 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 里面執(zhí)行,如果放在主線程, 主線程會一直等listen_keyboard_input而什么事都不會做 你把這兩個線程用 pthread_create 創(chuàng)建完成后 用 t1.join(); t2.join(); 就可以使這兩個線程并發(fā)執(zhí)行了 如果你用的是linux 來編譯的,你再輸入gcc 指令后加上 -lpthread 就可以了 

查看完整回答
反對 回復(fù) 2023-03-06
  • 1 回答
  • 0 關(guān)注
  • 96 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號