學了程式設計後難免會有些手癢,於是飢渴難耐的我瞄上了小學的經典記憶——貪吃蛇。
下面我就遊戲的設計來逐步講解我打造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 ...