唐老鸭
|
分享:
▲
▼
刚花了点时间帮你把自动产生迷宫的程式写出来了 ..... 33*33的迷宫应该够你用了吧.... 至于走的方法请你自己参考程式区有你要的写法.... 下面我帮你加了些注解... 但也许对你会有些复杂.... 请自己努力看懂吧.... 不然就参考一些有关游戏设计的书吧.... 我自己也有东西要做.... 所以我没时间解释给你听 .... 复制程式
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#define row 35
#define column 35
int maze[row][column];
void generatemaze(int x,int y)
{
int direction;
maze[x][y] |= 0x1; // 标示此格已设定
while (maze[x][y+2]==0 || maze[x+2][y]==0 || maze[x][y-2]==0 || maze[x-2][y]==0) // 如果不是外墙
{
direction = rand()%4+1; // 决定下一个位置
if (direction==1 && maze[x][y+2]==0) // 向右走
{
maze[x][y+1] |= 0x1; // 拆掉右墙
generatemaze(x,y+2);
}
else if (direction==2 && maze[x-2][y]==0) // 向上走
{
maze[x-1][y] |= 0x1; // 拆掉上墙
generatemaze(x-2,y);
}
else if (direction==3 && maze[x][y-2]==0) // 向左走
{
maze[x][y-1] |= 0x1; // 拆掉右墙
generatemaze(x,y-2);
}
else if (direction==4 && maze[x+2][y]==0) // 向下走
{
maze[x+1][y] |= 0x1; // 拆掉上墙
generatemaze(x+2,y);
}
}
}
void main()
{
int Si=2,Sj=2,Ei=row-3,Ej=column-3;
int x,y;
srand(time(NULL));
for (x=0;x<row;x++)
{
for (y=0;y<column;y++)
{
if (x==0 || y==0 || y==1 || x==row-2 || x==row-1 || y==column-1 )
maze[x][y]=2; // 设定外墙
else
maze[x][y]=0; // 初始迷宫内部
}
}
generatemaze(Ei,Ej); // 产生迷宫
maze[Si-1][Sj] |= 0x1; // 拆掉入口上墙
maze[Ei][Ej+1] |= 0x1; // 拆掉出口右墙
for(x=1; x<row-1; x++)
{
for(y=1; y<column-1; y++)
{
if (maze[x][y] == 0 || maze[x][y] == 2)
cout<<"█";
else
cout<<" ";
}
cout<<endl;
}
}
请自己排版吧...好懒 .....
|
|
rakish
|
分享:
▲
▼
书上的..刚好看到... 复制程式
int maze[7][10]={
1,1,1,1,1,1,1,1,1,1,
1,0,1,0,1,0,0,0,0,1,
1,0,1,0,1,0,1,1,0,1,
1,0,1,0,1,1,1,0,0,1,
1,0,1,0,0,0,0,0,1,1,
1,0,0,0,1,1,1,0,0,1,
1,1,1,1,1,1,1,1,1,1};
int find(int x,int y){//入口
if(x==1&&y==1){ //出口
maze[x][y]=2;
return 1;
}else{
if(maze[x][y]==0){
maze[x][y]=2; //表示走过
if(( find(x-1,y)
+find(x+1,y)
+find(x,y+1)
+find(x,y-1))>0)
return 1;
}else{
maze[x][y]=0;
return 0;
}
}else{
return 0;
}
}
}
void main(){
int i,j;
find(2,5); //入口
}
|
人一但长大了 就发现世上的事不像想的那么好 你总是会一天天长大的 会看得越来越清楚
|
x0
[6 楼]
From:台湾
| Posted:2005-11-30 15:00 |
|
|
|