貪吃蛇(C語言)
關於遊戲
我在實現這個遊戲時將其分爲了三個部分
1.gameBegin(遊戲開始):包括準備界面prepareUI()函數,設置光標不可見invisibleCursor函數,設置遊戲界面gameUI函數,初始化蛇intialSnake函數,初始化食物initalFood函數 。2.gameProcess(遊戲進行):包括創建身體結點createSnakeBody
函數,創建食物createFood函數,蛇身體移動moveSnake函數,打印蛇、食物以及界面showSnake函數,判斷遊戲是否結束judgGame函數,記錄分數recordScore函數。3.gameEnd(遊戲結束):包括遊戲結束更新排行榜updateRanking函數,遊戲結束界面endUI函數。
結構體設置
我在實現遊戲時用到了三個結構體,分別來表示蛇,食物和排行榜 。蛇的結構體我使用了鏈表結構,在實現遊戲的同時我也對鏈表的操作進行了練習。
typedef struct {
char bodylook; //蛇身樣式
int x; //蛇身結點的x座標
int y; //蛇身結點的y座標
int motionNum; //蛇身結點的當前運動方向
struct SnakeBody *next; //指向下一蛇身結點
struct SnakeBody *pre; //指向前驅結點
}SnakeBody;
typedef struct {
int x; //食物的x座標
int y; //食物的y座標
}Food;
typedef struct {
int score; //分數
char *name; //姓名
}RankList;
遊戲難點
總的來說貪吃蛇這個遊戲比較簡單,我在實現這個遊戲時主要用到了控制檯光標的控制,設置光標信息來打印蛇,用system(“cls”)清屏來實現動畫效果。
這個遊戲唯一的難點在於蛇的移動,控制和打印
移動:蛇的移動每單位時間整體向前移動一個單位,用蛇頭的motionNum來控制蛇的移動方向。每單位時間從蛇尾結點開始遍歷蛇身,當前結點的x、y值等於前一個蛇身結點的x、y值,最後蛇頭結點按照運動方向向前移動一個單位控制:如果單一使用getch()函數來對蛇進行控制,在你不按下按鈕的時候程序無法向下執行。所以可以使用_kbhit()函數來實現蛇的控制。
if (_kbhit()) { ch = _getch(); }
按下按鈕_kbhit()返回值爲1,然後對ch進行賦值。
打印:我在這裏使用了控制檯光標的相關知識,不瞭解的朋友可以參考一下我的上一篇分享http://blog.csdn.net/Caramelsa/article/details/78507475
總的來說就是設置光標的位置,然後打印。
遊戲截圖
寫在最後:這個遊戲大體上來說完成了整個遊戲過程,但在細節上還存在許多小瑕疵。博主也是剛開始自學編程,不足的地方希望大家能夠提出,大家共同進步。
遊戲的源碼大概400多行,比較多,就不在這裏放出了,(>人<;)恬不知恥的貼出自己的GitHub地址,這個遊戲的源碼就在上面(逃
https://github.com/Joezeo/CodesRepositoryII/blob/master/C_snake/C_snake/C_snake.c