智慧型蛇的製作學習

2021-08-14 04:08:38 字數 3008 閱讀 2387

首先,智慧型蛇的大部分**與貪吃蛇相同,但是智慧型蛇能夠自主規劃路線,精準吃下食物。

他看起來像是人工智慧,其實有很大區別。

怎麼使蛇能夠自己吃下食物呢?接下來我們來看一下他的演算法。

for(i = 0; i < 4; i++)  else  else 

}}

這段**是加在move函式後面的,在走完一步或者是吃完食物之後,它便會判斷前後左右及上方設定的蛇頭『h』的座標的前後左右(a[sum-1].x+dx[i],a[sum-1].y+dy[i]),我們已經分別設定了(1,0)(-1,0)(0,1)(0,-1)來表示方向,通過周圍的座標上的符號是否為『 』(空格)或『$』(食物)來判斷是否可以走。若可以走,即將對應的變數moveable[i] = 1;否則則判段是否與蛇身相撞,及判斷周圍是否為』x『,然後與上同理,與蛇身相撞即無法通過,將moveable標記。無法通過則moveable[i]=0;

做完這個只是第一步,只是得到了周圍是否可走,真正的目標是使蛇準確而快速的吃到食物。

接下來講第二個部分的**。如下。

void calculate()  else 

}}

這裡我們新寫了乙個calculate函式,calculate什麼呢?即是蛇頭與食物的距離。通過迴圈判斷各個方向是否可走,然後在在斷走下一步蛇頭到食物的距離。使用abs函式。就是求絕對值,得到x,y軸分別與食物的座標距離,並記錄下來。否則,則設定為distance[i] = 9999;

講了這兩部分之後,大家自己也有一點眉目知道要做什麼了。但是還是不知道如何實際操作,有些細節,雖小,但是不可或缺,接下來我就講的完善一些。

void turn() 

}switch (k)

}

得到各個方向的距離後,找出最小的距離,決定下一步的轉彎方向,繼續進行,知道吃到食物。吃到食物後又有新的食物出現,同樣,迴圈直到遊戲結束。

以上就是我對智慧型蛇的學習。

下面放上**,**來自某大神的blog

/*蛇越長跑得越快*/

/*蛇能自己找食物*/

#include

#include

#include

#include

//#include

#include

#include

#include

void food();

void show();

void move();

void turn();

void check();

void ini();

void calculate();

int movable[4] = ; //陣列的下標表示方向,0123分別表示上下左右,下同

int distance[4] = ;

int dy[4] = ;

int dx[4] = ;

int sum = 5; //蛇總長度

int over = 0;

int speed;

int foodx, foody; //食物的座標

char

map[17][17];

struct snake a[100];

void ini()

a[0].x = 1; a[0].y = 1; //地圖左上角設定一條長度為5的蛇

a[1].x = 1; a[1].y = 2;

a[2].x = 1; a[2].y = 3;

a[3].x = 1; a[3].y = 4;

a[4].x = 1; a[4].y = 5; a[4].dir = 1;

srand(time(0));

for (i = 0; i < 17; i++)

}for (i = 1; i < 16; i++)

}//map[6][5] = '*'; map[6][6] = '*'; map[6][7] = '*';

//map[7][5] = '*'; map[7][7] = '*';

map[a[4].x][a[4].y] = 'h'; //設定蛇頭

for (i = 0; i < sum - 1; i++)

food();

calculate();

}void show()

printf("\n");

}while (1)

else

if (ch == 114) }}

system("cls"); //清屏

for (i = 0; i < 17; i++)

printf("\n");

}calculate(); //計算並記錄蛇頭與食物距離

}}void food()

}}void move()

else

map[a[i].x][a[i].y] = 'x'; //把地圖上蛇身座標處的字元設定成『x』

}a[sum - 1].x = a[sum - 1].x + dx[a[sum - 1].dir]; //蛇頭按當前方向移動一格

a[sum - 1].y = a[sum - 1].y + dy[a[sum - 1].dir];

map[a[sum - 1].x][a[sum - 1].y] = 'h'; //把地圖上蛇頭座標處的字元設定成『h』

}else

for(i = 0; i < 4; i++) else else }}

}void check()

printf("\n");

}printf("input 'r' to restart\ninput 'q' to quit\n");

over = 1;}}

else

if (map[x][y] == 'o')

}void turn()

}switch (k)

}void calculate() else

}}int main()

C語言製作智慧型蛇遊戲

上一周,我們做了字元貪吃蛇遊戲,但那個貪吃蛇需要我們的操控,今天,我們做乙個不需要我們操作的智慧型蛇。智慧型蛇,顧名思義,是讓蛇有一定的智慧型,讓蛇自己決策,自己行動。當然,如果進一步智慧型,還可以讓蛇與另一條蛇搶奪食物。我們先看一下要求 任務要求 本次專案的任務是讓蛇有一定的智慧型,能通過演算法具...

打造智慧型蛇的學習過程

弄乙個字元遊戲貪吃蛇對我來說已經非常難了,這次的智慧型蛇更是令人頭痛。在借鑑了大佬做的專案後,自己也跟著學習如何製作,畢竟600多行的 於我而言,是非常難自己乙個人弄出來的。演算法 要讓蛇自己走,我們知道追著尾巴跑,蛇就不會死,所以我們以最短路線去吃食物時,要給自己留條後路,如果吃完蘋果還可以找到到...

字元遊戲 智慧型蛇學習記錄

1.決定蛇行走的方向函式的偽 hx,hy 頭的位置 fx,fy 食物的位置 function wheregonext hx,hy,fx,fy 記錄可走的方向 用陣列distance 3 記錄離食物的距離 分別計算蛇頭周邊四個位置到食物的距離。h頭的位置,f食物位置 例如 假設輸入 a 則distan...