一、項目介紹
當(dāng)前通過控制臺終端實現(xiàn)一個貪吃蛇小游戲,實現(xiàn)游戲的繪制、更新、控制等功能。
二、實現(xiàn)效果
三、完整代碼
下面貼出的代碼在Windows系統(tǒng)上編譯運行,需要使用conio.h頭文件中的getch()函數(shù)來獲取鍵盤輸入,用于控制蛇的移動。可以通過按下'w'、's'、'a'、'd'四個鍵來分別控制蛇的向上、向下、向左、向右移動。同時還有一個暫停函數(shù)Pause(),用于控制蛇的移動速度,可以根據(jù)需要調(diào)整暫停時間。
設(shè)計思路:
程序定義了一些常量,包括游戲界面的寬度和高度、不同狀態(tài)下的符號表示等,并在全局變量中定義了蛇頭、蛇身、食物等的位置、得分、長度、行進方向等參數(shù)。同時還定義了一個二維字符數(shù)組board,用于表示整個游戲界面。
在InitGame()函數(shù)中進行游戲初始化,設(shè)置游戲界面的邊框、蛇頭、蛇身、隨機生成食物等操作。
DrawGame()函數(shù)用于繪制游戲畫面,將board數(shù)組中的字符逐行輸出,并在末尾輸出得分。UpdateGame()函數(shù)用于更新游戲狀態(tài),包括蛇的移動、游戲結(jié)束判斷等。CheckGameOver()函數(shù)用于檢查游戲是否結(jié)束,包括墻壁碰撞、蛇身碰撞、得分達到上限等情況。GenerateFood()函數(shù)用于隨機生成食物位置,調(diào)用rand()函數(shù)獲取隨機數(shù)并進行判斷。Move()函數(shù)用于蛇的移動,根據(jù)當(dāng)前行進方向進行移動。Control()函數(shù)用于用戶操作,讀取鍵盤輸入并更新蛇的行進方向。Pause()函數(shù)用于控制游戲速度,通過調(diào)用Sleep()函數(shù)控制暫停時間。GameOver()函數(shù)用于輸出最終得分和游戲結(jié)束信息,并直接退出程序。
#include < stdio.h >
#include < stdlib.h >
#include < conio.h > //需要使用getch()函數(shù)
#include < time.h > //需要使用time()函數(shù)
#include < Windows.h >
?
?
#define WIDTH 40 //游戲界面寬度
#define HEIGHT 20 //游戲界面高度
?
//定義符號常量,表示各種不同的狀態(tài)
#define BLANK ' ' //空白
#define WALL '*' //墻壁
#define SNAKEHEAD '@' //蛇頭
#define SNAKEBODY 'o' //蛇身
#define FOOD '$' //食物
?
//定義坐標結(jié)構(gòu)體
struct Position
{
int x; //橫坐標
int y; //縱坐標
};
?
//定義枚舉類型,表示游戲狀態(tài)
enum GameState
{
Over = -1, //游戲結(jié)束
Running = 0, //游戲進行中
Win = 1 //游戲勝利
};
?
int score = 0; //得分
struct Position head; //蛇頭位置
struct Position body[WIDTH * HEIGHT]; //蛇身位置
struct Position food; //食物位置
char board[WIDTH][HEIGHT]; //游戲界面
int length = 3; //蛇身長度,初始為3
int direction = 0; //蛇的行進方向,0表示向右,1表示向下,2表示向左,3表示向上
?
//函數(shù)聲明
void InitGame(); //初始化游戲界面和蛇的初始位置
void DrawGame(); //繪制游戲畫面
void UpdateGame(); //更新游戲狀態(tài)
enum GameState CheckGameOver(); //檢查游戲是否結(jié)束
void GenerateFood(); //生成隨機食物
void Move(); //蛇的移動
void Control