打造C語言版貪吃蛇(上)

2021-08-14 02:32:27 字數 3635 閱讀 7689

學了程式設計後難免會有些手癢,於是飢渴難耐的我瞄上了小學的經典記憶——貪吃蛇。

下面我就遊戲的設計來逐步講解我打造c語言版貪吃蛇的過程。這是乙個系列的文章,共三篇,第一篇講遊戲的主體設計,第二篇就設計的細節及具體實現給出講解,第三篇給出簡易遊戲ai的設計。

遊戲中用到了windows的庫,只保證能在windows環境下執行。

先看最終效果:

遊戲地圖大小為40*30,這裡為了測試縮小地圖到10*10大小。

可以看到遊戲裡有啟動提示,模式選擇,作弊模式,排行榜的功能模組。

下面應用自頂向下,逐步求精的設計思想來完成這條蛇。

1. 框架分析

主函式是遊戲的流程,包含:

開始遊戲

用於遊戲開始的提示,只顯示一次。

選擇模式

進行難度的選擇。

進行遊戲

遊戲過程的主體。

遊戲結束

用於遊戲結束的提示,每次遊戲結束都顯示。

重新開始

返回第二步。

模板如下:

int main() 

return 0;

}

遊戲的目標就是依次實現以上函式。

2. 要素分析

貪吃蛇裡需要有基礎的遊戲功能及排行榜模組,據此分析貪吃蛇遊戲需要的要素如下:

地圖 地圖控制蛇可移動的範圍,地圖只要在蛇移動一步區域性重新整理即可。地圖在開始遊戲時只列印一次。

蛇 蛇需要儲存節點的座標以及蛇長以及蛇的速度,以乙個結構體實現。

食物 食物在蛇吃掉後需要立即在新位置產生,需要包含食物當前座標以及是否存在的資訊,以乙個結構體實現。

玩家 用於記錄玩家資訊,每次結束遊戲後進行排名,需要包含玩家姓名,遊戲日期,以及分數,以乙個結構體實現。

可以這麼定義以上要素:

struct snake ;

struct food ;

struct player ;

其中蛇的x[n], y[n] 表示蛇節點的座標,定義最大蛇長為地圖長*寬,x[0], y[0] 表示蛇頭的橫縱座標。

3. 實現框架中的函式

startgame();

遊戲開始的提示,簡單的printf()即可。

加入排行版時可在其中加入inputname()函式,用於獲取當前玩家姓名。

selectmode();

根據玩家輸入選擇蛇的速度用以調整難度。printf() 加switch 即可。

下文**中snake.speed 是重新整理時間的間隔。

playgame();

遊戲過程的主要程式,首先初始化遊戲地圖,然後當蛇不死時依次列印蛇,食物,蛇長(即分數),然後蛇移動,判斷是否吃食物,再根據需要產生食物。

gameover();

遊戲結束提示,可在此時列印排行榜。

restart();

獲取特定輸入,重新開始遊戲。

實現如下:

void startgame()
void selectmode() 

return;

}

void playgame() 

}

void gameover()
void restart() 

}

4. 具體函式的實現

為了讓大家對貪吃蛇框架有個具體的了解,這裡貼出頭檔案,具體實現下期見。

#include 

#include

#include

#include

#include

#define map_length 40

#define map_hight 30

#define blank_cell ' '

#define wall_cell '*'

#define init_snake_length 3

#define snake_head 2

#define snake_body 3

#define snake_food 1

#define up (input == 'w' || input == 'w' || input == 72)

#define down (input == 's' || input == 's' || input == 80)

#define left (input == 'a' || input == 'a' || input == 75)

#define right (input == 'd' || input == 'd' || input == 77)

#define pause (input == ' ')

#define cheat (input == 'c' || input == 'c')

void initsnake();

void initfood();

void printmap();

void printmode();

void initgame();

void printsnake();

void printfood();

void printlength();

void productfood();

void eatfood();

int inputvalid(char input);

void snakecontrolmove(char input);

void snakeautomove();

void snakemove();

int snakedie();

void startgame();

void selectmode();

void playgame();

void gamepause();

void gameover();

void restart();

void locatecursor(int x, int y);

void switchcursorvisible();

void inputname();

void gettime();

void initrank();

void ranking(file * fp, struct player player);

void printrank(file * fp, struct player player);

void rank();

void switchcheatmode();

void snakesmartmove();

struct snake ;

struct food ;

struct player ;

struct snake snake;

struct food food;

struct player currentplayer;

char mode[20];

int cheat;

貪吃蛇原始碼(C語言版)

貪吃蛇其實就是實現以下幾步 1 蛇的運動 通過 畫頭擦尾 來達到蛇移動的視覺效果 2 生成食物 3 蛇吃食物 實現 畫頭不擦尾 4 遊戲結束判斷 也就是蛇除了食物,其餘東西都不能碰 include include include include include define width 60 def...

用佇列寫貪吃蛇(C語言版)

by tomas 2016.3.2 程式語言 c 程式介紹 利用佇列這個資料結構編寫乙個簡單的貪吃蛇小遊戲。原理分析 佇列的特點就是先進先出 fifo 我們就是利用他的這個特點來模擬一條貪吃蛇。我們首先考慮一下這個遊戲需要哪些元素,然後怎麼用終端模擬這些元素。蛇 蛇在終端上的表示就是很多個字元連在一...

c語言版貪吃蛇《課程設計》

主要運用了游標的移動 教程會在乙個月內發布 最近考試好多.看 應該能看懂.3.1 規則模組與動畫模組 1 函式原型 void gui void dong 2 功 能 利用for迴圈語句和printf,coord,sleep 函式完成游標的移動和遊戲規則的輸出。3 變數及型別 coord coord ...