編程自動迷宮
㈠ C++編程問題:編一個迷宮游戲程序
在書找的,只打了個結構體(太多了),我利用stack做的!希望能對你有所幫助!程序如下:
typedef struct{
int ord;//通道塊的路徑上的序號
PosType seat;//通道塊在迷宮的坐標位置
int di;//從此通道塊走向下一個通道塊的方向
}SelemType;//stack的元素類型
Status MazePath(MazeType maze,PosType start,PosType end){
//若迷宮 maze中存在從入口start到出口end的通道,所以,求得一條存放在stack中
//(從stack底到頂)並返回TRUE,否則返回FALSE
InitStack(S);
curpos=start;//設置當前的位置為入口位置
curstep=1;//探索第一步
do{
if(Pass(curpos)){//當前位置可以通過,即是未曾走過的通道塊
FootPrint(curpos);//留下足跡
e=(curstep,curpos,1);
Push(s,e);//加入路徑
if(curpos==end)
return(TRUE);//到達終點
curpos=NextPos(curpos,1);//下一位置是當前位置的東部
curstep++;//探索下一步
}
else{//當前位置不能通過
if(!StackEmpty(S)){
Pop(S,e);
while(e.di==4&&!StackEmpty(S)){
MarkPrint(e.seat);//留下不能通過的標記,並退回一步
Pop(S,e);
}
if(e.di<4){
e.di++;
Push(s.e);//換下一個方向探索
curpos=NextPos(e.seat e.di);//設定當前位置是該新方向上的相鄰塊
}//if
}//if
}//else
}while(!StackEmpty(S));
return(FALSE);
}//MazePath
㈡ 數據結構與演算法作業:用C語言編程隨機生成一個迷宮,然後找出從入口到出口的路線圖。急!
幾點說明:
1.本程序是動態的,運行後自動尋找迷宮出路
2.本程序對C語言剛學完的有很大的意義.
3.四周是牆,坐標(1,1)是入口,右下腳是出口
聲明:本程序用VC調試是無法通過的需要修改
本程序調試工具是TC.....................
#include "graphics.h"
#include "dos.h"
#include "stdlib.h"
#include "process.h"
#define MAX_COL 14/*定義迷宮大小*/
#define MAX_ROW 14
typedef struct
{ int vert;
int horiz;
}offsets;
mapture(int i,int j,int k);/*標記迷宮,(i,j)標記為k模式*/
initmaze();/*初始化迷宮數組*/
findmaze(int i,int j);/*找到了(i,j)可走,標記*/
mapmaze();/*畫出原始迷宮*/
int findpath(int row,int col);/*遞歸函數,找出迷宮路徑*/
mapbar();/*畫出方格*/
initgrap();/*初始化VGA*/
print();/*迷宮走完後,輸出是否成功 */
int startx=50,starty=50;/*畫圖的屏幕坐標*/
int maze[MAX_ROW][MAX_COL];
offsets move[8]={{0,1},{1,1},{-1,1},{1,0},{-1,0},{0,-1},{1,-1},{-1,-1}}; /*8個方向尋找*/
initmaze()/*初始化迷宮數組 */
{ int i,j;
for(i=0;i<MAX_ROW;i++)/*迷宮四周設置為1 代表牆*/
{ maze[i][0]=1;
maze[i][MAX_COL-1]=1;
}
for(i=0;i<MAX_COL;i++)
{ maze[0][i]=1;
maze[MAX_ROW-1][i]=1;
}
randomize();
for(i=1;i<MAX_ROW-1;i++)/*迷宮圖形隨機產生 1表示不通 0表示可行*/
for(j=1;j<MAX_COL-1;j++)
{
maze[i][j]=random(2);
}
}
findmaze(int i,int j)/*找到 (i,j)可走*/
{
mapture(j,i,2);/*在圖形上標記*/
sleep(1);
}
returnmaze(int i,int j)/*找到(i,j)可走 ,但下一步無路走則標記*/
{
mapture(j,i,3);/*在圖形上標記*/
sleep(1);
}
print(int i)/*迷宮走完後,輸出是否成功*/
{ settextstyle(1,0,5);
if(i==1)
outtextxy(340,400,"Ture path!");
else if(i==2)
outtextxy(340,400,"No path!");
}
int findpath(int row,int col)/*用遞歸法找迷宮*/
{ int direct,next_row,next_col;
direct=0;
maze[1][1]=2;
mapture(1,1,2);
sleep(1);
while(direct<8)/*8個方向尋找*/
{ next_row=row+move[direct].vert;/*設置下一步坐標*/
next_col=col+move[direct].horiz;
if(maze[next_row][next_col]==0) /*可走,便標記*/
{ maze[next_row][next_col]=2;
findmaze(next_row,next_col) ;
if(next_row==(MAX_ROW-2)&&next_col==(MAX_COL-2))/*找到出口退出程序*/
{ print(1);
getch();
exit(0);
}
else
findpath(next_row,next_col);/*沒有到出口繼續遞歸*/
maze[next_row][next_col]=3;
returnmaze(next_row,next_col);
}
direct++;
}
return(row);
}
TC調試良好