為什麼叫能走蛇
當我剛知道自己要寫一條這樣的蛇時,我的心情是十分複雜的,之所以叫這個名字,是因為這條蛇只有乙個功能,即聽從玩家的命令,在迷宮內四處走動。
怎麼寫出能走蛇
那這條靈活(其實很笨拙)的蛇是如何誕生出世的呢?先寫乙個總控偽**出來,採用自頂向下的思想,一步一步解決具體檔案。**頭部如下:
一點小總結
由於作業題目給出的原**有些小毛病,於是修改了些小地方,此外,幾個函式主要負責:玩家輸入的讀取和蛇的移動、介面的輸出、遊戲狀態的判斷、gameover的輸出等。裡邊值得一提的是,為避免介面過於傻瓜,還是採用了清屏操作,windows下system(「cls」),os x下system(「clear && printf 『\e[3j』 「),介面總算勉強如意啦!
為什麼叫大胃蛇
因為它能吃了呀,在對靈活能走蛇進行進一步的改造之後,我們讓它具有了覓食和成長的能力。
怎麼教蛇吃東西
我們只需要寫一些東西,比如:
具體是,利用srand()和rand()在迷宮裡的空白處隨機生成鳥蛋($),以及構想好當蛇頭碰撞到鳥蛋的時候,將會發生什麼,想好了寫下來就行啦。
憑什麼叫無敵蛇
為了讓這條蛇看起來更酷,我對這條蛇進行了全方位的改造,讓這個字元遊戲更像乙個遊戲:1優化介面,並增設了一定長度的障礙物;2增設得分、座標等變數的顯示;3增強趣味性,玩家可自由設定前進速度、聲音、介面顏色;4對比之前輸入後還要按一次回車的情況,這裡採用了linux下非阻塞地檢測鍵盤輸入的方法,實現 kbhit();5增設智慧型模式,該模式下玩家可以成為乙個旁觀者,無敵蛇將會自動前進,不斷成長
遊戲介面如下:
如何無敵
自頂向下,逐步求精,無敵蛇的程式開頭見下圖:
其中gamestart()和gameover()各負責遊戲的開頭和結尾;initialization()負責初始化遊戲;move()負責移動;judge_head()負責判斷;static_info()和dynamic_info()負責變數的顯示;其他部分**如下:
gotoxy()即根據座標防止游標,在各部函式均有應用:
draw_cube()負責展示迷宮以及障礙物:
food()負責食物部分:
smart()是智慧型模式開啟後將要執行的部分,智慧型模式給出的偽**:
// hx,hy: 頭的位置
// fx,fy:食物的位置
function
wheregonext
(hx,hy,fx,fy) 記錄可走的方向
// 用陣列distance[3]= 記錄離食物的距離
// 分別計算蛇頭周邊四個位置到食物的距離。h頭的位置,f食物位置
// 例如:假設輸入」a」 則distance[0] = |fx – (hx-1)| + |fy – hy|
// 如果 hx-1,hy 位置不是blank,則 distance[0] = 9999
// 選擇distance中存最小距離的下標p,注意最小距離不能是9999
// 返回 movable[p]
}
p_move()負責鍊錶指標的變動(蛇每部位都存在結構體變數中):
一點小總結
十分認同寫程式時,乙個完整框架萬分重要。
而在這個程式裡,有許多函式是我們沒有接觸過的,比如游標的放置,比如kbhit(),即作業要求中說的「在字元終端上完成「清屏」「修改游標位置」「設定字元前景和背景色」等操作」,於是這就更考驗程式設計師檢索資訊和學習應用的能力了。
雙人蛇什麼意思
介面裡有兩條蛇,需要兩個玩家,各自操縱一條蛇並進行鬥爭。
還是蠻有趣的,遊戲介面下面有。遊戲規則是:兩條蛇中先碰到牆壁或碰到任何蛇身體的就成為敗北一方,需要說明的是,如果蛇頭碰到蛇頭,則判為平局。
遊戲介面截圖
一點小總結
貪食蛇真有趣,遊戲的設計可以有千萬種,我們也可以從由設計到實現的過程中學到很多東西,真是太棒了!!
貪食蛇程式
define n 200 include include include define left 0x4b00 define right 0x4d00 define down 0x5000 define up 0x4800 define esc 0x011b int i,key int score ...
貪食蛇的程式
無聊,分析了乙個用c語言寫的貪食蛇的程式。寫的非常簡練,就是函式的名字起得不是很好。include include define kuan 20 地圖的大小 int iz kuan kuan 地圖 struct jiedian 蛇的結點位置,使用鍊錶結構來儲存蛇身上各結點的位置 point ptsh...
小遊戲,貪食蛇
include include include include struct coor struct snake handle hconsole getstdhandle std output handle 獲取標準輸出控制代碼 int food x,food y 食物座標 int score 0 ...