走格子Word下载.docx

上传人:b****1 文档编号:992268 上传时间:2023-04-29 格式:DOCX 页数:18 大小:63.58KB
下载 相关 举报
走格子Word下载.docx_第1页
第1页 / 共18页
走格子Word下载.docx_第2页
第2页 / 共18页
走格子Word下载.docx_第3页
第3页 / 共18页
走格子Word下载.docx_第4页
第4页 / 共18页
走格子Word下载.docx_第5页
第5页 / 共18页
走格子Word下载.docx_第6页
第6页 / 共18页
走格子Word下载.docx_第7页
第7页 / 共18页
走格子Word下载.docx_第8页
第8页 / 共18页
走格子Word下载.docx_第9页
第9页 / 共18页
走格子Word下载.docx_第10页
第10页 / 共18页
走格子Word下载.docx_第11页
第11页 / 共18页
走格子Word下载.docx_第12页
第12页 / 共18页
走格子Word下载.docx_第13页
第13页 / 共18页
走格子Word下载.docx_第14页
第14页 / 共18页
走格子Word下载.docx_第15页
第15页 / 共18页
走格子Word下载.docx_第16页
第16页 / 共18页
走格子Word下载.docx_第17页
第17页 / 共18页
走格子Word下载.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

走格子Word下载.docx

《走格子Word下载.docx》由会员分享,可在线阅读,更多相关《走格子Word下载.docx(18页珍藏版)》请在冰点文库上搜索。

走格子Word下载.docx

N

N

Y

循环找下一路径

五.程序清单

/*4.3.3源程序*/

#include<

graphics.h>

stdlib.h>

stdio.h>

conio.h>

dos.h>

#defineN25/*迷宫的大小,可改变*/

intoldmap[N][N];

/*递归用的数组,用全局变量节约时间*/

intyes=0;

/*yes是判断是否找到路的标志,1找到,0没找到*/

intway[100][2],wayn=0;

/*way数组是显示路线用的,ways是统计走了几个格子*/

voidInit(void);

/*图形初始化*/

voidClose(void);

/*图形关闭*/

voidDrawPeople(int*x,int*y,intn);

/*画人工探索物图*/

voidPeopleFind(int(*x)[N]);

/*人工探索*/

voidWayCopy(int(*x)[N],int(*y)[N]);

/*为了8个方向的递归,把旧迷宫图拷贝给新数组*/

intFindWay(int(*x)[N],inti,intj);

/*自动探索函数*/

voidMapRand(int(*x)[N]);

/*随机生成迷宫函数*/

voidPrMap(int(*x)[N]);

/*输出迷宫图函数*/

voidResult(void);

/*输出结果处理*/

voidFind(void);

/*成功处理*/

voidNotFind(void);

/*失败处理*/

voidmain(void)/*主函数*/

