在linux下用curses庫編寫貪吃蛇,黑白界面顯示
這個程式的起因是因為我俱樂部的安小弟要編一個指令行下面的貪吃蛇,那時候他們正好在學c語言。我就是順帶着說了一下c語言可以編ui,但是會很蛋 疼。我當時也就那麼一說,沒想到還真有小弟去嘗試。他遇到一個問題就是getch會阻塞的問題。我知道這肯定對于一個剛接觸c語言的人來說是一個很大的難 點,于是就教他怎麼做……

開發環境為linux+gcc+netbeans
本來我喜歡gvim但是實在不會調試c語言。于是轉戰netbeans,能很友善地調試,就是爽。 首先要說一下思路。就是多線程,一個線程負責邏輯和畫圖,一個線程監聽按鍵。看一下線程建立的代碼。為什麼這裡要用多線程呢?因為我要監聽一個按鍵 的時間,在c裡面,最友善的就是getch方法了,但是這個函數會進行io的阻塞,知道按下了一個鍵,在這之前這個線程會被阻塞住,蛇也就不會移動了。所 以需要開兩個線程,一個線程是專門畫圖的,每隔多長的時間刷一下,另外一個線程是專門負責監聽鍵盤事件的,就算會阻塞也隻是影響到的本線程,畫圖線程不會 被阻塞。并且兩個線程是通過一個全部的變量input來進行通信的,這個input存儲的是按鍵的鍵值ascii。
這裡我要提到一個國中的時候文曲星下的程式設計,原來我在用gvbasic的時候,如果要實作又是一邊畫圖又是一邊監聽鍵盤事件的話,就會用到一個 peek函數,貌似文曲星裡還有一個poke函數不知道用來幹嘛的。這個peek函數會接受一個數字,比如說是peek(100),100就表示一個特定 的調用例程。比如這裡的100就是檢測鍵盤的緩沖區有沒有按下一個鍵并且鍵值是多少,這個是不會阻塞的。雖然這個peek調用看上比較醜陋,但是卻可以實 現單線程監聽按鍵不阻塞的功能。
言歸正傳,還是考慮在linux下怎麼用c程式設計吧!
首先看一下如果建立一個額外的線程,也就是監聽鍵盤事件的線程。
void * waitForKey(void *para) {