⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 模拟真人走迷宫的程序原代码(原创).htm

📁 经典小游戏,希望能给大家带来点好处
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                      <TD style="FONT-SIZE: 18px" vAlign=bottom align=middle 
                      width="85%" bgColor=#dddddd height=20><STRONG><FONT 
                        color=#003399 size=4><B>模拟真人走迷宫的程序原代码(原创) 
                        </B></FONT></STRONG></TD><BR></TR>
                    <TR>
                      <TD align=middle width="100%"><BR></TD></TR>
                    <TR>
                      <TD style="FONT-SIZE: 9pt" align=middle 
                        width="100%">发表日期:2004年12月22日&nbsp;&nbsp;&nbsp;&nbsp;作者:perfect.co&nbsp;&nbsp;已经有2827位读者读过此文</TD></TR>
                    <TR>
                      <TD align=middle width="100%"><!--下面的这一句是设置阅读文本区的宽度-->
                        <TABLE style="TABLE-LAYOUT: fixed" cellSpacing=0 
                        cellPadding=0 width="90%" align=center border=0>
                          <TBODY>
                          <TR>
                            <TD align=middle width="100%"></TD></TR>
                          <TR>
                            <TD style="WORD-WRAP: break-word"><FONT 
                              class=news><BR>
                              <P>/*如若转载请征求本人同意*/</P>
                              <P>/*此程序是我想象一个人实际走迷宫时的真实走法,并无什么确定的算法*/</P>
                              <P>&nbsp;</P>
                              <P>#include "graphics.h"<BR>#include 
                              "stdio.h"<BR>#define N 10<BR>#define M 
                              N*N-4+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*堆栈最大值,用来保存路口信息*/<BR>#define UP 1<BR>#define DOWN 
                              -1<BR>#define LEFT 2<BR>#define RIGHT 
                              -2<BR>#define UP_M 
                              man.x-1&gt;=0&amp;&amp;a[man.x-1][man.y]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*人当前位置的上一个位置*/<BR>#define DOWN_M 
                              man.x+1&lt;N&amp;&amp;a[man.x+1][man.y]<BR>#define 
                              LEFT_M 
                              man.y-1&gt;=0&amp;&amp;a[man.x][man.y-1]<BR>#define 
                              RIGHT_M 
                              man.y+1&lt;N&amp;&amp;a[man.x][man.y+1]<BR>#define 
                              ENTER 
                              3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*岔路的入口*/<BR>#define HAVE 
                              2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*某条路已经走过*/</P>
                              <P>&nbsp;struct cross{int up,down,left,right,x,y;} 
                              across,stack[M]={0};<BR>int top=1;<BR>int 
                              PX=70,PY=40;<BR>struct {int x,y,s;}man;</P>
                              <P>/*迷宫定义,1表示路,可自行更改迷宫的路径,可使全为1,看效果等*/<BR>int 
                              a[N][N]={0,0,0,1,1,0,1,1,1,0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              1,1,0,1,0,1,1,0,1,0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              0,1,1,1,1,0,1,1,1,1,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              1,0,1,0,1,1,1,0,1,0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              1,1,1,1,0,0,1,1,1,1,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              1,0,1,0,1,1,1,0,1,0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              0,0,1,1,1,0,1,1,1,0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              1,1,1,0,1,0,1,0,1,0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              0,0,1,0,1,1,1,0,1,1,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              0,1,1,0,0,1,0,0,0,0};</P>
                              <P><BR>void 
                              init_man()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*初始化人的状态,要求迷宫入口须在左侧*/<BR>{int 
                              i;setcolor(WHITE);<BR>&nbsp;for(i=0;i&lt;N;i++)<BR>&nbsp;&nbsp;&nbsp; 
                              if(a[i][0]) 
                              {man.x=i;man.y=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(a[i][1]) 
                              man.s=RIGHT;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(i+1&lt;N&amp;&amp;a[i+1][0]) 
                              man.s=DOWN;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(i-1&gt;=0&amp;&amp;a[i-1][0]) 
                              man.s=UP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else {outtextxy(500,300,"no 
                              way!");getch();exit(0);}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              return ;}<BR>if(i==N) {outtextxy(500,300,"no 
                              enter!");getch();exit(0);}<BR>}</P>
                              <P><BR>void 
                              show_map()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*显示迷宫*/<BR>{int i,j;</P>
                              <P>&nbsp;for(i=0;i&lt;N;i++)<BR>&nbsp;&nbsp;&nbsp; 
                              for(j=0;j&lt;N;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(a[i][j]) 
                              {setfillstyle(1,WHITE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              bar(PX+j*20,PY+i*20,PX+j*20+20,PY+i*20+20);}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else 
                              {setfillstyle(1,LIGHTBLUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              bar(PX+j*20,PY+i*20,PX+j*20+20,PY+i*20+20);}<BR>setcolor(BLACK);<BR>&nbsp;for(i=0;i&lt;N;i++)<BR>&nbsp;&nbsp;&nbsp; 
                              {line(PX+i*20,PY,PX+i*20,PY+20*N);<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              line(PX,PY+i*20,PX+20*N,PY+i*20);}<BR>}</P>
                              <P>void show_man(int 
                              color)<BR>{<BR>&nbsp;setfillstyle(1,color);<BR>&nbsp;bar(PX+man.y*20+5,PY+man.x*20+5,PX+man.y*20+20-5,PY+man.x*20+20-5);<BR>&nbsp;}</P>
                              <P>int 
                              cross()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*岔路判断*/<BR>{int count=0;<BR>&nbsp;if(UP_M) 
                              count++;<BR>&nbsp;if(DOWN_M) 
                              count++;<BR>&nbsp;if(LEFT_M) 
                              count++;<BR>&nbsp;if(RIGHT_M) 
                              count++;<BR>&nbsp;return count;}</P>
                              <P>void 
                              move()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*依据人的移动状态而移动到新位置*/<BR>{<BR>&nbsp;show_man(GREEN);<BR>&nbsp;switch(man.s)<BR>&nbsp;&nbsp;&nbsp; 
                              {case 
                              UP:man.x-=1;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              case 
                              DOWN:man.x+=1;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              case 
                              LEFT:man.y-=1;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              case 
                              RIGHT:man.y+=1;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>show_man(LIGHTRED);<BR>}</P>
                              <P>void 
                              back()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*回头走*/<BR>{switch(man.s)<BR>&nbsp;&nbsp;&nbsp; 
                              {case 
                              UP:man.s=DOWN;move();break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              case 
                              DOWN:man.s=UP;move();break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              case 
                              LEFT:man.s=RIGHT;move();break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              case 
                              RIGHT:man.s=LEFT;move();break;<BR>&nbsp;&nbsp;&nbsp; 
                              }<BR>}</P>
                              <P>void 
                              go_on()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*为通路且不是岔路时,继续向前走*/<BR>{switch(man.s)<BR>&nbsp;&nbsp;&nbsp; 
                              {case UP:if(UP_M) 
                              move();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(LEFT_M) 
                              {man.s=LEFT;move();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(RIGHT_M) 
                              {man.s=RIGHT;move();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; case 
                              DOWN:if(DOWN_M) 
                              move();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else 
                              if(LEFT_M){man.s=LEFT;move();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(RIGHT_M) 
                              {man.s=RIGHT;move();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; case 
                              LEFT:if(LEFT_M) 
                              move();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(UP_M) 
                              {man.s=UP;move();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(DOWN_M) 
                              {man.s=DOWN;move();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; case 
                              RIGHT:if(RIGHT_M) 
                              move();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(UP_M) 
                              {man.s=UP;move();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(DOWN_M) 
                              {man.s=DOWN;move();}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp; }<BR>}</P>
                              <P>int 
                              xin()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*判断人当前位置是否是新岔路口*/<BR>{int 
                              i;<BR>&nbsp;for(i=1;i&lt;top;i++)<BR>&nbsp;&nbsp;&nbsp; 
                              if(man.x==stack[i].x&amp;&amp;man.y==stack[i].y) 
                              return i;<BR>&nbsp;return 0;<BR>}</P>
                              <P>void 
                              copy()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*拷贝岔路信息到across结构体*/<BR>{across.x=man.x;<BR>&nbsp;across.y=man.y;<BR>&nbsp;if(UP_M==1) 
                              across.up=1;<BR>&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              across.up=0;<BR>&nbsp;if(DOWN_M==1) 
                              across.down=1;<BR>&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              across.down=0;<BR>&nbsp;if(LEFT_M==1) 
                              across.left=1;<BR>&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              across.left=0;<BR>&nbsp;if(RIGHT_M==1) 
                              across.right=1;<BR>&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              across.right=0;<BR>}</P>
                              <P><BR>void 
                              rukou()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*为岔路设置一个入口*/<BR>{switch(man.s)<BR>&nbsp;&nbsp;&nbsp; 
                              {case 
                              UP:across.down=ENTER;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              case 
                              DOWN:across.up=ENTER;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              case 
                              LEFT:across.right=ENTER;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              case 
                              RIGHT:across.left=ENTER;break;<BR>&nbsp;&nbsp;&nbsp; 
                              }<BR>}</P>
                              <P>void xuanlu(struct cross 
                              *p)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*在岔路时,为人选一条路行走*/<BR>{switch(man.s)<BR>&nbsp;&nbsp;&nbsp; 
                              {case UP:if(p-&gt;up==1) 
                              p-&gt;up=HAVE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(p-&gt;left==1) 
                              {man.s=LEFT;p-&gt;left=HAVE;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(p-&gt;right==1) 
                              {man.s=RIGHT;p-&gt;right=HAVE;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else 
                              {man.s=DOWN;p-&gt;down=HAVE;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; case 
                              DOWN:if(p-&gt;down==1) 
                              p-&gt;down=HAVE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(p-&gt;left==1) 
                              {man.s=LEFT;p-&gt;left=HAVE;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(p-&gt;right==1) 
                              {man.s=RIGHT;p-&gt;right=HAVE;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else 
                              {man.s=UP;p-&gt;up=HAVE;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; case 
                              LEFT:if(p-&gt;left==1) 
                              p-&gt;left=HAVE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(p-&gt;up==1) 
                              {man.s=UP;p-&gt;up=HAVE;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else if(p-&gt;down==1) 
                              {man.s=DOWN;p-&gt;down=HAVE;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              else 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -