基于C语言推箱子游戏设计c语言毕业论文文

C语言实现的推箱子游戏_51自学网
C语言实现的推箱子游戏
/* 这是彭搏同学的推箱子游戏,大家试试玩,谁有更好的Idea?*/ #includestdio.h #includebios.h #define LEFT 75 #define RIGHT 77 #define UPPER 72 #define
/* 这是彭搏同学的推箱子游戏,大家试试玩,谁有更好的Idea?*/
#include&stdio.h&
#include&bios.h&
#define LEFT 75
#define RIGHT 77
#define UPPER 72
#define DOWN 80
#define ESC 27
struct Boxss /*定义箱子结构体,其中包含坐标属性*/
union keyboard /*定义读取键盘码的共用体类型*/
unsigned int iKeyI
char chKeyBit[2];
int fnGetKey(void)  /*定义读取键盘码的函数*/
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/
while(bioskey(1)==0); /*检测用户是否按键*/
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]);  /*返回ASCII码或扩充码*/
void main()
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
struct Boxss Box[4]; /*定义箱子数量*/
int chMap[10][10]={   /*用二维数组定义地图*/
                  {0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
                  {0,1,0,0,0,0,1,1,1,0},
                  {0,1,0,2,0,0,1,0,1,0},
                  {0,1,0,1,0,0,1,0,1,0},
                  {0,1,1,1,0,0,1,0,1,0},
                  {0,1,0,0,0,0,1,0,1,0},
                  {0,1,1,1,1,1,1,0,1,0},
                  {0,1,0,1,0,0,0,0,2,0},
                  {0,2,0,1,1,1,1,2,0,0},
                  {0,0,0,0,0,0,0,0,0,0},
                  };
Box[0].x=13; /*定义箱子的坐标属性*/
Box[1].x=11;
Box[2].x=14;
Box[3].x=18;
Box[0].y=8;
Box[1].y=7;
Box[2].y=13;
Box[3].y=7;
  while(1) /*反复进行求移动的坐标运算*/
  for(i=0;i&10;i++) /*输出新地图(刷新地图)*/
    gotoxy(10,5+i);
    for(j=0;j&10;j++)
      {
      if(chMap[i][j]==0)
        printf(&#&);
      if(chMap[i][j]==1)
        printf(& &);
      if(chMap[i][j]==2)
        printf(&X&);
      }
  j=0; /*判断是否所有箱子都在目标坐标上*/
  for(i=0;i&4;i++)
    if(chMap[Box[i].y-5][Box[i].x-10]==2)
    j++;
  if(j==4) /*如果所有箱子都就位输出&YOU WIN!&退出*/
      {
      clrscr();
      printf(&You Win!&);
     
      }
  for(i=0;i&4;i++) /*在起始(或移动后)的坐标输出箱子*/
    gotoxy(Box[i].x,Box[i].y);
    printf(&0&);
  gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
  printf(&*\b&);
  tx=x; /*记录本次移动前的坐标*/
  iKey=fnGetKey();
  if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
    x--;
  if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
    x++;
  if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
    y--;
  if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
    y++; /*输入ESC退出并输出&YOU LOST&*/
  if(iKey==ESC)
  clrscr();
  printf(&You Lost&);
  for(i=0;i&4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
    if(Box[i].x==x&&Box[i].y==y)
      {
      Box[i].x+=(x-tx);
      Box[i].y+=(y-ty);
    if(chMap[Box[i].y-5][Box[i].x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
      {
      Box[i].x-=(x-tx);
      Box[i].y-=(y-ty);
      x=
      y=
      }
     
      }
  clrscr();
(责任编辑:admin)
------分隔线----------------------------
问题 : C语言的书籍的附录都要说一个问题,就是优先性和结合方向。 我的理解是这些是...
clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #includestdio.h 定义函数...
为了调试处理单色位图的程序写的一个小函数,还不错哦,新手朋友大家一起来看看吧。 i...
用C语言实现一个2维四叉树quadtree,具有一定的实际意义。你可以把几何图形的索引(用...
像PHP和perl一样,MySQL也提供的C语言使用的API. C代码的API是随MySQL一起发布的. 它包...
ANSI C中的整型升级 char,short int或者int型位段(bit-field),包括它们的有符号或...C语言课程设计--推箱子_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
C语言课程设计--推箱子
用​纯​c​写​的​推​箱​子​,​能​在​v​c上​运​行
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩40页未读,继续阅读
你可能喜欢当前位置 &
一个C语言编写的推箱子游戏
&&&&&&&&&&&&&&& /* 一个C语言编写的推箱子游戏源代码 */&&&&&&&&&&&& /* 本游戏是字符模式的,请不要在中文dos下运行。本游戏在TURBO C下调试通过 */#include &dos.h&#include &stdio.h&#include &ctype.h&#include &conio.h&#include &bios.h&#include &alloc.h&
/*& 定义二维数组ghouse来记录屏幕上各点的状态,其中:0表示什么都没有,'b'表示箱子,'w'表示墙壁,'m'表示目的地,'i'表示箱子在目的地。 */char ghouse[20][20];
/*& 以下函数为直接写屏函数,很酷的函数哦!是我朋友告诉我的。 */char far *screen=(char far* )0xb8000000;void putchxy(int y,int x,char ch,char fc,char bc){& screen[(x*160)+(y&&1)+0]=& screen[(x*160)+(y&&1)+1]=(bc*16)+}
/* 定义判定是否胜利的数据结构 */typedef struct winer {& int x,y;& struct winer *p;}
/* 箱子位置的数据结构 */typedef struct boxs {&int x,y;&struct boxs *}
/* 在特定的坐标上画墙壁并用数组记录状态的函数 */void printwall(int x,int y){&&& putchxy(y-1,x-1,219,GREEN,BLACK);&&& ghouse[x][y]='w';}
/* 在特定的坐标上画箱子并用数组记录状态的函数 */void printbox(int x,int y){&& putchxy(y-1,x-1,10,WHITE,BLACK);&& ghouse[x][y]='b';}
/* 在特定的坐标上画目的地并用数组记录状态的函数 */void printwhither1(int x,int y,winer& **win,winer **pw){&& winer *&& putchxy(y-1,x-1,'*',YELLOW,BLACK);&& ghouse[x][y]='m';&& if(*win==NULL)&& {&&&& *win=*pw=qw=(winer* )malloc(sizeof(winer));&&&& (*pw)-&x=x;(*pw)-&y=y;(*pw)-&p=NULL;&& }&& else&& {&&&& qw=(winer* )malloc(sizeof(winer));&&&& qw-&x=x;qw-&y=y;(*pw)-&p=(*pw)=qw-&p=NULL;&& }}
/* 在特定的坐标上画目的地并用数组记录状态的函数 */void printwhither(int x,int y){&& putchxy(y-1,x-1,'*',YELLOW,BLACK);&& ghouse[x][y]='m';}/* 在特定的坐标上画人的函数 */void printman(int x,int y){&& gotoxy(y,x);&& _AL=02;_CX=01;_AH=0&& geninterrupt(0x10);}
/* 在特定的坐标上画箱子在目的地上并用数组记录状态的函数 */void printboxin(int x,int y){& putchxy(y-1,x-1,10,YELLOW,BLACK);& ghouse[x][y]='i';}
/* 初始化函数,初始化数组和屏幕 */void init(){& int i,j;& for(i=0;i&20;i++)&&& for(j=0;j&20;j++)&&&& ghouse[i][j]=0;&&&&& _AL=3;&&&&& _AH=0;&&&&& geninterrupt(0x10);&&&&&& gotoxy(40,4);& printf("Welcome to come box world!");&&&&&& gotoxy(40,6);&&&&&&&& printf("Press up,down,left,right to play.");&&&&&& gotoxy(40,8);&&&&&&&& printf("Press Esc to quit it.");&&&&&& gotoxy(40,10);& printf("Press space to reset the game.");&&&&&& gotoxy(40,12);&&&&&&&& printf("Producer : wangdehao.");&&&&&& gotoxy(40,14);&&&&&&&& printf("Mar. 30th 2003.");}
/* 第一关的图象初始化 */winer *inithouse1(){& int x,y;& winer *win=NULL,*& for(x=1,y=5;y&=9;y++)&&&& printwall(x+4,y+10);& for(y=5,x=2;x&=5;x++)&&&& printwall(x+4,y+10);& for(y=9,x=2;x&=5;x++)&&&& printwall(x+4,y+10);& for(y=1,x=3;x&=8;x++)&&&& printwall(x+4,y+10);& for(x=3,y=3;x&=5;x++)&&&&&& printwall(x+4,y+10);& for(x=5,y=8;x&=9;x++)&&&&&& printwall(x+4,y+10);& for(x=7,y=4;x&=9;x++)&&&&&& printwall(x+4,y+10);& for(x=9,y=5;y&=7;y++)&&&&&& printwall(x+4,y+10);& for(x=8,y=2;y&=3;y++)&&&&&& printwall(x+4,y+10);& printwall(5+4,4+10);& printwall(5+4,7+10);& printwall(3+4,2+10);& printbox(3+4,6+10);& printbox(3+4,7+10);& printbox(4+4,7+10);& printwhither1(4+4,2+10,&win,&pw);& printwhither1(5+4,2+10,&win,&pw);& printwhither1(6+4,2+10,&win,&pw);& printman(2+4,8+10);}
/* 第三关的图象初始化 */winer *inithouse3(){int x,y;&winer *win=NULL,*&for(x=1,y=2;y&=8;y++)&&& printwall(x+4,y+10);&for(x=2,y=2;x&=4;x++)&&& printwall(x+4,y+10);&for(x=4,y=1;y&=3;y++)&&& printwall(x+4,y+10);&for(x=5,y=1;x&=8;x++)&&& printwall(x+4,y+10);&for(x=8,y=2;y&=5;y++)&&& printwall(x+4,y+10);&for(x=5,y=5;x&=7;x++)&&& printwall(x+4,y+10);&for(x=7,y=6;y&=9;y++)&&& printwall(x+4,y+10);&for(x=3,y=9;x&=6;x++)&&& printwall(x+4,y+10);&for(x=3,y=6;y&=8;y++)&&& printwall(x+4,y+10);&printwall(2+4,8+10);&printwall(5+4,7+10);&printbox(6+4,3+10);&printbox(4+4,4+10);&printbox(5+4,6+10);& printwhither1(2+4,5+10,&win,&pw);& printwhither1(2+4,6+10,&win,&pw);& printwhither1(2+4,7+10,&win,&pw);&printman(2+4,4+10);}
/* 第二关的图象初始化 */winer *inithouse2(){int x,y;&winer *win=NULL,*&for(x=1,y=4;y&=7;y++)&&& printwall(x+4,y+10);&for(x=2,y=2;y&=4;y++)&&& printwall(x+4,y+10);&for(x=2,y=7;x&=4;x++)&&& printwall(x+4,y+10);&for(x=4,y=1;x&=8;x++)&&& printwall(x+4,y+10);&for(x=8,y=2;y&=8;y++)&&& printwall(x+4,y+10);&for(x=4,y=8;x&=8;x++)&&& printwall(x+4,y+10);&for(x=4,y=6;x&=5;x++)&&& printwall(x+4,y+10);&for(x=3,y=2;x&=4;x++)&&& printwall(x+4,y+10);&for(x=4,y=4;x&=5;x++)&&& printwall(x+4,y+10);&printwall(6+4,3+10);&printbox(3+4,5+10);&printbox(6+4,6+10);&printbox(7+4,3+10);& printwhither1(5+4,7+10,&win,&pw);& printwhither1(6+4,7+10,&win,&pw);& printwhither1(7+4,7+10,&win,&pw);&printman(2+4,6+10);}
/* 第四关的图象初始化 */winer *inithouse4(){& int x,y;& winer *win=NULL,*& for(x=1,y=1;y&=6;y++)&&&& printwall(x+4,y+10);& for(x=2,y=7;y&=8;y++)&&&& printwall(x+4,y+10);& for(x=2,y=1;x&=7;x++)&&&& printwall(x+4,y+10);& for(x=7,y=2;y&=4;y++)&&&& printwall(x+4,y+10);& for(x=6,y=4;y&=9;y++)&&&& printwall(x+4,y+10);& for(x=3,y=9;x&=5;x++)&&&& printwall(x+4,y+10);& for(x=3,y=3;y&=4;y++)&&&& printwall(x+4,y+10);& printwall(3+4,8+10);& printbox(3+4,5+10);& printbox(4+4,4+10);& printbox(4+4,6+10);& printbox(5+4,5+10);& printbox(5+4,3+10);& printwhither1(3+4,7+10,&win,&pw);& printwhither1(4+4,7+10,&win,&pw);& printwhither1(5+4,7+10,&win,&pw);& printwhither1(4+4,8+10,&win,&pw);& printwhither1(5+4,8+10,&win,&pw);&printman(2+4,2+10);}
/* 移动在空地上的箱子到空地上 *
/movebox(int x,int y,char a){& switch(a)& {&&& case 'u':ghouse[x-1][y]=0;printf(" ");&&&&& printbox(x-2,y);printman(x-1,y);&&&&&&&&&&&& ghouse[x-2][y]='b';&&& case 'd':ghouse[x+1][y]=0;printf(" ");&&&&& printbox(x+2,y);printman(x+1,y);&&&&&&&&&&&& ghouse[x+2][y]='b';&&& case 'l':ghouse[x][y-1]=0;printf(" ");&&&&& printbox(x,y-2);printman(x,y-1);&&&&&&&&&&&& ghouse[x][y-2]='b';&&& case 'r':ghouse[x][y+1]=0;printf(" ");&&&&& printbox(x,y+2);printman(x,y+1);&&&&&&&&&&&& ghouse[x][y+2]='b';&&& default:& }}
/* 移动在目的地上的箱子到空地上 */moveinbox(int x,int y,char a){& switch(a)& {&&& case 'u':ghouse[x-1][y]='m';printf(" ");&&&&& printbox(x-2,y);printman(x-1,y);&&&&&&&&&&&& ghouse[x-2][y]='b';&&& case 'd':ghouse[x+1][y]='m';printf(" ");&&&&& printbox(x+2,y);printman(x+1,y);&&&&&&&&&&&& ghouse[x+2][y]='b';&&& case 'l':ghouse[x][y-1]='m';printf(" ");&&&&& printbox(x,y-2);printman(x,y-1);&&&&&&&&&&&& ghouse[x][y-2]='b';&&& case 'r':ghouse[x][y+1]='m';printf(" ");&&&&& printbox(x,y+2);printman(x,y+1);&&&&&&&&&&&& ghouse[x][y+2]='b';&&& default:& }}
&/* 移动在空地上的箱子到目的地上 */moveboxin(int x,int y,char a){& switch(a)& {&&& case 'u':ghouse[x-1][y]=0;printf(" ");&&&&& printboxin(x-2,y);printman(x-1,y);&&&&& ghouse[x-2][y]='i';&&& case 'd':ghouse[x+1][y]=0;printf(" ");&&&&& printboxin(x+2,y);printman(x+1,y);&&&&& ghouse[x+2][y]='i';&&& case 'l':ghouse[x][y-1]=0;printf(" ");&&&&& printboxin(x,y-2);printman(x,y-1);&&&&& ghouse[x][y-2]='i';&&& case 'r':ghouse[x][y+1]=0;printf(" ");&&&&& printboxin(x,y+2);printman(x,y+1);&&&&& ghouse[x][y+2]='i';&&& default:& }}
/* 移动在目的地上的箱子到目的地 */moveinboxin(int x,int y,char a){& switch(a)& {&&& case 'u':ghouse[x-1][y]='m';printf(" ");&&&&& printboxin(x-2,y);printman(x-1,y);&&&&& ghouse[x-2][y]='i';&&& case 'd':ghouse[x+1][y]='m';printf(" ");&&&&& printboxin(x+2,y);printman(x+1,y);&&&&& ghouse[x+2][y]='i';&&& case 'l':ghouse[x][y-1]='m';printf(" ");&&&&& printboxin(x,y-2);printman(x,y-1);&&&&& ghouse[x][y-2]='i';&&& case 'r':ghouse[x][y+1]='m';printf(" ");&&&&& printboxin(x,y+2);printman(x,y+1);&&&&& ghouse[x][y+2]='i';&&& default:& }}
/* 判定特定的坐标上的状态 */int judge(int x,int y){&& switch(ghouse[x][y])& {& case 0:&& i=1;& case 'w': i=0;& case 'b': i=2;& case 'i': i=4;& case 'm': i=3;& default:& }}
/* 处理按下键盘后,人物移动的主函数 */move(int x,int y,char a){
&& switch(a)&& {&&&& case 'u':if(!judge(x-1,y)) {gotoxy(y,x);}&&&&&& else if(judge(x-1,y)==1||judge(x-1,y)==3)&&&&&&& {if(judge(x,y)==3)&&{ printwhither(x,y);printman(x-1,y);}&&else&&{printf(" ");printman(x-1,y);}&&&&&&& }&&&&&& else if(judge(x-1,y)==2)&&&&&&&&&&&&&& { if(judge(x-2,y)==1)&& {movebox(x,y,'u');&&& if(judge(x,y)==3) printwhither(x,y); gotoxy(y,x-1);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& else if(judge(x-2,y)==3)&& { moveboxin(x,y,'u');&&& if(judge(x,y)==3) printwhither(x,y); gotoxy(y,x-1);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& else gotoxy(y,x);&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&& else if(judge(x-1,y)==4)&&&&&&&&&&&&&& { if(judge(x-2,y)==1)&& {moveinbox(x,y,'u');&&& if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x-1);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& else if(judge(x-2,y)==3)&& { moveinboxin(x,y,'u');&&& if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x-1);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& else gotoxy(y,x);&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&& case 'd':if(!judge(x+1,y))& {gotoxy(y,x);}&&&&&& else if(judge(x+1,y)==1||judge(x+1,y)==3)&&&&&&&&&&&&&& {if(judge(x,y)==3)&&&&&&&&&&&&&&& { printwhither(x,y);printman(x+1,y);}&&&&&&&&&&&&&&& else&&&&&&&&&&&&&&& {printf(" ");printman(x+1,y);}&&&&&&&&&&&&&& }&&&&&&&&&&&&& else if(judge(x+1,y)==2)&&&&&&&&&&&&&& { if(judge(x+2,y)==1)&&& {movebox(x,y,'d');&&& if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&& else if(judge(x+2,y)==3)&& {moveboxin(x,y,'d');&&& if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& else gotoxy(y,x);&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&& else if(judge(x+1,y)==4)&&&&&&&&&&&&&& { if(judge(x+2,y)==1)&&& {moveinbox(x,y,'d');&&& if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&& else if(judge(x+2,y)==3)&& {moveinboxin(x,y,'d');&&& if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& else gotoxy(y,x);&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&& case 'l':if(!judge(x,y-1))& {gotoxy(y,x);}&&&&&& else if(judge(x,y-1)==1||judge(x,y-1)==3)&&&&&&&&&&&&&& {if(judge(x,y)==3)&&&&&&&&&&&&&&& { printwhither(x,y);printman(x,y-1);}&&else&&{printf(" ");printman(x,y-1);}&&}&&&&&&& else if(judge(x,y-1)==2)&&&&&&&&&&&&&& { if(judge(x,y-2)==1)&& {movebox(x,y,'l');&&& if(judge(x,y)==3) printwhither(x,y); gotoxy(y-1,x);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&& else if(judge(x,y-2)==3)&&& {moveboxin(x,y,'l');&&& if(judge(x,y)==3) printwhither(x,y);& gotoxy(y-1,x);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& else gotoxy(y,x);&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&& else if(judge(x,y-1)==4)&&&&&&&&&&&&&& { if(judge(x,y-2)==1)&& {moveinbox(x,y,'l');&&& if(judge(x,y)==3) printwhither(x,y); gotoxy(y-1,x);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&& else if(judge(x,y-2)==3)&&& {moveinboxin(x,y,'l');&&& if(judge(x,y)==3) printwhither(x,y);& gotoxy(y-1,x);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& else gotoxy(y,x);&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&& case 'r':if(!judge(x,y+1))& {gotoxy(y,x);}&&&&&& else if(judge(x,y+1)==1||judge(x,y+1)==3)&&&&&&&&&&&&&& {if(judge(x,y)==3)&&&&&&&&&&&&&&&& {printwhither(x,y);printman(x,y+1);}&&&&&&&&&&&&&& else&&&&&&&&&&&&&&&& {printf(" ");printman(x,y+1);}&&&&&&&&&&&&&& }&&&&&&&&&&&&& else if(judge(x,y+1)==2)&&&&&&&&&&&&&& { if(judge(x,y+2)==1)&&& {movebox(x,y,'r');&&& if(judge(x,y)==3) printwhither(x,y); gotoxy(y+1,x);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&& else if(judge(x,y+2)==3)&& {moveboxin(x,y,'r');&&& if(judge(x,y)==3) printwhither(x,y);& gotoxy(y+1,x);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& else gotoxy(y,x);&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&& else if(judge(x,y+1)==4)&&&&&&&&&&&&&& { if(judge(x,y+2)==1)&&& {moveinbox(x,y,'r');&&& if(judge(x,y)==3) printwhither(x,y); gotoxy(y+1,x);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&& else if(judge(x,y+2)==3)&& {moveinboxin(x,y,'r');&&& if(judge(x,y)==3) printwhither(x,y);& gotoxy(y+1,x);&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&& else gotox
y(y,x);&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&& default:&& }}
/* 按下空格键后,回到本关开头的函数 */void reset(int i){&&&&&&&&& switch(i)&&&&&&& {&case 0:& init();&& inithouse1();&case 1:& init();&& inithouse2();&&&&&&& case 2:& init();&& inithouse3();&case 3:& init();&& inithouse4();& &default:&}}
/* 主函数main */void main(){&& int key,x,y,s,i=0;&& winer *win,*&& _AL=3;_AH=0;&& geninterrupt(0x10);&& init();&& win=inithouse1();
&& do{&&&&& _AH=3;&&&&& geninterrupt(0x10);&&&&& x=_DH+1;y=_DL+1;&&&&& while(bioskey(1)==0);&&&&& key=bioskey(0);&&&&& switch(key)&&&&& {&&&&& case 0x4800:move(x,y,'u'); /* 按下向上键后 */&&&&& case 0x5000:move(x,y,'d'); /* 按下向下键后 */&&&&& case 0x4b00:move(x,y,'l'); /* 按下向左键后 */&&&&& case 0x4d00:move(x,y,'r'); /* 按下向右键后 */&&&&& case 0x3920:reset(i);&&&&& /* 按下空格键后 */&&&&& default:&&&&& }&&&& s=0;&&&& pw=&&&& while(pw)&&&& {&&&&& if(ghouse[pw-&x][pw-&y]=='m') s++;&&&&& pw=pw-&p;&&&& }&&&& if(s==0)&&&& {&free(win);&gotoxy(25,2);&printf("congratulate! you did a good job!");&getch();&&&&&&& i++;&&&&&&& switch(i)&&&&&&& {&&&&&&& case 1:& init();&& win=inithouse2();&case 2:& init();&& win=inithouse3();&case 3:& init();&& win=inithouse4();&case 4:& gotoxy(15,21);&& printf("My dear Friend, How smart you are! Welcome to play again!");&& key=0x011b;getch();&default:&}&&&& }
&& }while(key!=0x011b);
_AL=3;_AH=0;geninterrupt(0x10);}
点这里下载
视频教程列表
文章教程搜索
输入您的搜索字词
提交搜索表单
C语言程序设计推荐教程
tel:<font color="#FF30058&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
汇报 课程 小学
&#xe602; 下载此文档
正在努力加载中...
【精品课程设计】C语言课程设计 推箱子游戏源代码
下载积分:920
内容提示:【精品课程设计】C语言课程设计 推箱子游戏源代码
文档格式:DOC|
浏览次数:8|
上传日期: 18:22:58|
文档星级:&#xe60b;&#xe612;&#xe612;&#xe612;&#xe612;
该用户还上传了这些文档
【精品课程设计】C语言课程设计 推箱子游戏源代码
官方公共微信基于C语言推箱子游戏设计毕业论文84-第2页
上亿文档资料,等你来发现
基于C语言推箱子游戏设计毕业论文84-2
1.2.4整个推箱子游戏功能介绍;本游戏一共4关,由易到难,每一关都有初化、按键处;(1)初始化包括屏幕初始化和每一关卡的初始化,屏;(2)按键处理包括移动小人和移动箱子,通过移动上;(3)每一关都可以重置,按空格键可以重置当前关;(4)按Esc键可以在任何时候退出游戏;第二章游戏的整体设计;2.1功能模块设计;2.1.1系统模块图;本程序包括5个模块,分别
1.2.4 整个推箱子游戏功能介绍本游戏一共4关,由易到难,每一关都有初化、按键处理、重置及退出功能。(1)初始化包括屏幕初始化和每一关卡的初始化,屏幕被初始化宽80像素,高25像素。(2)按键处理包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,从而推
动箱子,以把箱子推到指定的目的地为过关。(3)每一关都可以重置,按空格键可以重置当前关。(4)按Esc键可以在任何时候退出游戏。 第二章 游戏的整体设计2.1功能模块设计2.1.1 系统模块图本程序包括5个模块,分别是初始化模块、画图模块、移动箱子模块、移动小人模块和功能控制模块,如图(一)所示。各个模块的功能描述如下:(1)初始化模块。 该模块包括屏幕初始化和游戏第一关的初始化。屏幕初始化用于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一关的关卡。(2)画图模块。该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。(3)移动箱子模块。该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。(4)移动小人模块。该模块用于控制小人移动,从而推动箱子到目的地。(5)功能控制模块。该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。 2.1.2 任务执行流程图游戏从第一关开始,按上下左右方向键控制小人移动来推动箱子,可以在游戏中的任何时候按Esc键退出。如果游戏无成功希望,可以按空格键回到当前任务的开始状态;如果成功完成当前关,则进入下一关,如果当前关是最后一关,则显示通关信息,提示游戏结束。2.1.3小人移动流程图小人移动的方向有4个,move()函数(处理小人移动的函数)对这4个方向移动的处理都一致,只是调用函数时的参数有所不同。首先判断小人移动的方向,然后根据小人所处世的当前状态、下一步状态或者下下一步状态进行适当的处理。2.2数据结构设计2.2.1设置全局变量定义二维数组char status[20][20],用于记录屏幕一各点的状态。其中,“0”表示什么都没有,“b”表示箱子,“w”表示目的地,“i”表示箱子在目的地。首先将屏幕20*20范围内的状态初始化为0,然后根据具体情况,在画箱子时,将箱子所在点的状态改为“b”;在画墙壁时,将墙壁所在点的状态改为“w”;在画目的地时,将目的地所在点的状态改为“m”;当箱子被推到目的地时,箱子所在点的状态改为“i”,如果每一关中所有目的地的状态都为“i”,则说明该关已完成。定义全局变量,char far *printScreen=(char far*)0xB8000000,用于 在屏幕上输出字符。彩色显示器的字符缓冲区首地址为0xB8000000,每一个字符占2个字节(第一个字节为ASCII值,第二个字节为颜色值),字符模式下屏幕宽80像素,高25像素,一屏可以写80*25个字符。2.2.2定义结构体typedef struct winer{struct winer *p;}定义结构体struct winer用于判断每一关是否已完成。其中x用于存放目的地的横坐标,y用于存放目的地的纵坐标。如果所有表示目的地坐标对应的状态都为“i”,即箱子在目的地,则表示已经过关,可以进入下一关。该结构体的初始化在每一关的初始化时进行。2.3函数功能描述1、 putoutChar()函数原型:void putoutChar(int y,int x,char ch,char fc,char bc),putoutChar()函数在屏幕上的指定位置输出指定的字符。其中,x、y指明输出的位置,ch表示输出的字符,fc表示输出的字符颜色,bc 表示背景色。2、 printWall()函数原型:void printWall(int x,int y)printWall()函数用于画墙壁,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画绿色墙,用小方块表示墙(ASCII值为219)。3、 printBox()函数原型:void printBox(int x,int y)printBox()函数用于在非目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景白色箱子,用ASCII值为10的字符表示箱子。4、 printBoxDes()函数原型:void printBoxDes(int x,int y)printBoxDes()函数用于在目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色箱子,仍用ASCII值为10的字符表示箱子。5、 printDestination()函数原型:void printDestination(int x,int y)printDestination()函数用于画目的地,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色目的地,用心型表示(ASCII值为003)。6、 printDestination1()函数原型: void printDestination1(int x,int y,winer **win,winer **pw),printDestination1()函数与printDestination()函数功能基本相同,都是画目的地函数,但是printDestination1()增加了记录每一个目的地位置的功能。其中x、y指明目的地的位置,每一关的所有目的地位置存放在结构体struct winer中,形成一条链表,**winer返回链表的头,**pw则指向链表的尾部。7、 printMan()函数原型: void printMan(int x,int y),printMan()函数用于画小人。X、y指明画的位置。该函数通过软中断来实现,首先设置寄存器AX的高位和低位,设置高位0xa表示在光标位置显示字符;设置低位02(ASCII值),表示输出的字符;然后设置寄存器CX为01,表示重复输出的次数,这里只输出一次;最后产生类型为0x10的中断,表示显示器输出。8、 init()函数原型: void init(),init()函数用于初始化屏幕。该函数首先用两个for循环初始化屏幕20*20范围内的状态,初始化为0,以后根据实际情况重新赋值;然后设置屏幕输出状态,设置寄存器AX的高位为0,低位为3,表示以80*25的彩色方式显示;最后移动光标到指定的位置输出操作提示信息以及版权信息。9、 初始化游戏函数原型:winer *initStep1()、winer *initStep2()、winer *initStep3()、winer *initStep4(),这几个函数分别初始化游戏的第一关到第四关。这些函数的功能和实现步骤相似。首先根据需要在指定的位置画墙壁和画箱子,在这里可以设置游戏的难度,初始化的墙壁越复杂,箱子越多,则游戏就越难。游戏的第一关至第四关难度依次增加。然后分别调用printDestination1()和printMan()函数画目的地和小人。函数返回包含各个目的地位置的链表。10、 移动箱子函数原型: void moveBoxSpacetoSpace(int x,int y,char a)、void moveBoxDestoSpace(int x,int y, char a)、void moveBoxSpacetoDes(int x,int y,char a)、void moveBoxDestoDes(int x,int y,char a),这几个函数实现的功能分别是人空地移动箱子到空地、从目的地移动箱子到空地、从空地移动箱子到目的地和中从目的地移动箱子到目的地。X、y指明小人当前所处的位置,字符a表示移动的方向,有“u”、“d”、“l”和“r”4个值,分别表示向上、下、左、右移动。这几个函数的实现原理大致相似。对于前面两个函数,首先判断移动的方向,人小人所在的位置沿着移动的方向移动一步画小人,移动两步画箱子(调用printBox()函数),并设置状态为“b”;对于后面两个参数,首先判断移动的方向,从小人所在的位置沿着移动方向移动一步画小人,移动两上在目的地画箱子(调用printBoxDes()函数),并设置状态为“i”,表明箱子在目的地上。11、 judge()函数原型: int judge(int x,int y),judge()根据结构体struct[x][y]中存的值来判断该点的状态。12、 move()函数原型: void moid(int x,int y,char a),Move()函数根据按下的键来处理小人的移动。小人移动的方向有上(“u”)、下(“d”)、左(“l”)、右(“r”)4个,4个方向的处理方式一样。首先判断移动的方向,然后根据小人的当前位置、下一步位置以及下下一步位置所在的状态进行处理。(1) 若下一步所在位置的状态为墙壁(“w”),则直接退出,不作任何处理。(2) 若下一步所在位置的状态为目的地(“i”)或者什么都没有(“0”),则:① 若当前位置的状态为目的地,则在当前位置画目的地(调用printDestination()函数)、在下一步位置画小人(调用printMan()函数)。② 若当前位置的状态为非目的地,则输出空格清空当前位置的小人,并在下一步位置画小人(调用printMan()函数)。(3) 若下一步所在位置的状态为箱子(“b”),则:① 如果下下一步位置的状态为“0”,则把箱子从空地移动到空地(调用moveBoxSpacetoSpace()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用printDestinanion()函数))。② 如果下下一步位置的状态为目的地,则把箱子从空地移动到目的地(调用moveBoxSpacetoDes()函数),然后把光标移动到下一步位置(如果当前位置的状态
为目的地,则应先画目的地(调用printDestination()函数))。③ 其它情况则直接返回,不作任何处理。(4) 若下一步所在位置的状态为箱子在目的地(“i”),则:① 如果下下一步位置的状态为“0”,则把箱子从目的地移动到空地(调用moveBoxDestoSpace()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用printDestination()函数))。② 如果下下一步位置的状态为目的地,则把箱子从目的地移动到目的地(调用moveBoxDestoDes()函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用printDestination()函数))。③ 其它情况则直接返回,不作任何处理。13、 reset()函数原型:void reset(int i)reset()函数的功能是重置当前关。该函数首先判断当前关是第几关,然后调用init()函数和初始化当前关的函数进行重置。14、 主函数主函数首先设置寄存器AX的高位和低位,显示器软中断,进行显示状态的设置,初始化屏幕,初始化第一关,并显示操作提示信息和版权信息。然后根据按下的键(bioskey(0)函数返回按下的键值)进行处理,处理过程由move()函数进行(如果按下Esc键,则退出程序)。对于每一关,如果所有的表示目的地的状态都由“m”变成了“i”,则表示通过该关,可以进入下一关。 包含各类专业文献、高等教育、中学教育、行业资料、文学作品欣赏、各类资格考试、基于C语言推箱子游戏设计毕业论文84等内容。 
 C语言课程设计之推箱子游戏报告_工学_高等教育_教育专区。C程序设计山东...【毕业设计论文】基于C语... 37页 免费 基于C语言推箱子游戏设计... 37页 ...  C语言课程设计--推箱子_理学_高等教育_教育专区。用纯c写的推箱子,能在vc6上运行山东交通学院 C 语言课程设计 推箱子游戏 院(系)别班学姓级号名 信息工程系...  基于VC++的推箱子游戏设... 39页 免费 推箱子(C++) 9页 免费 推箱子毕业论文 20页 2下载券 C语言课程设计之推箱子游... 23页 1下载券 推箱子游戏课程...  推箱子游戏(C语言)_计算机软件及应用_IT/计算机_专业资料。推箱子编程哈尔滨远东理工学院 C 语言课程设计论文 题姓分专学 目: 名: 院: 业: 推箱子游戏课程设计...  基于Android的推箱子游戏的设计――毕业论文_其它_高等教育_教育专区。本文首先论述...基于C语言推箱子游戏设计... 37页 7下载券 基于android手机通讯录的... 41...  山东交通学院 C 语言课程设计 推箱子游戏 院(系)别班学姓级号名 信息工程系 指导教师 时间 ― 1 课程设计任务书 题 目 推箱子游戏 系专...  毕业论文 44页 2下载券 基于单片机的游戏机设计... 54页 1下载券推...我个人也比较喜欢玩这个游戏,因此,我就借这 个机会将这个推箱子游戏用 C 语言...  推箱子游戏设计报告书 11页 2下载券 推箱子 C语言程序 报告 15页 2下载券 ...同时,希望今后能通过更有实用性的设计来提高自我的编程水平,学到更多的专业 ...  需要的话,加 QQ: 《C 语言课程设计》报告...的基本功能有: 推箱子游戏的求解难度比其他游戏高...

我要回帖

更多关于 c语言毕业论文 的文章

 

随机推荐