字元版本貪吃蛇遊戲設計及演算法

2021-08-14 02:23:47 字數 2900 閱讀 3625

貪吃蛇,是一款經典的益智遊戲。我們可以通過演算法捕捉和傳遞智慧型,設計出能自動跑著吃食物的智慧型蛇。

有不少人對此研究,設計出了很棒的演算法,如圖:

歸納一些比較高階的演算法為三類:

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 ...