电脑鼠走迷宫仿真程序

上传人:kms****20 文档编号:40494642 上传时间:2018-05-26 格式:DOC 页数:39 大小:96KB
返回 下载 相关 举报
电脑鼠走迷宫仿真程序_第1页
第1页 / 共39页
电脑鼠走迷宫仿真程序_第2页
第2页 / 共39页
电脑鼠走迷宫仿真程序_第3页
第3页 / 共39页
电脑鼠走迷宫仿真程序_第4页
第4页 / 共39页
电脑鼠走迷宫仿真程序_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《电脑鼠走迷宫仿真程序》由会员分享,可在线阅读,更多相关《电脑鼠走迷宫仿真程序(39页珍藏版)》请在金锄头文库上搜索。

1、电脑鼠走迷宫仿真程序电脑鼠走迷宫仿真程序/*程序名称: 电脑鼠模拟环境 V5.0 功能描述: 电脑鼠走迷宫的模拟软件,探索迷宫速度超快,迅速找到终点;注意:迷宫中心是终点。本程序使用 Win-TC 编译,图形界面。 下载本程序后将后缀名改为.c,即可在 Win-TC 下编译。*/#include #include #include #include typedef unsigned long int uint32;#define closegr closegraph#define ESC 0x011b#define BLANK 14624#define UP 0x01 /*上有墙*/#defi

2、ne DOWN 0x02#define LEFT 0x04#define RIGHT 0x08#define X 25 /* 迷宫单位规格,实物 18 */*#define W 20 迷宫宽度 WIDE,实物 16.8 */*#define L 25 迷宫长度 LENGTH,实物 18 */#define N 16 /* 迷宫规格 1616,实物同 */#define Xfore 120 /* 迷宫 x 离屏幕边缘的距离 */#define Yfore 40 /* 迷宫 y 离屏幕边缘的距离 */#define menuWidth 120 /*菜单的宽度*/#define menuHight

3、25 /*菜单的高度*/*#define Z 1.5 屏幕放大 1.5 倍 */int first=1;int mousex,mousey; /*鼠标的坐标 */volatile int xnow=15,ynow=0; /*电脑鼠的当前 x,y 坐标*/int stepnum=0;int start=0;int temptime=0;uint32 gezi1616;/*每个格子的信息存储器,16 个 x16 个 y,用一个 32 位二进制数的后四位表示墙壁信息(只用这 4 位)*/* 0001=UP0010=DOWN0100=LEFT1000=RIGHT将这些数字与 gezi的值进行 /*用于

4、电老鼠在循迹时接收 gezi 传过来的墙壁信息,并保存。(只用后四位,探测后的墙壁信息供 shortroad分析)*/uint32 shortroad1616;/*存储等高线值*/uint32 road1616;/*电脑鼠探测到的区域*/int menuXa=0,menuYa1=65,menuYa2=100,menuYa3=200;/*左侧菜单的坐标*/int menu1=1,menu2=0;/*初始化菜单有效性,menu1 为 1(有效),menu2 为 0(无效)*/union REGS regs; /*鼠标中断*/* BGI 初始化函数 initgr*/void initgr(void)

5、int gd = DETECT, gm = 0; /* 和 gd = VGA,gm = VGAHI 是同样效果 */registerbgidriver(EGAVGA_driver);/*注册 BGI 驱动后可以不需要.BGI 文件的支持运行*/initgraph(setbkcolor(BLACK);/*鼠标函数 drawmouse*/void drawmouse(int x,int y,int fl)int *buf;int size;if(x=630)x=630;if(yplace)/*在第 n 位开始读 4 个位上 0、1 的子函数 readng;返回值为读取的 4 个位上的值*/uint

6、32 read4(int beginplace,uint32 it)return(itbeginplace)/* 检查(后四位)有无墙壁的子函数 seewall;返回值为 UP DOWN RIGHT LEFT*/int seewall(uint32 it,int which)if(which=UP)if(it else return(0);if(which=DOWN)if(it else return(0);if(which=LEFT)if(it else return(0);if(which=RIGHT)if(it else return(0);/* ifbranch():查询该格点是否为分

7、支点,是返回 1,否返回 0*/int ifbranch(it)int nowalls=0;if(0=read(0,it) nowalls+;if(0=read(1,it) nowalls+;if(0=read(2,it) nowalls+;if(0=read(3,it) nowalls+;if(nowalls1)return(1);elsereturn(0);/* 检测当前格子是否还有未探测的分支,若有就返回二进制相应位上的 1,没有返回 0*/uint32 havenewroad(uint32 it)/*返回值说明:二进制第一位上的 1A 墙,第二位上的 1B墙第三位上的 1C 墙,第四位

8、上的 1D墙(第 0 位上的 1 不用)*/*备注:无需预防迷宫边界格点+-会超出迷宫的情况,因为边界点使0=read(x,it)不成立*/uint32 newroad=0;if(0=read(0,it) x-)for(y=0;y=1)if(seewall(gezixy,UP)=UP)heng(x,y-1,0);break;/*注意 break的位置*/*else:第 0 行 或 上墙已开的,改为开下墙(无break;)*/case 2:/*开下墙*/if(y0)if(seewall(gezixy,LEFT)=LEFT)shu(x-1,y,0);break;/*else:第 0 列 或 左墙已

9、开的,改为开下墙(无break;)*/case 4:/*开右墙*/if(x=8 else/*下半区*/if(0=step(1,it)if(0=step(3,it)if(0=step(2,it)step(4,it);else if(xnow=8)/*左下角 1/4 区域*/if(7-xnow=ynow-8)/*上半区*/if(0=step(4,it)if(0=step(1,it)if(0=step(2,it)step(3,it);else/*下半区*/if(0=step(1,it)if(0=step(4,it)if(0=step(3,it)step(2,it);/* 寻找最短路径 getshor

10、t()*/void getshort(void)char string10;int x,y,xx,yy;int ups=255,downs=255,lefts=255,rights=255;/*四个存储可能的等高线值的变量*/x=15;y=0;/*回到起点*/shortroad150=0;road150=gezi150;setcolor(BLUE);sprintf(string,“%d“,shortroadxy);setfillstyle(1,LIGHTGREEN);bar(Xfore+x*X+5,Yfore+y*X+9,Xfore+x*X+X-5,Yfore+y*X+X-8);outtext

11、xy(Xfore+x*X+5,Yfore+y*X+10,string);/*printf(“%d %d %d %d;“,x,y,(0=seewall(roadxy,DOWN),(shortroadxy+1shortroadxy);*/for(xx=15;xx=0;xx-)for(yy=0;yyshortroadxy)/*上面无墙,且等高值大于本 gezi*/shortroadxy-1=shortroadxy+1;/*等高值上走*/y-;sprintf(string,“%d“,shortroadxy); bar(Xfore+x*X+5,Yfore+y*X+9,Xfore+x*X+X-5,Yfore+y*X+X-8);outtextxy(Xfore+x*X+5,Yfore+y*X+10,string);x=xx;y=yy;while(0=seewall(roadxy,DOWN) */shor

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号