C 實用程式設計 隨機生成迷宮演算法

2021-09-19 18:43:22 字數 3113 閱讀 9098

我們今天來做乙個迷宮遊戲。在其中有幾個要領:

1.方向的控制

我們建立的迷宮是以座標的形式出現的,越往上x座標越小,越往左y座標越小,這雨平面直角座標系不同,要注意!

2.隨機生成演算法:

void init_maze(void); //初始化迷宮

void gotoxy(int x, int y); //移動游標

void path_up(int *x, int *y); //上構路徑

void path_down(int *x, int *y); //下構路徑

void path_left(int *x, int *y); //左構路徑

void path_right(int *x, int *y); //右構路徑

void setxy(int x, int y); //指定位打通路徑

void path_local(int x, int y); //本置路徑

3.**

#include#include#include#include#include#include#include using namespace std;

#define up 72

#define down 80

#define left 75

#define right 77

#define m 40 //迷宮長度

#define n 82 //迷宮寬度

char maze[m/2][n/2]; //定義迷宮陣列

char path[m-1][n-1]; //定義路徑陣列

void setview(void); //設定控制台視窗資訊

int menu_maze(void); //主目錄

void startgame(void); //開始遊戲

void init_maze(void); //初始化迷宮

void gotoxy(int x, int y); //移動游標

void path_up(int *x, int *y); //上構路徑

void path_down(int *x, int *y); //下構路徑

void path_left(int *x, int *y); //左構路徑

void path_right(int *x, int *y); //右構路徑

void setxy(int x, int y); //指定位打通路徑

void path_local(int x, int y); //本置路徑

void go_up(int *x,int *y); //向上移動

void go_down(int *x,int *y); //向下移動

void go_left(int *x,int *y); //向左移動

void go_right(int *x,int *y); //向右移動

void hidecursor(void); //隱藏游標

void win(void);

int t;

int f;

int m;

int n;

int x;

int target;

int flag;

int local_x;

int local_y;

int main()

}}void setview()

; setconsolescreenbuffersize(hout,size); //設定控制台視窗緩衝區大小

small_rect rc = ;

setconsolewindowinfo(hout,true ,&rc); //設定視窗位置和大小

setconsoletitle("迷宮"); //設定視窗標題

hidecursor(); //隱藏游標}

int menu_maze(void)

return c; }

void startgame()

} }system("cls");

win();}

void init_maze()

{ int i,j;

t=1;

f=1;

m=0;

n=0;

x=0;

flag=0;

srand((unsigned)time(null));

for(i=0;im*n/4)

{ x=0;

if(m==0&&n==0&&maze[m][n+1]==maze[0][0]&&maze[m+1][n]==maze[0][0]) t=0;//初始位置死路

if(m==0&&n==n/2-1&&maze[m][n-1]==maze[0][0]&&maze[m+1][n]==maze[0][0]) t=0;//右上角死路

if(m==m/2-1&&n==0&&maze[m][n+1]==maze[0][0]&&maze[m-1][n]==maze[0][0]) t=0;//左下角死路

if(m==m/2-1&&n==n/2-1&&maze[m][n-1]==maze[0][0]&&maze[m-1][n]==maze[0][0]) t=0;//終點死路

if(m==0&&n!=0&&n!=n/2-1&&maze[m][n-1]==maze[0][0]&&maze[m][n+1]==maze[0][0]&&maze[m+1][n]==maze[0][0]) t=0;//第一行死路

if(m!=0&&m!=m/2-1&&n==0&&maze[m-1][n]==maze[0][0]&&maze[m][n+1]==maze[0][0]&&maze[m+1][n]==maze[0][0]) t=0;//第一列死路

if(m!=0&&m!=m/2-1&&n==n/2-1&&maze[m-1][n]==maze[0][0]&&maze[m][n-1]==maze[0][0]&&maze[m+1][n]==maze[0][0]) t=0;//最後一列死路

if(m==m/2-1&&n!=0&&n!=n/2-1&&maze[m-1][n]==maze[0][0]&&maze[m][n+1]==maze[0][0]&&maze[m][n-1]==maze[0][0]) t=0;//最後一行死路

if(m>0&&m0&&n怎麼樣,還是蠻簡單的吧?

演算法 隨機生成迷宮

演算法原理 從起點開始,隨機選擇乙個方向移動,一直移動到終點,則移動的路徑便是迷宮的路徑。移動過程中要保證路徑不要相交,不要超出邊界,生成效果 public partial class mainform form void btncreateclick object sender,eventargs...

Prim迷宮演算法 隨機迷宮生成

最近在學android開發,老師讓我們自己做個應用,我就想做個簡單的roguelike rpg小遊戲。由於要用到迷宮,所以在網上學習了一下prim迷宮演算法,先用c 手擼了乙個簡單的模板。隨機選擇乙個白色格仔 i,j 實際位置為i 2 1,j 2 1 作為當前正在訪問的格仔,同時把該格仔放入乙個已經...

隨機生成迷宮

首先初始地圖所有位置均設為障礙牆,然後任意插入乙個牆體進牆佇列 再判斷此時牆體是否可以設定為路 判斷依據 上下左右四個位置是否只有乙個位置是路 若設定為路,則將該位置四周所有的牆插入佇列 若無法設定為路,直接從牆佇列中刪去當前結點所在的節點,若牆佇列不為空,則從佇列中隨機選取一處障礙重新執行,重複以...