搜索
您的当前位置:首页推箱子 程序

推箱子 程序

来源:世旅网
#include #include #include #include #include #include typedef struct winer { int x, y; struct winer *p; }winer;

char status [20][20];

char far *printScreen=(char far* )0xB8000000;

void putoutChar(int y,int x,char ch,char fc,char bc); void printWall(int x,int y); void printBox(int x,int y); void printBoxDes(int x,int y); void printDestination(int x,int y);

void printDestination1(int x,int y,winer **win,winer **pw); void printMan(int x,int y); void init();

winer *initStep1(); winer *initStep2(); winer *initStep3(); winer *initStep4();

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); int judge(int x,int y);

void move(int x,int y,char a); void reset(int i);

void putoutChar(int y,int x,char ch,char fc,char bc) { printScreen[(x*160)+(y<<1)+0]=ch;

printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc; }

void printWall(int x,int y) { putoutChar(y-1,x-1,219,GREEN,BLACK); status[x][y]='w';

}

void printBox(int x,int y) { putoutChar(y-1,x-1,10,WHITE,BLACK); status[x][y]='b'; }

void printDestination1(int x,int y,winer **win,winer **pw) { winer *qw; putoutChar(y-1,x-1,003,YELLOW,BLACK); status[x][y]='m'; if(*win==NULL) {*win=*pw=qw=(winer* )malloc(sizeof(winer)); (*pw)->x=x; (*pw)->p=NULL; } else { qw=(winer* )malloc(sizeof(winer)); qw->x=x; qw->y=y; (*pw)->p=qw; (*pw)=qw;qw->p=NULL; } }

void printDestination(int x,int y) {

putoutChar(y-1,x-1,003,YELLOW,BLACK); status[x][y]='m'; }

void printMan(int x,int y) {

Gotoxy(y,x); -AL=02; -CX=01; -AH=0xa;

Geninterrupt(0x10); }

void printBoxDes(int x,int y) {

putoutChar(y-1,x-1,10,YELLOW,BLACK); status[x][y]='i'; }

void int() {

int i,j;

for(i=0;i<20;i++) for(j=0;j<20;j++) status[i][j]=0; -AL=3; -AH=0;

geninterrupt(0x100; gotoxy(40,4);

printf(\"welcome to the box world!\"); gotoxy(40,6);

printf(\"you can use up,down,left,\"); gotoxy(40,8);

printf(\"right key to control it ,or\"); gotoxy(40,10);

printf(\"you can pressEsc to quit it.\"); gotoxy(40,12);

printf(\"Press space to reset the game.\"); gotoxy(40,14);

printf(\"Wish you have a good time!\")\\ gotoxy(40,16);

printf(\"April,2007\"); }

winer *initStep1() { int x; int y; winer *win=NULL; winer *pw; 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,x+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,4+7); printWall(3+4,2+10); printBox(3+4,6+10); printBox(3+4,7+10); printbox(4+4,7+10); printDestination1(4+4,2+10,&win,&pw); printDestination1(5+4,2+10,&win,&pw); printDestination1(6+4,2+10,&win,&pw); printMan(2+4,8+10); return win; }

winer *initStep2() { int x; int y; winer *win=NULL; xiner *pw;

for(x=1,y=4;y<=7;y++) printWall(x+4,y+10); for(x=2,y=2;y<=5;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,x+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); printDestination1(5+4,7+10,&win,&pw); printDestination1(6+4,7+10,&win,&pw); printDestination1(7+4,7+10,&win,&pw); printMan(2+4,6+10); return win; }

winer *initStep3() { int x; int y;

winer *win=NULL; winer *pw;

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,x+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); printDestination1(2+4,5+10,&win,&pw); printDestination1(2+4,6+10,&win,&pw);

printDestination1(2+4,7+10,&win,&pw); printman (2+4,4+10);

return wiin ; }

wintre *initstep4() ( int x; int y;

winer *pw;

for (x=1,y=1;y<=6;y++); printwall(x+4,y+10); for (x=1,y=1;y<=6;y++); printwall(x+4,y+10) for (x=1,y=1;y<=6;y++); printwall(x+4,y+10); for (x=1,y=1;y<=6;y++); printwall(x+4,y+10); for (x=1,y=1;y<=6;y++); printwall(x+4,y+10); for (x=1,y=1;y<=6;y++); printwall(x+4,y+10); for (x=1,y=1;y<=6;y++); printwall(x+4,y+10); printwall(3+4,8+10); print box(4+4,4+10); print box(4+4,6+10); print box(5+4,5+10); print box(5+4,3+10);

printdestinationl(3+4,7+10,&win,&pw); printdestinationl(4+4,7+10,&win,&pw); printdestinationl(5+4,7+10,&win,&pw); printdestinationl(4+4,8+10,&win,&pw); printdestinationl(5+4,8+10,&win,&pw); printman(2+4,2+10); return win; }

void moveboxspacetospace(int x,int y,char a) { switch(a) { case'u': status[x-1][y]=0; printf(\" \"); print box(x-2,y); print man(x-1,y); status[x+1][y]='b'; break;

case'd'; status[x+1][y]=0; printf(\" \"); printbox(x+2,y); printman(x+1,y); status[x+2][y]='b'; break; case'l': status[x][y-1]=0;

printf(\" \"); printbox(x,y-2); printman(x,y-1); status[x][y-2]='b'; break;

case'r': status[x][y+1]=0;

printf(\" \"); printbox(x,y+2); printman(x,y+1); status[x][y+2]='b'; break; default; break; } }

void moveboxdestospace(int x,int y,char a) { switch(a) { case'u': status[x-1][y]='m'; printf(\" \"); printbox(x-2,y); printman(x-1,y); status[x-2][y]='b'; break; case'd': status[x+1][y]='m'; printf(\" \"); printbox(x+2,y); printman(x+1,y);

status[x+2][y]='b'; break;

case'l': status[x][y-1]='m'; printf(\" \"); printbox(x,y-2); printman(x,y-1); status[x][y-2]='b'; break;

case'r': status[x][y-1]='m'; printf(\" \"); printbox(x,y+2); printman(x,y+1); status[x][y+2]='b'; break; default; break; } }

void moveboxdestospace(int x,int y,char a) { switch(a) { case'u': status[x-1][y]=0; printf(\" \"); printboxdes(x-2,y); printman(x-1,y); status[x-2][y]='i'; break; case'd': status[x-1][y]=0; printf(\" \"); printboxdes(x+2,y); printman(x+1,y); status[x+2][y]='i'; break; case'l': status[x][y-1]=0; printf(\" \");

printboxdes(x,y-2); printman(x,y-1); status[x][y-2]='i'; break; case'r': status[x][y+1]=0; printf(\" \"); printboxdes(x,y+2); printman(x,y+1); status[x][y+2]='i'; break; default: break; } } void moveBoxDestoDes(int x,int y,char a) { switch(a) { case'u': status[x-1][y]='m'; printf(\" \"); printBoxDes(x-2,y); printMan(x-1,y); status[x-2][y]='i'; break; case 'd': status[x+1][y]='m'; printf(\" \"); printBoxDes(x+2,y); printMan(x+1,y); status[x+2][y]='i'; break; case'l': status[x][y-1]='m'; printf(\" \"); printBoxDes(x,y-2); printMan(x,y-1); status[x][y-2]='i'; break; case'r': status[x][y+1]='m'; printf(\" \"); printBoxDes(x,y+1);

status[x][y+2]='i'; break; default: break; } }

int judge(int x,int y) { int i; switch(status[x][y]) { case 0: i=1; break; case'w': i=0; break; case'b': i=2; break; case'i': i=4; break; case'm': i=3; break; default: break; } return i; }

void move(int x,int y,char a) { switch(a) { case'u': if(!judge(x-1,y)) { gotoxy(y,x); break; } else if(judge(x-1,y)==1||judge(x-1,y)==3) { if(judge(x,y)==3)

{ printDestination(x,y); printMan(x-1,y); break; } else {printf(\" \"); printMan(x-1,y); break; } } else if(judge(x-1,y)==2) { if(judge(x-2,y)==1) { moveBoxSpacetoSpace(x,y,'u'); if(judge(x,y)==3 printDestination(x,y); gotoxy(y,x-1); } else if(judge(x-2,y)==3 { moveBoxSpacetoSpace(x,y,'u'); if(judge(x,y)==3) printDestination(x,y); gotoxy(y,x-1); } else gotoxy(y,x); break; } else if (judge(x-1,y)==4) { if(judge(x-2,y)==1) { moveBoxDestination(x,y,'u'); if(judge(x,y)==3) printDestination(x,y); gotoxy(y,x-1); } else if(judge(x-2,y)==3) { moveBoxDestDes(x,y,'u'); if(judge(x,y)==3)

printDestination(x,y); gotoxy(y,x-1); } else gotoxy(y,x); break; } case'd': if(!judge(x+1,y)) { gotoxy(y,x); break; } else if(judge(x+1,y)==1||judge(x+1,y)==3) { if(judge(x,y)==3) { printDestination(x,y); printMan(x+1,y); break; } else { printf(\"\"); printman(x+1,y); break; }

else if(judge(x+1),y)==2) { if(judge(x+2,y)==1) { moveboxspace(x,y'd'); if(judge(x,y)==3) printdestination(x,y); goto xy(y,x+1); } else if(judge(x+2,y)==3 { moveboxspacedes(x,y,'d'); if(judge(x,y)==3) printdestination(x,y); goto xy(y,x+1); } else

goto xy(y,x); break; }

else if(judge(x+1,y)==4) { if(judge(x+2),y)==1 { moveboxdestospace(x,y,'d'); if(judge(x,y)==3) printdestination(x,y); goto xy(y,x+1); } else if(judge(x+2,y)==3) { moveboxdestodes(x,y,'d'); if(judge(x,y)==3) printdestination(x,y); goto xy(y,x+1); } else goto xy(y,x); break; }

case '1': if(!judge(x,y-1)==1||judge(x,y-1)==3) { if(judge(x,y)==3) { printdestination(x,y); printman(x,y-1); break; } else { printf(\" \"); printman(x,y-1); break; } } else if(judge(x,y-1)==2) { if(judge(x,y-2)==1) { moveboxspacetospace(x,y,'1');

if(judge(x,y)==3) printdestination(x,y); goto xy(y-1,x); } else if(judge(x,y-2)==3) { moveboxspacetodes(x,y,'1'); if(judge(x,y)==3) printdestination(x,y); goto xy(y-1,x); } else goto xy(y,x) ; break; } else if(judge(x,y-1)==4) { if(judge(x,y-2)==1) { moveboxdestospace(x,y,'1'); if(judge(x,y)==3) printdesination(x,y); goto xy(y-1,x); } else if(judge(x,y-20==3) { moveboxdestodes(x,y,'1'); if(judge(x,y)==3) printdestination(x,y); goto xy(y-1,x) ; } else goto xy(y,x); break; } case 'r': if(!judge(x,y+1)) { goto xy(y,x); break; } else if(judge(x,y+1)==1||judge(x,y+1)==3)

{ if(judge(x,y)==3) { printdestination(x,y); printman(x,y+1); break; } else { printf(\" \"); printman(x,y+1); break; } else if(judge(x,y+1)==2) { if(judge(x,y+2)==1) { moveboxspacetospace(x,y,'r'); if(judge(x,y)==3) printdestination(x,y); goto xy(y+1,x); } else goto xy(y+1,x); } else goto xy(y,x); break; }

else if(judge(x,y+1)==4 { if(judge(x,y+2)==1) { moveBoxDestoSpace(x,y,'r') if(judge(x,y)==3 printDestination(x,y); gotoxy(y+1,x); } else if(judge(x,y+2)==3) { moveBoxDestoDes(x,y,'r'); if(judge(x,y)==3) printDestination(x,y); gotoxy(y+1,x);

} else gotoxy(y,x); break; }

default: break; } }

void reset(int i) { swith(i) { case 0: init(); initStep1(); break; case 1: init(); initStep2(); break; case 3: init(); initStep3(); break; case 3: init(); initStep4(); break; default: break; } }

void main() { int key; int x; int y; int s; int i=0; winer *win; winer *pw; _AL=3; _AH=0;

geninterrupt(0x10); init(); win=initStep1(); 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'); break; case 0x5000: move(x,y,'d'); break; case 0x4d00: move(x,y,'r'); break; case 0x3920: reset(i); break; default: break; } s=0; pw=win; while(pw) { if(status[pw->x][pw->y]=='m') s++; pw=pw->p; } if(s==0) { free(win); gotoxy(25,2); printf(\"congratulate! You have done this step!\"); getch(); i++; switch(i) {

}

case 1: init(); win=initStep2(); break; case 2: init(); win=initStep3(); break; case 3: init(); win=initStep4(); break; case 4: gotoxy(15,21); printf(\"Congratulation! \\n); gotoxy(15,23); printf(\"You have done all the steps,Welcome to play again!\"); key=0x011b; getch(); break; default: break; } } }

while (key!=0x011b); _AL=3; _AH=0;

geninterrupt(0x10);

因篇幅问题不能全部显示,请点此查看更多更全内容

Top