正在用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之類的?

TAG:軟體 | 程序員 | 編程 | 多線程 |