正在用c語言寫貪食蛇,怎麼用多線程呢?
現在是鍵盤控制一條直線的話,紅色的圓就無法隨機出現。如果按下esc之後圓可以出現,但是直線就動不了了。上網查了查說是需要多線程。這個怎麼用呢。謝謝.
#include &#include & #include &
#include &#include & int main(){ initgraph(1400, 700);//畫背景 int x1 = 690, y1 = 340; setlinecolor(GREEN); line(x1, y1, x1 + 20, y1);//初始蛇身
char c = "0"; while (c != 27) { c = _getch(); setlinecolor(BLACK); line(x1, y1, x1 + 20, y1); switch (c) {case"w":y1 = y1 - 5; break;
case"s":y1 = y1 + 5; break; case"a":x1 = x1 - 5; break; case"d":x1 = x1 + 5; break; case27:break; } setlinecolor(GREEN); line(x1, y1, x1 + 20, y1); Sleep(10);}
srand((unsigned)time(NULL)); int m; for (m = 0; m &< 100; m++) { int x = rand() % 1390; int y = rand() % 690; int z = 10; setlinecolor(RED);setfillcolor(RED);
fillcircle(x, y, z); Sleep(1000); setlinecolor(BLACK); setfillcolor(BLACK); fillcircle(x, y, z); Sleep(1000); }closegraph();
}程序在這裡。我知道很渣。
貪吃蛇還要多線程?一個大的循環每次處理這幾件事:掃描鍵盤輸入,移動蛇,隨機生成蛋,sleep。
掃描鍵盤輸入不要做成blocking的就行了。一看頭文件就知道是EasyX庫,占坑,明天可以把我以前做的EasyX小遊戲當中循環部分框架貼出來供你參考
==============更新
#define KEY_DOWN(vk_c) ( GetAsyncKeyState(vk_c) 0x8000 ? 1 : 0)//GetAsyncKeyState是一個非阻塞的獲取按鍵輸入的函數
//遊戲主循環
while(true)
{
//檢測按鍵
if(KEY_DOWN(VK_UP)) //如果上箭頭按下……
do_something();
......
//更新遊戲邏輯,如果判定遊戲結束則退出,比如果子的生成,蛇的移動,判定是否吃到果子,就應該寫在這裡
}
其實遊戲循環基本就是這麼寫的……
EasyX我個人覺得還是一個不錯的入門圖形庫,使用起來比較方便,能讓使用者更加註重程序的編寫而不用糾結圖形庫本身的使用方法,很適合初學者,雖然並不能做出什麼大東西吧,做點自娛自樂的小玩意肯定是夠用了。書有點老,這貨明顯是turbo c年代的東西啊。。現在別學這個了,去折騰浙大的acllib,網易雲課堂去學。翁愷老師的C語言進階。
學學那個還能學學怎麼折騰win API。。比你現在這個靠譜多了。
c11 自帶多線程,百度即可,建議看看 csapp 後面講多線程的部分,
突然以為自己穿越到20年前了,再想想不對,20年前還沒有知乎,我也還沒有開始上網呢。不過,這樣的代碼真的是20年前的風格。建議你馬上扔掉手上的書。
推薦閱讀:
※怎麼才能知道自己的編程水平?
※軟體測試人需要如何做好需求分析?
※為什麼google不在wp8上出應用軟體呢,而大量在IOS系統上出軟體應用?
※有哪些著名的破解軟體網站?
※為什麼很多厲害的軟體卻很容易就被破解,像ps,autocad之類的?