?一、Win32API處理控制臺界面
?1.設(shè)置控制臺界面大小以及控制臺標題
我們可以使用mode命令來設(shè)置控制臺的大小,使用title命令來設(shè)置控制臺標題。在C語言中調(diào)用庫函數(shù)system來使用這些作用于控制臺的命令。使用代碼如下:
采用該命令后控制臺界面大概如下:
?
2.定位光標位置以及隱藏光標
控制臺坐標系以控制臺左上角為原點從上往下y軸坐標增大,從左往右x軸坐標增大。GOORD是一個結(jié)構(gòu)體表示一個字符在控制臺的坐標。GetStdHandle是?個WindowsAPI函數(shù)。它?于從?個特定的標準設(shè)備(標準輸?、標準輸出或標準錯誤)中取得?個句柄(?來標識不同設(shè)備的數(shù)值),使?這個句柄可以操作設(shè)備。GetConsoleCursorInfo檢索有關(guān)指定控制臺屏幕緩沖區(qū)的光標??和可?性的信息。那么我們可以將定位光標坐標封裝為一個函數(shù) 如下:
?
?二、蛇身的定義以及維護
?1.蛇身的定義
我們采用鏈表來定義蛇,可以使用一個結(jié)構(gòu)體定義蛇身一個節(jié)點的x坐標以及y坐標,使用鏈表鏈接。具體如下:
2.蛇的維護
同樣利用結(jié)構(gòu)體,定義出蛇頭的位置,食物的位置以及蛇的運動方向,蛇本身的狀態(tài),蛇每次運動的休眠時長,每個食物的分值,玩家的得分。 其中蛇的運動方向以及本身的狀態(tài)可以通過枚舉變量的方法來定義。具體實現(xiàn)如下:
?
三、游戲的開始界面
1.打印歡迎界面
歡迎界面的打印主要在于將光標定在一個合適的位置,讓打印變得好看些,還有pause命令的使用,這點較為簡單不過多贅述。實現(xiàn)代碼如下:
?
2.地圖的打印
為了降低代碼維護難度,我們可以在頭文件中定義墻的符號,蛇身的符號以及代表食物的符號。如下:
?
首先要使用setlocale將C語言環(huán)境改為本地環(huán)境,支持打印寬字符。然后將符號打印為寬字符。具體打印過程如下:
?
3.初始化蛇
為降低代碼維護難度我們將第一個節(jié)點的坐標定義在頭文件:
?
然后采用鏈表的頭插的方法將每個節(jié)點鏈接在一起,然后打印出蛇身,再將蛇的狀態(tài)設(shè)置好。
?
4.初始化食物位置
由于食物的位置是隨機的,所以食物的坐標可以使用rand函數(shù)來取隨機值,那么主函數(shù)要調(diào)用一次srand函數(shù):
?
然后為保證食物在地圖里面且能被蛇吃掉我們x坐標必須是二的倍數(shù)且取值范圍在2-54,y坐標在1-25。然后將食物打印出來:
5.幫助信息的打印
也就是游戲的操作問題,找一個合適的位置打印即可。
?
然后游戲的開始界面就實現(xiàn)完畢了:
?
四、游戲的運行
?1.得分信息的打印以及蛇運動的方向
得分信息的打印跟上面幫助信息一樣,找個合適的時間打印即可,蛇的運動方向的改變我們可以使用do...while循環(huán)來實現(xiàn)。其中于我們的按鍵有關(guān),GetAsyncKeyState函數(shù)可以檢測按鍵,如果按了最低位為1否則為0,我們可以在頭文件定義一個宏來實現(xiàn)對按鍵的判斷。
2.按下空格時的暫停
寫一個死循環(huán)讓它一直停止直到再次按下空格即可:
?
3.蛇的運動
根據(jù)蛇的運動方向獲取蛇頭的下一個位置的坐標,然后如果下一個位置有食物的話蛇身變長,沒有食物將原來蛇的最后一個節(jié)點打印為空格,總長度不變。每走一步判斷一次蛇是否死亡。具體實現(xiàn)過程如下:
(1)下個位置有無食物的判斷及蛇身變化
下個位置是否是食物直接比較坐標即可,實現(xiàn)代碼如下:
??
如果是食物的話就是吃食物,就是蛇身加長然后再次在地圖上更新一個食物:
?
沒有食物就是繼續(xù)往下走,將原來蛇身最后一個節(jié)點打印為空格:
?
(2)蛇是否死亡的判斷
蛇死亡有兩種情況:第一是撞墻死亡,還有就是蛇頭撞到蛇身的任一坐標。知道這兩點之后實現(xiàn)起來就很簡單:
?
五、游戲結(jié)束
游戲結(jié)束分三種情況:第一為正常結(jié)束,也就是玩家按下ESC鍵結(jié)束。第二種是撞到自己最后一種是撞到墻。結(jié)束后將蛇身的每個節(jié)點釋放了即可。
?
在寫完每個函數(shù)接口后,我們在主函數(shù)調(diào)用即可,為保證玩家能夠多次游玩,我們可以用一個循環(huán)來實現(xiàn),然后用getchar來接收玩家每次開始輸入的字符。
?
到這里我們貪吃蛇的實現(xiàn)就完成了,也可以有更多別的功能待大家發(fā)掘。如果有問題可以評論哦,博主看到必回的。?文章來源:http://www.zghlxwxcb.cn/news/detail-859481.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-859481.html
到了這里,關(guān)于C語言小項目——小游戲貪吃蛇的實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!