貪吃蛇(C語言)

貪吃蛇(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

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