貪吃蛇整個遊戲過程就是玩家控制蛇在限定區域內重複移動、吃食的過程,因此實現這個小遊戲需要一條蛇、乙個限定區域以及食物。我們可以用乙個陣列來表示限定區域,對這個區域而言,我們希望有初始化的方法以及在終端列印的方法;對於蛇來講,我們希望可以對其初始化、移動以及吃食的方法;食物的話,要求比較簡單,只需要在沒有食物的時候產生新的食物就可以。
我選擇一維的字元陣列來作為活動區域的載體,當儲存元素為字元's'
時表示為蛇;元素為字元'f'
時表示為食物;元素為字元'+'
時表示為邊界,其餘的空閒空間則儲存字元'0'
。遊戲的過程,本質上就是對這些字元的處理。實現區域的初始化和列印方法非常簡單,是實現貪吃蛇過程中最簡單的部分了。
我使用了乙個類似雙端佇列的資料結構來表示蛇,不過它比雙端佇列簡單多了,只需要實現雙端佇列的幾個操作就可以了。unshift()
用來在佇列前端新增元素,pop()
用來刪除佇列末端的元素,get_head()
用來獲取隊首。值得注意的是,前面我用字元陣列來實現活動區域,結果也用字元陣列來實現這個儲存位置的佇列,結果給自己挖了乙個大坑。蛇在限定區域內不斷移動,就是通過操作儲存位置的佇列來實現的。
蛇移動的話,就是在隊首新增元素,在隊末刪除元素。
void move_snake(int x)
類似移動,吃食不過是不刪除隊末的元素。
void eat_snake(int x)
使用庫函式rand()
隨機產生食物,注意,要在沒有食物的時候產生!
實現上面的各個函式後,整個貪吃蛇就呼之欲出了。首先初始化活動區域,初始化蛇,然後迴圈不斷獲取使用者輸入,產生下乙個移動位置,蛇對其作出反應,列印活動區域。這其中有乙個需要注意的點就是,蛇不能對與運動方向相反的指令作出響應,就是不能調頭返回。
我實現的貪吃蛇是控制台程式,為了美觀,需要清屏、關閉回顯、隱藏游標等美化操作。清屏與關閉回顯,我使用了庫函式中的system()
函式;隱藏游標,我使用了這提供的方法。要注意的是,對終端設定後記得在退出時將設定修改回來。還有乙個,貪吃蛇需要判斷鍵盤是否有輸入,有的話需要及時讀入,了解到有這麼乙個庫函式kbhit()
實現了這個功能,不過linux下的c並沒有這個標頭檔案,我谷歌了乙個kbhit()
在linux下的實現,在這,感覺這才是這個程式的重點哈,不過,水平太菜,只好直接複製了。
完整源程式: 這裡
C語言實現貪吃蛇
貪吃蛇是我們耳熟能詳的遊戲,遊戲思路很簡單,我們操縱一條蛇在螢幕上游走尋找食物,當吃到食物時蛇就會變長,當蛇頭碰到牆壁或者自己的身體時,此時蛇就會死亡,而遊戲也就結束了。那麼我們設計遊戲的時候,需要注意三點 1 及時重新整理蛇的位置 2 蛇吃到食物時,蛇的身體會變長,同時及時重新整理新的食物 3 蛇...
貪吃蛇 C語言實現
首先 必備知識棧 由於是用c實現,c的基礎就不廢話了 1.鍊錶相關知識的熟練使用 2.動態記憶體的簡單使用與釋放方法 3.隨機數的生成與儲存 4.監聽鍵盤函式的使用 5.window.h中基本的控制台函式 6.時間函式的簡單應用 其次 下面是實現的具體 有詳細的注釋解釋 pragma comment...
C語言實現貪吃蛇
include include include include include define up w define down s define left a define right d define quit q 函式宣告 void welcome 開始介面 void chose 選擇難度 vo...