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