{

intmap[N][N];

/*迷宫数组*/

charch;

clrscr();

printf("

\nPleaseselecthand

(1)elseauto\n"

);

/*选择探索方式*/

scanf("

%c"

&

ch);

Init();

/*初始化*/

MapRand(map);

/*生成迷宫*/

PrMap(map);

/*显示迷宫图*/

if(ch=='

1'

PeopleFind(map);

else

FindWay(map,1,1);

/*系统自动从下标1,1的地方开始探索*/

Result();

/*输出结果*/

Close();

}

voidInit(void)/*图形初始化*/

intgd=DETECT,gm;

initgraph(&

gd,&

gm,"

c:

\\tc"

voidDrawPeople(int*x,int*y,intn)/*画人工控制图*/

{/*如果将以下两句注释掉,则显示人工走过的路径,*/

setfillstyle(SOLID_FILL,WHITE);

/*设置白色实体填充样式*/

bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);

/*恢复原通路*/

switch(n)/*判断x,y的变化,8个方向的变化*/

{

case1:

(*x)--;

break;

/*上*/

case2:

(*y)++;

break;

/*右上*/

case3:

(*y)++;

/*右*/

case4:

(*x)++;

/*右下*/

case5:

/*下*/

case6:

(*y)--;

/*左下*/

case7:

(*y)--;

/*左*/

case8:

/*左上*/

}

setfillstyle(SOLID_FILL,RED);

/*新位置显示探索物*/

voidPeopleFind(int(*map)[N])/*人工手动查找*/

intx,y;

charc=0;

/*接收按键的变量*/

x=y=1;

/*人工查找的初始位置*/

setcolor(11);

line(500,200,550,200);

outtextxy(570,197,"

d"

line(500,200,450,200);

outtextxy(430,197,"

a"

line(500,200,500,150);

outtextxy(497,130,"

w"

line(500,200,500,250);

outtextxy(497,270,"

x"

line(500,200,450,150);

outtextxy(445,130,"

q"

line(500,200,550,150);

outtextxy(550,130,"

e"

line(500,200,450,250);

outtextxy(445,270,"

z"

line(500,200,550,250);

outtextxy(550,270,"

c"

/*以上是画8个方向的控制介绍*/

setcolor(YELLOW);

outtextxy(420,290,"

Press'

Enter'

toend"

/*压回车键结束*/

bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);

/*入口位置显示*/

while(c!

=13)/*如果按下的不是回车键*/

c=getch();

/*接收字符后开始各个方向的探索*/

if(c=='

w'

&

map[x-1][y]!

=1)

DrawPeople(&

x,&

y,1);

/*上*/

e'

map[x-1][y+1]!

y,2);

d'

map[x][y+1]!

y,3);

/*右*/

c'

map[x+1][y+1]!

DrawPeople(&

y,4);

/*右下*/

if(c=='

x'

map[x+1][y]!

y,5);

/*下*/

else

z'

map[x+1][y-1]!

DrawPeople(&

y,6);

if(c=='

a'

map[x][y-1]!

y,7);

elseif(c=='

q'

map[x-1][y-1]!

y,8);

/*消去红色探索物,恢复原迷宫图*/

if(x==N-2&

y==N-2)/*人工控制找成功的话*/

yes=1;

/*如果成功标志为1*/

voidWayCopy(int(*oldmap)[N],int(*map)[N])/*拷贝迷宫数组*/

inti,j;

for(i=0;

i<

N;

i++)

for(j=0;

j<

j++)

oldmap[i][j]=map[i][j];

intFindWay(int(*map)[N],inti,intj)/*递归找路*/

if(i==N-2&

j==N-2)/*走到出口*/

/*标志为1,表示成功*/

return;

map[i][j]=1;

/*走过的地方变为1*/

WayCopy(oldmap,map);

/*拷贝迷宫图*/

if(oldmap[i+1][j+1]==0&

!

yes)/*判断右下方是否可走*/

FindWay(oldmap,i+1,j+1);

if(yes)/*如果到达出口了,再把值赋给显示路线的way数组,也正是这个原因,所以具体路线是从最后开始保存*/

way[wayn][0]=i;

way[wayn++][1]=j;

if(oldmap[i+1][j]==0&

yes)/*判断下方是否可以走,如果标志yes已经是1也不用找下去了*/

FindWay(oldmap,i+1,j);

if(yes)

if(oldmap[i][j+1]==0&

yes)/*判断右方是否可以走*/

FindWay(oldmap,i,j+1);

if(oldmap[i-1][j]==0&

yes)/*判断上方是否可以走*/

FindWay(oldmap,i-1,j);

if(oldmap[i-1][j+1]==0&

yes)/*判断右上方是否可以走*/

FindWay(oldmap,i-1,j+1);

if(oldmap[i+1][j-1]==0&

yes)/*判断左下方是否可以走*/

FindWay(oldmap,i+1,j-1);

if(oldmap[i][j-1]==0&

yes)/*判断左方是否可以走*/

FindWay(oldmap,i,j-1);

if(oldmap[i-1][j-1]==0&

yes)/*判断左上方是否可以走*/

FindWay(oldmap,i-1,j-1);

voidMapRand(int(*map)[N])/*开始的随机迷宫图*/

cleardevice();

/*清屏*/

randomize();

/*随机数发生器*/

if(i==0||i==N-1||j==0||j==N-1)/*最外面一圈为墙壁*/

if(i==1&

j==1||i==N-2&

j==N-2)/*出发点与终点表示为可走的*/

map[i][j]=0;

map[i][j]=random

(2);

/*其它的随机生成0或1*/

voidPrMap(int(*map)[N])/*输出迷宫图*/

if(map[i][j]==0)

/*白色为可走的路*/

bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);

setfillstyle(SOLID_FILL,GREEN);

/*绿色为墙壁*/

voidFind(void)/*找到通路*/

inti;

setfillstyle(SOLID_FILL,YELLOW);

/*黄色输出走的具体路线*/

wayn--;

for(i=wayn;

i>

=0;

i--)

bar(100+way[i][1]*15-6,50+way[i][0]*15-6,100+

way[i][1]*15+6,50+way[i][0]*15+6);

sleep

(1);

/*控制显示时间*/

bar(100+(N-2)*15-6,50+(N-2)*15-6,100+

(N-2)*15+6,50+(N-2)*15+6);

/*在目标点标红色*/

setcolor(RED);

settextstyle(0,0,2);

/*设置字体大小*/

outtextxy(130,400,"

Findaway!

Hahaqiangna!

///"

voidNotFind(void)/*没找到通路*/

Notfindaway!

zazhemebenne!

"

voidResult(void)/*结果处理*/

if(yes)/*如果找到*/

Find();

else/*没找到路*/

NotFind();

getch();

voidClose(void)/*图形关闭*/

closegraph();

_

六.设计结果说明

优点:

较清晰的划分了各个函数的作用。

界面视觉较好。

缺点:

程序方式单一,不能做到多种方式排序。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2