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

📄 拼图游戏.htm

📁 经典小游戏,希望能给大家带来点好处
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                      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%">发表日期:2003年10月27日&nbsp;&nbsp;出处:源创&nbsp;&nbsp;作者:litigo&nbsp;&nbsp;已经有2787位读者读过此文</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>/*游戏名智力拼图*/<BR>/*在tc3.0++下运行*/<BR>/*游戏中保存与空格相邻方格的位置我用的是单循环键表,其实普通的键表就可以了*/</P>
                              <P>#include&lt;stdlib.h&gt;<BR>#include&lt;dos.h&gt;<BR>#include&lt;conio.h&gt;<BR>#include&lt;bios.h&gt;<BR>#define 
                              KEY_ENTER 0x1c0d<BR>#define KEY_ESC 
                              0x11b<BR>#define KEY_UP 0x4800<BR>#define KEY_DOWN 
                              0x5000<BR>#define KEY_LEFT 0x4b00<BR>#define 
                              KEY_RIGHT 0x4d00</P>
                              <P><BR>//定义核心数据<BR>typedef struct attr<BR>&nbsp; 
                              {<BR>&nbsp;&nbsp; int a[4][4];<BR>&nbsp;&nbsp; int 
                              b[4][4];<BR>&nbsp; }ATTR;<BR>ATTR rect;</P>
                              <P>struct 
                              blank<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              {<BR>&nbsp;int x, y;<BR>&nbsp;struct blank 
                              *next;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              };<BR>struct blank *head;</P>
                              <P>int 
                              xpos=39,ypos=13,xago,yago,xb=39,yb=13;&nbsp;&nbsp; 
                              <BR>&nbsp;&nbsp; 
                              /*(xpos,ypos)表示当前位置,(xago,yago)表示上次位置,(xb,yb)表示空格的位置*/</P>
                              <P>void setmode();<BR>void inita();<BR>void 
                              initb();<BR>void drawpic();<BR>void 
                              drawgoalpic();<BR>void puthelp();<BR>void 
                              establish();<BR>void putrect();<BR>void 
                              recover();<BR>int judge(int *,int *);<BR>int 
                              win();<BR>int&nbsp; search(int *,int *);<BR>void 
                              freemem();</P>
                              <P>void main()<BR>{<BR>int 
                              key,t,i,j;<BR>textbackground(BLACK);<BR>clrscr();<BR>setmode();<BR>inita();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*初始化a数组*/<BR>initb();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*初始化b数组*/<BR>drawpic();&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*画开始时游戏的画面*/<BR>drawgoalpic();<BR>puthelp();<BR>head=(struct 
                              blank * )malloc(sizeof (struct 
                              blank));<BR>head-&gt;x=0;head-&gt;y=0;<BR>head-&gt;next=head;<BR>establish();&nbsp;&nbsp; 
                              /*创建链表记录与方格相邻方格的位置*/<BR>do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*处理按键*/<BR>&nbsp;&nbsp;&nbsp; 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              key=bioskey(0);<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              xago=xpos;yago=ypos;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              switch(key)<BR>&nbsp; {<BR>&nbsp;&nbsp; case 
                              KEY_UP:<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp; 
                              ypos--;<BR>&nbsp;&nbsp;&nbsp; 
                              if(judge(&amp;xpos,&amp;ypos))&nbsp;&nbsp;&nbsp; 
                              /*如果光标位置超出图形范围,则不执行下出*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              {ypos++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              continue;}<BR>&nbsp;&nbsp;&nbsp; 
                              putrect();<BR>&nbsp;&nbsp;&nbsp; 
                              recover();<BR>&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp; case 
                              KEY_DOWN:{<BR>&nbsp;&nbsp;&nbsp; 
                              ypos++;<BR>&nbsp;&nbsp;&nbsp; 
                              if(judge(&amp;xpos,&amp;ypos))&nbsp;&nbsp;&nbsp; 
                              /*如果光标位置超出图形范围,则不执行下出*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              {ypos--;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              continue;}<BR>&nbsp;&nbsp;&nbsp; 
                              putrect();<BR>&nbsp;&nbsp;&nbsp; 
                              recover();<BR>&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; 
                              case KEY_LEFT:{<BR>&nbsp;&nbsp;&nbsp; 
                              xpos-=3;<BR>&nbsp;&nbsp;&nbsp; 
                              if(judge(&amp;xpos,&amp;ypos))&nbsp;&nbsp;&nbsp; 
                              /*如果光标位置超出图形范围,则不执行下出*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              {xpos+=3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              continue;}<BR>&nbsp;&nbsp;&nbsp; 
                              putrect();<BR>&nbsp;&nbsp;&nbsp; 
                              recover();<BR>&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; 
                              case KEY_RIGHT:{<BR>&nbsp;&nbsp;&nbsp; 
                              xpos+=3;<BR>&nbsp;&nbsp;&nbsp; 
                              if(judge(&amp;xpos,&amp;ypos))&nbsp;&nbsp;&nbsp; 
                              /*如果光标位置超出图形范围,则不执行下出*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              {xpos-=3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              continue;}<BR>&nbsp;&nbsp;&nbsp; 
                              putrect();<BR>&nbsp;&nbsp;&nbsp; 
                              recover();<BR>&nbsp;&nbsp;&nbsp; 
                              break;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; 
                              case KEY_ENTER:{<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              if(!search(&amp;xpos,&amp;ypos)||rect.b[ypos-10][xpos/3-10]=='B')&nbsp; 
                              continue;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              gotoxy(xb,yb);<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              textattr(RED*16|GREEN);<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              cprintf(" %c 
                              ",rect.a[ypos-10][xpos/3-10]);<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              gotoxy(xpos,ypos);<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              textattr(BLUE*16|GREEN);<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              cprintf(" %c ",32);<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              rect.b[ypos-10][xpos/3-10]='B'; 
                              /*改变(xpos,ypos)与(xb,yb)两点的属性*/<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              rect.b[yb-10][xb/3-10]='P';<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              t=rect.a[ypos-10][xpos/3-10];<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              rect.a[ypos-10][xpos/3-10]=rect.a[yb-10][xb/3-10];<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              rect.a[yb-10][xb/3-10]=t;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              t=xpos;xpos=xb;xb=t;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              t=ypos;ypos=yb;yb=t; 
                              /*交换(xpos,ypos)与(xb,yb)的位置*/<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              gotoxy(1,1);<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              freemem();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*由于空格位置的改变,与空格相邻方格的位置也要改变*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*先释放链表占用的内存,再重新创建链表记录与空格相邻方格的位置*/<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              establish();<BR>&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp; 
                              }<BR>if(win())<BR>&nbsp;&nbsp;&nbsp; 
                              {<BR>&nbsp;&nbsp;&nbsp; 
                              gotoxy(20,7);<BR>&nbsp;&nbsp;&nbsp; cprintf("well 
                              done ,yon have completed the 
                              misson");<BR>&nbsp;&nbsp;&nbsp; 
                              gotoxy(19,7);<BR>&nbsp;&nbsp;&nbsp; 
                              }<BR>}while(key!=KEY_ESC);<BR>free(head);<BR>}</P>
                              <P>void 
                              setmode()<BR>{<BR>_AL=3;<BR>_AH=0;<BR>geninterrupt(0x10);<BR>}</P>
                              <P>void initb()<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp; 
                              int i,j;<BR>&nbsp;&nbsp; 
                              for(i=0;i&lt;4;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              for(j=0;j&lt;4;j++)<BR>&nbsp;&nbsp;&nbsp; 
                              rect.b[i][j]='P';<BR>&nbsp;&nbsp; 
                              rect.b[3][3]='B';<BR>&nbsp; }</P>
                              <P>void inita()<BR>&nbsp;&nbsp; 
                              {<BR>&nbsp;&nbsp;&nbsp; int 
                              n,i,j,c[4][4]={0};<BR>&nbsp;&nbsp;&nbsp; 
                              c[3][3]=1;<BR>&nbsp;&nbsp;&nbsp; long int 
                              t;<BR>&nbsp;&nbsp;&nbsp; 
                              srand(time(&amp;t));<BR>&nbsp;&nbsp;&nbsp; 
                              for(n=1;n&lt;=15;n++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              do<BR>&nbsp; {<BR>&nbsp; i=random(4);<BR>&nbsp; 
                              j=random(4);<BR>&nbsp; 
                              }while(c[i][j]==1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              rect.a[i][j]=n+64;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              c[i][j]=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }<BR>&nbsp;&nbsp; }</P>
                              <P>void drawpic()<BR>&nbsp;&nbsp;&nbsp; 
                              {<BR>&nbsp;&nbsp;&nbsp; int 
                              j;<BR>&nbsp;&nbsp;&nbsp; 
                              textattr(BLUE*16|GREEN);<BR>&nbsp;&nbsp;&nbsp; 
                              gotoxy(30,10);</P>
                              <P>&nbsp;&nbsp;&nbsp; 
                              for(j=0;j&lt;4;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              cprintf(" %c 
                              ",rect.a[0][j]);<BR>&nbsp;&nbsp;&nbsp; 
                              gotoxy(30,11);<BR>&nbsp;&nbsp;&nbsp; 
                              for(j=0;j&lt;4;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              cprintf(" %c 
                              ",rect.a[1][j]);<BR>&nbsp;&nbsp;&nbsp; 
                              gotoxy(30,12);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              for(j=0;j&lt;4;j++)<BR>&nbsp; cprintf(" %c 
                              ",rect.a[2][j]);<BR>&nbsp;&nbsp;&nbsp; 
                              gotoxy(30,13);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              for(j=0;j&lt;3;j++)<BR>&nbsp; cprintf(" %c 
                              ",rect.a[3][j]);<BR>&nbsp;&nbsp;&nbsp; 
                              textattr(RED*16|GREEN);<BR>&nbsp;&nbsp;&nbsp; 
                              cprintf(" %c ",32);<BR>&nbsp;&nbsp;&nbsp; 
                              gotoxy(1,1);<BR>&nbsp;&nbsp;&nbsp; }</P>
                              <P>void drawgoalpic()<BR>&nbsp;&nbsp;&nbsp; 
                              {<BR>&nbsp;&nbsp;&nbsp; int 
                              i,j,n=65;<BR>&nbsp;&nbsp;&nbsp; 
                              textattr(BLUE*16|GREEN);<BR>&nbsp;&nbsp;&nbsp; 
                              for(i=0;i&lt;4;i++)<BR>&nbsp;{<BR>&nbsp; 
                              gotoxy(10,10+i);<BR>&nbsp; 
                              for(j=0;j&lt;4;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              cprintf(" %c 
                              ",n++);<BR>&nbsp;}<BR>&nbsp;&nbsp;&nbsp; 
                              gotoxy(19,13);<BR>&nbsp;&nbsp;&nbsp; cprintf(" %c 
                              ",32);<BR>&nbsp;&nbsp;&nbsp; }</P>
                              <P>int judge(int *xp,int *yp)&nbsp; 
                              /*判断当前光标是否超出图形范围,1表示超出,0表示没有超出*/<BR>&nbsp;&nbsp; 
                              {<BR>&nbsp;&nbsp;&nbsp; 
                              if(*xp&lt;30||*xp&gt;39||*yp&lt;10||*yp&gt;13)&nbsp; 
                              return 1;<BR>&nbsp;&nbsp;&nbsp; else return 
                              0;<BR>&nbsp;&nbsp;&nbsp; }</P>
                              <P>void insert(int *p1,int 
                              *p2)<BR>&nbsp;&nbsp;&nbsp; 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp; struct blank 
                              *p;<BR>&nbsp;&nbsp;&nbsp;&nbsp; p=(struct 
                              blank*)malloc(sizeof(struct 
                              blank));<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              p-&gt;x=*p1;p-&gt;y=*p2;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              p-&gt;next=head-&gt;next;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
                              head-&gt;next=p;head=p;<BR>&nbsp;&nbsp;&nbsp; 
}</P>
                              <P>void establish()&nbsp;&nbsp; 
                              /*用链表记录与方格相邻方格位置,与空格相邻的方格最多只有四个*/<BR>&nbsp;&nbsp;&nbsp; 
                              {<BR>&nbsp;&nbsp;&nbsp; int 
                              xbup,ybup,xbdown,ybdown,xbleft,ybleft,xbright,ybright;<BR>&nbsp;&nbsp;&nbsp; 
                              xbup=xb;ybup=yb-1;xbdown=xb;ybdown=yb+1;<BR>&nbsp;&nbsp;&nbsp; 
                              xbleft=xb-3;ybleft=yb;xbright=xb+3;ybright=yb;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*先在内存中分配空间给结点。并把零值赋给它,便于插入链表记录与空格相邻*/</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              /*的方格位置,但是这个内存空就不记录方格位置*/<BR>&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

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