貪吃蛇,是一款經典的益智遊戲。我們可以通過演算法捕捉和傳遞智慧型,設計出能自動跑著吃食物的智慧型蛇。
有不少人對此研究,設計出了很棒的演算法,如圖:
歸納一些比較高階的演算法為三類:
1.寬度優先搜尋最短路徑
2.走哈密頓迴路
3.特殊決策
這裡我主要介紹最簡單的貪婪演算法及整個遊戲的設計。
首先是自動尋路函式wheregonext(void)。決策思想是走曼哈頓距離fabs(snakex[0]-foody)+fabs(snakey[0]-foodx)最小且不會死掉的方向。當然,這很不智慧型,容易死掉,但容易實現。
char wheregonext() ;
int min=9999,mindir;
for(int i=0; i<4; i++)
}snakex[0]-=direx[i];
snakey[0]-=direy[i];
}if(min<9999)
return movable[mindir];
else
return
0;}
接著是如何製作平滑的輸出介面。我的實現方法是:
每走一步
掩蓋蛇尾
輸出蛇頭
輸出蛇頸
// snake_smart.cpp
// kuncheng xie 2017-12-26
#include
#include
#include
#include
#include
#define snake_max_length 150
#define snake_head 'h'
#define snake_body 'x'
#define blank_cell ' '
#define snake_food '$'
#define wall_cell '*'
#define map_length 12
#define delay_time 100000 //delay 100ms
//move snake
void snakemove(int dir);
//output cells of the grid
void show(void);
//output snake
void output(void);
//put a food randomized on a blank cell,1 for put food successfully,0 for fail
int putfood(void);
//judge whether gameover;0 for not over,1 for game over
int gameover(void);
//decide the smart snake's direction
char wheregonext(void);
char
map[map_length][map_length+1]= ;
const
int direx[4]= ;
const
int direy[4]= ;
int snakex[snake_max_length]= ;
int snakey[snake_max_length]= ;
int snakelength=5;
int foodx,foody,eatfood=1;
int main(void)
output();
usleep(delay_time);
} while(!gameover());
printf("\033[13;1hgame over!!!\n");
return0;}
void snakemove(int dir)
for(int i=snakelength-1; i>0; i--)
snakex[0]+=direx[dir];//head move
snakey[0]+=direy[dir];
}void show()
printf("\n");
}}void output(void)
} else
printf("\033[13;1h\n");
}int gameover(void)
return0;}
int putfood(void) }}
if(len>1)ran=rand()%len;//place food randomly
else
if(len==0)return
0; else ran=0;
foodx=foodmap[ran][0];
foody=foodmap[ran][1];
return1;}
char wheregonext() ;
int min=9999,mindir;
for(int i=0; i<4; i++)
}snakex[0]-=direx[i];
snakey[0]-=direy[i];
}if(min<9999)
return movable[mindir];
else
return
0;}
最終介面如圖:
這裡大力推薦乙個同學的部落格:設計簡單的貪吃蛇ai 。身為同學,不免自慚形穢。
字元版本貪吃蛇遊戲設計
在前面的智慧型蛇遊戲中,我已經將我的全部 都貼出來了,大家也都看到了我的成果,雖然存在很多bug,但總算是有乙個初步的構架了,接下來,我要與大家分享一下這條蛇的艱難成長過程。首先,當然是最順利的乙個部分啦,那就是除去最基本的影象列印了,這我想也不用多說,大家接觸到這個作業時,肯定噼里啪啦就打出了乙個...
貪吃蛇遊戲設計及演算法
首先需要明確設計應該完成的功能,使用鍵盤的上下左右鍵來控制蛇的方向 隨機產生食物,蛇吃到食物後,身體變長一節 設定邊界,蛇撞到牆或者吃到自身的時候,遊戲結束。以下是思路 1.一張地圖,四周有牆體。2.一條蛇,由蛇身和蛇頭組成。3.食物,蛇吃到食物後身體變長,並且重新生成乙個食物。3.蛇需要移動,這是...
貪吃蛇遊戲設計及演算法
先是標頭檔案 然後就按照我們自頂向下逐步求精的理念來寫 char blank char char wall char 牆 char snake head char h 蛇頭 char snake body char x 蛇身 char food char 食物 char map 10 10 int ...