我們今天來做乙個迷宮遊戲。在其中有幾個要領:
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 作為當前正在訪問的格仔,同時把該格仔放入乙個已經...
隨機生成迷宮
首先初始地圖所有位置均設為障礙牆,然後任意插入乙個牆體進牆佇列 再判斷此時牆體是否可以設定為路 判斷依據 上下左右四個位置是否只有乙個位置是路 若設定為路,則將該位置四周所有的牆插入佇列 若無法設定為路,直接從牆佇列中刪去當前結點所在的節點,若牆佇列不為空,則從佇列中隨機選取一處障礙重新執行,重複以...