用C語言寫貪喫蛇遊戲的初探

貪喫蛇是一款經典的遊戲,其基本玩法是通過鍵盤輸入控制蛇上下左右四個方向移動,在撞到牆或自身時死亡。由於是初次嘗試,先不考慮食物的產生。喫食物並身體延長這兩個問題。
首先,我們先要有個框架,即實現上上述功能要有哪些函數。首先,先要表示邊框(蛇的移動範圍)及蛇,然後要設定一個死亡的條件,在沒有死亡的條件下,讀入指令控制蛇的移動,並輸出相應圖像。每次輸出完要清空屏幕再輸出下一次的圖像。
根據以上這些功能,我們使用這幾個函數:gameover、printmap、move。其功能從函數名就可以看出來,主函數如下圖:
這裏寫圖片描述

首先是gameover函數,用於設定蛇的死亡,即滿足“蛇觸碰牆壁或自身時死亡”這個條件時蛇死亡,遊戲結束(不再接受指令),並輸出“game over”。
在死亡後,需要輸出game over,然後不再讀入指令。這裏我們需要一個flag,將其命名爲running,開始時爲1,當且僅當其爲1時讀入指令,而當gameover函數被調用(即死亡)時,其值變爲0。因此這個函數很簡單,只有兩行,關鍵是什麼時候調用它,這以蛇的表示爲基礎,後面會寫到。

接下來是printmap函數。首先,我們先要設定一個蛇移動的範圍,我們不妨用一個二維數組表示,其邊框用“*”圍成,中間的空白部分(空格)可供蛇移動。然後,我們用H表示蛇頭,X表示蛇身,這樣比較清晰直觀,初步設定蛇的長度爲5,初始位置位於左上角。這樣我們只需打印這個二維數組就可表示圖像了,因此這個函數也非常簡單,只是需要注意每次打印前要清空前面的。
這裏寫圖片描述

輸入、輸出都確定好了,接下來便是最重要的中間處理——move函數(控制蛇的移動的)了。我們需要表示蛇的位置。其身上的每個點對應二維數組上的一個座標。可以想見,蛇每次移動,相當於蛇頭沿所指定的方向走一步,留出的空位(原來的蛇頭位置)由最後一個點補上。因此我們可以將蛇頭位置及上次蛇頭位置分別記錄,然後剩餘的身體部分有一個數組表示,數組的順序是蛇身從前到後的順序,每移動一次,先記錄下原蛇頭的位置,再移動蛇頭,最後蛇身數組第n個元素爲原來數組的(n+1)個元素,原蛇頭位置爲新數組的第一個元素,這樣相當於拋棄了蛇尾,剩下的蛇身順次往前移,之前的蛇頭退化爲新的蛇尾,實現了前面說到的移動特徵,並能夠一直按規律移動(每次移動不改變蛇頭、蛇身表示的結構、次序)。輸入指令移動實際上就是移動蛇頭,因此用一個switch循環即可。需要注意的是,每次移動完,要判斷蛇頭的新位置是否爲空白,若不是,則說明不是撞到牆就是撞到自己身上了,此時應該調用gameover函數,若沒有死亡才照常繼續。代碼如下圖:
這裏寫圖片描述
這裏寫圖片描述

至此一個簡化版的貪喫蛇就初見雛形了,至於喫金幣及蛇身變長則留到後面討論。(一下爲運行結果):

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章