c语言游戏最简单代码推箱子(c语言之推箱子游戏代码)

http://www.itjxue.com  2023-03-04 10:21  来源:未知  点击次数: 

C语言程序设计推箱子算法

#include"stdio.h"

#include"bios.h"

#define LEFT 75

#define RIGHT 77

#define UPPER 72

#define DOWN 80

#define ESC 27

struct Boxss /*定义箱子结构体,其中包含坐标属性*/

{

int x,y;

};

union keyboard /*定义读取键盘码的共用体类型*/

{

unsigned int iKeyInfo;

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},

};

int i,j;

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;i10;i++) /*输出新地图(刷新地图)*/

{

gotoxy(10,5+i);

for(j=0;j10;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;i4;i++)

if(chMap[Box[i].y-5][Box[i].x-10]==2)

j++;

if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/

{

clrscr();

printf("You Win!");

break;

}

for(i=0;i4;i++) /*在起始(或移动后)的坐标输出箱子*/

{

gotoxy(Box[i].x,Box[i].y);

printf("0");

}

gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/

printf("*\b");

tx=x; /*记录本次移动前的坐标*/

ty=y;

iKey=fnGetKey();

if(iKey==LEFTchMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/

x--;

if(iKey==RIGHTchMap[y-5][x+1-10]!=0)

x++;

if(iKey==UPPERchMap[y-1-5][x-10]!=0)

y--;

if(iKey==DOWNchMap[y+1-5][x-10]!=0)

y++; /*输入ESC退出并输出"YOU LOST"*/

if(iKey==ESC)

{

clrscr();

printf("You Lost");

break;

}

for(i=0;i4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/

if(Box[i].x==xBox[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=tx;

y=ty;

}

break;

}

clrscr();

}

getch();

}

求一些C语言小游戏的源代码,谢谢

“推箱子”C代码:

#include stdio.h

#include conio.h

#includestdlib.h

#includewindows.h

int m =0;? //m代表第几关

struct maps{short a[9][11]; };

struct maps map[5]={ 0,0,0,0,0,0,0,0,0,0,0, ?//共5关,每关9行11列

??????????????0,1,1,1,1,1,1,1,0,0,0,

??????????????0,1,0,0,0,0,0,1,1,1,0,

??????????????1,1,4,1,1,1,0,0,0,1,0, ?//0空地,1墙

???????????????1,5,0,0,4,0,0,4,0,1,0, ?//4是箱子,5是人

??????????????1,0,3,3,1,0,4,0,1,1,0, ?//3是目的地

??????????????1,1,3,3,1,0,0,0,1,0,0, ?//7是箱子在目的地(4+3)

??????????????0,1,1,1,1,1,1,1,1,0,0, ?//8是人在目的地(5+3)

? ? ? ? ? ? ? ? 0,0,0,0,0,0,0,0,0,0,0,

? ? ? ? ? ? ? ? 0,0,0,0,0,0,0,0,0,0,0,

??????????????0,0,1,1,1,1,0,0,0,0,0,

??????????????0,0,1,5,0,1,1,1,0,0,0,

??????????????0,0,1,0,4,0,0,1,0,0,0,

???????????????0,1,1,1,0,1,0,1,1,0,0,

??????????????0,1,3,1,0,1,0,0,1,0,0,

??????????????0,1,3,4,0,0,1,0,1,0,0,

??????????????0,1,3,0,0,0,4,0,1,0,0,

? ? ? ? ? ? ? ? 0,1,1,1,1,1,1,1,1,0,0,

? ? ? ? ? ? ? ? 0,0,0,0,0,0,0,0,0,0,0,

??????????????0,0,0,1,1,1,1,1,1,1,0,

??????????????0,0,1,1,0,0,1,0,5,1,0,

??????????????0,0,1,0,0,0,1,0,0,1,0,

???????????????0,0,1,4,0,4,0,4,0,1,0,

??????????????0,0,1,0,4,1,1,0,0,1,0,

??????????????1,1,1,0,4,0,1,0,1,1,0,

??????????????1,3,3,3,3,3,0,0,1,0,0,

? ? ? ? ? ? ? ? 1,1,1,1,1,1,1,1,1,0,0,

? ? ? ? ? ? ? ? 0,1,1,1,1,1,1,1,1,1,0,

??????????????0,1,0,0,1,1,0,0,0,1,0,

??????????????0,1,0,0,0,4,0,0,0,1,0,

??????????????0,1,4,0,1,1,1,0,4,1,0,

???????????????0,1,0,1,3,3,3,1,0,1,0,

??????????????1,1,0,1,3,3,3,1,0,1,1,

??????????????1,0,4,0,0,4,0,0,4,0,1,

??????????????1,0,0,0,0,0,1,0,5,0,1,

? ? ? ? ? ? ? ? 1,1,1,1,1,1,1,1,1,1,1,

? ? ? ? ? ? ? ? 0,0,0,0,0,0,0,0,0,0,0,

??????????????0,0,0,1,1,1,1,1,1,0,0,

??????????????0,1,1,1,0,0,0,0,1,0,0,

??????????????1,1,3,0,4,1,1,0,1,1,0,

???????????????1,3,3,4,0,4,0,0,5,1,0,

??????????????1,3,3,0,4,0,4,0,1,1,0,

??????????????1,1,1,1,1,1,0,0,1,0,0,

??????????????0,0,0,0,0,1,1,1,1,0,0,

? ? ? ? ? ? ?? 0,0,0,0,0,0,0,0,0,0,0 };

void DrMap( )? //绘制地图

{ CONSOLE_CURSOR_INFO cursor_info={1,0};? ?//隐藏光标的设置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),cursor_info);

printf("\n\n \t\t\b推箱子");

printf("\n \t");

for (int i = 0; i 9; i++)

{for (int j = 0; j 11; j++)

{switch (map[m].a[i][j])

{case 0: ?printf("? "); break;

case 1: ?printf("■"); break;

??????case 3: ?printf("◎");break;

case 4: ?printf("□"); break;

case 5: ?printf("♀"); break; ??//5是人

case 7:? printf("□"); break; ?//4 + 3箱子在目的地中

case 8:? printf("♀");break;? ?// 5 + 3人在目的地中

}

}

printf("\n\t");

}

}

void gtxy(int x, int y)? //控制光标位置的函数

{ COORD coord;

coord.X = x;

coord.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

void start( )? //开始游戏

{ int r, c;? //人的下标

for (int i = 0; i 9; i++)

{ for (int j = 0; j 11; j++)

{if (map[m].a[i][j] == 5||map[m].a[i][j]==8) { r = i; ?c = j; } } //i j 人的下标

}

char key;

key = getch( );

switch (key)

{case 'W':

case 'w':

case 72:

if (map[m]. a[r - 1][c] == 0|| map[m]. a [r - 1][c] == 3)

{ gtxy(2*c+8,r-1+3); printf("♀");? // gtxy(2*c+8,r-1+3)是到指定位置输出字符

? ? ?? if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("? "); }

? ? ?? if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

? ? ? ? map[m]. a [r - 1][c] += 5; ?map[m]. a [r][c] -= 5; }

? ?? else ?if (map[m]. a [r - 1][c] == 4 || map[m]. a [r - 1][c] == 7)

{ if (map[m]. a [r - 2][c] == 0 || map[m]. a [r - 2][c] == 3)

{ gtxy(2*c+8,r-2+3); printf("□"); gtxy(2*c+8,r-1+3); printf("♀");

? ? ? ? ?? if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("? "); }

? ? ? ? ? if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

? ? ? ? ? map[m]. a [r - 2][c] += 4; ?map[m]. a [r - 1][c] += 1;

?map[m]. a [r][c] -= 5; }

} break;

case 'S':

case 's':

case 80:

if (map[m]. a [r + 1][c] == 0 || map[m]. a [r + 1][c] == 3)

?{ gtxy(2*c+8,r+1+3); printf("♀");

? ? ? ?? if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("? "); }

? ? ? ? if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

? ? ? ? map[m]. a [r + 1][c] += 5; ?map[m]. a [r][c] -= 5; }

? ? ?? else if (map[m]. a [r + 1][c] == 4 || map[m]. a [r+ 1][c] == 7)

??{ if (map[m]. a [r + 2][c] == 0 || map[m]. a [r + 2][c] == 3)

{ gtxy(2*c+8,r+2+3); printf("□"); gtxy(2*c+8,r+1+3); printf("♀");

? ? ? ? ?? if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("? "); }

? ? ? ? ?? if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

? ? ? ? ?? map[m]. a [r + 2][c] += 4; map[m]. a [r + 1][c] += 1;

map[m]. a [r][c] -= 5; }

??}break;

case 'A':

case 'a':

case 75:

if (map[m]. a [r ][c - 1] == 0 || map[m]. a [r ][c - 1] == 3)

?{ gtxy(2*(c-1)+8,r+3); printf("♀");

? ? ? ? if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("? "); }

? ? ? ?? if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

? ? ? ? map[m]. a [r ][c - 1] += 5; map[m]. a [r][c] -= 5; }

else if (map[m]. a [r][c - 1] == 4 || map[m]. a [r][c - 1] == 7)

?{if (map[m]. a [r ][c - 2] == 0 || map[m]. a [r ][c - 2] == 3)

{ gtxy(2*(c-2)+8,r+3); printf("□"); gtxy(2*(c-1)+8,r+3); printf("♀");

? ? ? ? ?? if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("? "); }

? ? ? ? ?? if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

? ? ? ? ?? map[m]. a [r ][c - 2] += 4; map[m]. a [r ][c - 1] += 1;

map[m]. a [r][c] -= 5; }

?}break;

case 'D':

case 'd':

case 77:

if (map[m]. a [r][c + 1] == 0 || map[m]. a [r][c + 1] == 3)

?{ gtxy(2*(c+1)+8,r+3); printf("♀");

? ? ? ?? if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("? "); }

? ? ? ?? if(map[m]. a[r ][c] == 8) {gtxy(2*c+8,r+3); printf("◎");}

? ? ? ? map[m]. a [r][c + 1] += 5; ?map[m]. a [r][c] -= 5; }

else if (map[m]. a [r][c + 1] == 4 || map[m]. a [r][c + 1] == 7)

?{ if (map[m]. a [r][c + 2] == 0 || map[m]. a [r][c + 2] == 3)

{ gtxy(2*(c+2)+8,r+3); printf("□"); gtxy(2*(c+1)+8,r+3); printf("♀");

? ? ? ? ?? if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("? "); }

? ? ? ? ? if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

? ? ? ? ? map[m]. a [r][c + 2] += 4; map[m]. a [r][c + 1] += 1;

?map[m]. a [r][c] -= 5; }

?}break;

}

}

int ifwan( )? //是否完成(1是0否)

{ if(m==0){if(map[m].a[5][2]==7 map[m].a[5][3]==7

map[m].a[6][2]==7 map[m].a[6][3]==7) return 1;}

if(m==1){if(map[m].a[5][2]==7 map[m].a[6][2]==7

map[m].a[7][2]==7) return 1;}

if(m==2){if(map[m].a[7][1]==7 map[m].a[7][2]==7 map[m].a[7][3]==7

map[m].a[7][4]==7 map[m].a[7][5]==7) return 1;}

if(m==3){if(map[m].a[4][4]==7 map[m].a[4][5]==7 map[m].a[4][6]==7

map[m].a[5][4]==7 map[m].a[5][5]==7 map[m].a[5][6]==7) return 1;}

if(m==4){if(map[m].a[3][2]==7 map[m].a[4][1]==7 map[m].a[4][2]==7

map[m].a[5][1]==7 map[m].a[5][2]==7) return 1;}

return 0;

}

int main( ) ?//主函数

{ while (1)

? ?? { system("cls");

? ? ?? DrMap( );

? ? ? while (1)

? ? ? ? ? ? { start( );

? ? ? ? ? ? ? if(ifwan()){printf("\007");break;} //完成后响铃

? ? ? ? ?? }

? ? ?? m+=1;

? ?? }

? return 0;

}

如何用C语言编写一如图模型的推箱子游戏的程序?!

/*TC环境下编的*/

#include dos.h

#include stdio.h

#include ctype.h

#include conio.h

#include bios.h

#include alloc.h

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)+(y1)+0]=ch;

printScreen[(x*160)+(y1)+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)-y=y;

(*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 init()

{

int i,j;

for(i=0;i20;i++)

for(j=0;j20;j++)

status[i][j]=0;

_AL=3;

_AH=0;

geninterrupt(0x10);

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 press Esc 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,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);

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;

winer *pw;

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);

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,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);

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 win;

}

winer *initStep4()

{

int x;

int y;

winer *win=NULL;

winer *pw;

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);

printDestination1(3+4,7+10,win,pw);

printDestination1(4+4,7+10,win,pw);

printDestination1(5+4,7+10,win,pw);

printDestination1(4+4,8+10,win,pw);

printDestination1(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(" ");

printBox(x-2,y);

printMan(x-1,y);

status[x-2][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 moveBoxSpacetoDes(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+2);

printMan(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)

{

moveBoxSpacetoDes(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)

{

moveBoxDestoSpace(x,y,'u');

if(judge(x,y)==3)

printDestination(x,y);

gotoxy(y,x-1);

}

else if(judge(x-2,y)==3)

{

moveBoxDestoDes(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)

{

moveBoxSpacetoSpace(x,y,'d');

if(judge(x,y)==3)

printDestination(x,y);

gotoxy(y,x+1);

}

else if(judge(x+2,y)==3)

{

moveBoxSpacetoDes(x,y,'d');

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)

{

moveBoxDestoSpace(x,y,'d');

if(judge(x,y)==3)

printDestination(x,y);

gotoxy(y,x+1);

}

else if(judge(x+2,y)==3)

{

moveBoxDestoDes(x,y,'d');

if(judge(x,y)==3)

printDestination(x,y);

gotoxy(y,x+1);

}

else

gotoxy(y,x);

break;

}

case 'l':

if(!judge(x,y-1))

{

gotoxy(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,'l');

if(judge(x,y)==3)

printDestination(x,y);

gotoxy(y-1,x);

}

else if(judge(x,y-2)==3)

{

moveBoxSpacetoDes(x,y,'l');

if(judge(x,y)==3)

printDestination(x,y);

gotoxy(y-1,x);

}

else

gotoxy(y,x);

break;

}

else if(judge(x,y-1)==4)

{

if(judge(x,y-2)==1)

{

moveBoxDestoSpace(x,y,'l');

if(judge(x,y)==3)

printDestination(x,y);

gotoxy(y-1,x);

}

else if(judge(x,y-2)==3)

{

moveBoxDestoDes(x,y,'l');

if(judge(x,y)==3)

printDestination(x,y);

gotoxy(y-1,x);

}

else

gotoxy(y,x);

break;

}

case 'r':

if(!judge(x,y+1))

{

gotoxy(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);

gotoxy(y+1,x);

}

else if(judge(x,y+2)==3)

{

moveBoxSpacetoDes(x,y,'r');

if(judge(x,y)==3)

printDestination(x,y);

gotoxy(y+1,x);

}

else

gotoxy(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)

{

switch(i)

{

case 0:

init();

initStep1();

break;

case 1:

init();

initStep2();

break;

case 2:

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 0x4b00:

move(x,y,'l');

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);

}

c语言推箱子

//空:0??墙:1??箱子:3???巢:4???箱子与巢重合:5

[MAPCOUNT]

map_count=8

[MAP1]

w=8

h=8

nest_count=4

l1=0?0?0?1?1?1?0?0

l2=0?0?0?1?3?1?0?0

l3=1?1?1?1?0?1?0?0

l4=1?3?2?0?2?1?1?1

l5=1?1?1?4?2?0?3?1

l6=0?0?1?2?1?1?1?1

l7=0?0?1?3?1?0?0?0

l8=0?0?1?1?1?0?0?0

[MAP2]

w=9

h=9

nest_count=3

l1=1?1?1?1?1?0?0?0?0

l2=1?4?0?0?1?0?0?0?0

l3=1?0?2?2?1?0?1?1?1

l4=1?0?2?0?1?0?1?3?1

l5=1?1?1?0?1?1?1?3?1

l6=0?1?1?0?0?0?0?3?1

l7=0?1?0?0?0?1?0?0?1

l8=0?1?0?0?0?1?1?1?1

l9=0?1?1?1?1?1?0?0?0

[MAP3]

w=10

h=7

nest_count=4

l1=0?1?1?1?1?1?1?1?0?0

l2=0?1?0?0?0?0?0?1?1?1

l3=1?1?2?1?1?1?0?0?0?1

l4=1?0?4?0?2?0?0?2?0?1

l5=1?0?3?3?1?0?2?0?1?1

l6=1?1?3?3?1?0?0?0?1?0

l7=0?1?1?1?1?1?1?1?1?0

[MAP4]

w=6

h=8

nest_count=5

l1=0?1?1?1?1?0

l2=1?1?0?0?1?0

l3=1?4?2?0?1?0

l4=1?1?2?0?1?1

l5=1?1?0?2?0?1

l6=1?3?2?0?0?1

l7=1?3?3?5?3?1

l8=1?1?1?1?1?1

//以上为地图数据文件,保存为boxdata.dat文件

//空:0??墙:1??箱子:3???巢:4???箱子与巢重合:5

#include?stdio.h

#include?stdlib.h

#include?stdbool.h

#include?windows.h

#include?string.h

typedef?struct

{

int?x;

int?y;

}?PT;

int**?s;

PT?man;

PT*?nest=NULL;

PT?prev;

int?nest_count=0;

int?map_count=0;

int?gate=1;

int?w,h;

char?work_dir[100]={'\0'};

char?data_file[100]={'\0'};

void?GetDataFromFile();

void?GetIntFromLineString(char*?ch,?int?len,?int?i);

void?Draw();

bool?is_Success();

int?main()

{

printf("Loading...");

CONSOLE_CURSOR_INFO?cci;

cci.bVisible?=?FALSE;

cci.dwSize?=?sizeof(cci);

HANDLE?handle?=?GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorInfo(handle,?cci);

_getcwd(work_dir,100);

strcpy(data_file,work_dir);

strcat(data_file,"\\boxdata.dat");

if(access(data_file,0))

{

printf("Don't?find?map?data?file?!");

getch();

exit(0);

}

while(1)

{

GetDataFromFile();

int?sel=0;

Draw();

while(1)

{

fflush(stdin);

sel=getch();

if(sel==224)

{

sel=getch();

prev=man;

if(sel==77)??//right

{

if(s[man.y][man.x+1]==2)

{

if(s[man.y][man.x+2]==0?||?s[man.y][man.x+2]==3)

{

s[man.y][man.x+2]=2;

s[man.y][man.x+1]=4;

s[man.y][man.x]=0;

}

else

{

continue;

}

}

else?if(s[man.y][man.x+1]==0?||?s[man.y][man.x+1]==3)

{

s[man.y][man.x+1]=4;

s[man.y][man.x]=0;

}

else

{

continue;

}

}

else?if(sel==80)??//down

{

if(s[man.y+1][man.x]==2)

{

if(s[man.y+2][man.x]==0?||?s[man.y+2][man.x]==3)

{

s[man.y+2][man.x]=2;

s[man.y+1][man.x]=4;

s[man.y][man.x]=0;

}

else

{

continue;

}

}

else?if(s[man.y+1][man.x]==0?||?s[man.y+1][man.x]==3)

{

s[man.y+1][man.x]=4;

s[man.y][man.x]=0;

}

else

{

continue;

}

}

else?if(sel==72)??//up

{

if(s[man.y-1][man.x]==2)

{

if(s[man.y-2][man.x]==0?||?s[man.y-2][man.x]==3)

{

s[man.y-2][man.x]=2;

s[man.y-1][man.x]=4;

s[man.y][man.x]=0;

}

else

{

continue;

}

}

else?if(s[man.y-1][man.x]==0?||?s[man.y-1][man.x]==3)

{

s[man.y-1][man.x]=4;

s[man.y][man.x]=0;

}

else

{

continue;

}

}

else?if(sel==75)??//left

{

if(s[man.y][man.x-1]==2)

{

if(s[man.y][man.x-2]==0?||?s[man.y][man.x-2]==3)

{

s[man.y][man.x-2]=2;

s[man.y][man.x-1]=4;

s[man.y][man.x]=0;

}

else

{

continue;

}

}

else?if(s[man.y][man.x-1]==0?||?s[man.y][man.x-1]==3)

{

s[man.y][man.x-1]=4;

s[man.y][man.x]=0;

}

else

{

continue;

}

}

int?i;

for(i=0;inest_count;i++)

{

if(nest[i].x==prev.x??nest[i].y==prev.y)

{

s[prev.y][prev.x]=3;

break;

}

}

Draw();

if(is_Success()==true)

{

gate++;

if(gatemap_count)

{

printf("\n\nmap?is?end!");

fflush(stdin);

getch();

exit(0);

}

break;

}

}

else?if(sel=='q'?||?sel=='Q')

{

exit(0);

}

else?if(sel=='r'?||?sel=='R')

{

break;

}

}

}

return?0;

}

void?GetDataFromFile()

{

int?i;

if(s!=NULL)

{

if(h!=0)

{

for(i=0;ih;i++)

{

free(s+i);

}

free(s);

}

else

{

printf("fail");

getch();

exit(0);

}

}

if(nest!=NULL)

{

free(nest);

}

map_count=GetPrivateProfileInt("MAPCOUNT","map_count",0,data_file);

if(map_countgate)

{

printf("gate?finish!");

getch();

exit(0);

}

char?section[20]={'\0'};

sprintf(section,"MAP%d",gate);

nest_count=GetPrivateProfileInt(section,"nest_count",0,data_file);

nest=(PT*)malloc(sizeof(PT)*nest_count);

w=GetPrivateProfileInt(section,"w",0,data_file);

h=GetPrivateProfileInt(section,"h",0,data_file);

if(w5?||?h5?||?nest_count1)

{

printf("w?or?h?or?box_nest?data?error!");

getch();

exit(0);

}

s=(int**)malloc(sizeof(int*)*h);

for(i=0;ih;i++)

{

*(s+i)=(int*)malloc(sizeof(int)*w);

}

char?key[20]={'\0'};

char?line[50]={'\0'};

int?len;

int?j;

for(i=0;ih;i++)

{

memset(line,'\0',50);

sprintf(key,"l%d",i+1);

GetPrivateProfileString(section,key,"\0",line,50,data_file);

len=strlen(line);

if(len0)

{

line[len++]='?';

line[len]='\0';

}

GetIntFromLineString(line,strlen(line),i);

}

len=0;

for(i=0;ih;i++)

{

for(j=0;jw;j++)

{

if(s[i][j]==3)

{

nest[len].y=i;

nest[len].x=j;

len++;

}

else?if(s[i][j]==5)

{

nest[len].y=i;

nest[len].x=j;

len++;

s[i][j]=2;

}

}

}

}

void?strmyncpy(char*?source,?char*?target,?int?begin,?int?end)

{

int?i=0;

while(1)

{

if(source[begin]!='?')

{

target[i]=source[begin];

}

i++;

begin++;

if(beginend)

{

target[i]='\0';

break;

}

}

}

void?GetIntFromLineString(char*?ch,?int?len,?int?i)

{

int?j=0;

char?c[5]={'\0'};

int?b=0,e=0;

while(elen)

{

if(ch[e]=='?')

{

memset(c,'\0',5);

strmyncpy(ch,c,b,e);

b=e+1;

e++;

s[i][j++]=atoi(c);

}

e++;

}

}

void?Draw()

{

int?i,j,k;

bool?flag=false;

system("cls");

printf("\n\n");

for(i=0;ih;i++)

{

printf("\n\n");

for(j=0;jw;j++)

{

if(s[i][j]==0)

{

printf("????");

}

else?if(s[i][j]==1)

{

printf("?■?");

}

else?if(s[i][j]==2)

{

printf("?★?");

}

else?if(s[i][j]==3)

{

printf("?☆?");

}

else?if(s[i][j]==4)

{

printf("?◎?");

man.x=j;

man.y=i;

}

}

}

}

bool?is_Success()

{

int?i,j;

for(i=0;ih;i++)

{

for(j=0;jw;j++)

{

if(s[i][j]==3)

{

return?false;

}

}

}

for(i=0;inest_count;i++)

{

if(man.x==nest[i].x??man.y==nest[i].y)

{

return?false;

}

}

return?true;

}

谁有推箱子的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)+(y1)+0]=ch;

screen[(x*160)+(y1)+1]=(bc*16)+fc;

}/* 定义判断是否胜利的数据结构 */

typedef struct winer {

int x,y;

struct winer *p;

}winer;/* 箱子位置的数据结构 */

typedef struct boxs {

int x,y;

struct boxs *next;

}boxs;/* 在特定的坐标上画墙壁并用数组记录状态的函数 */

void printwall(int x,int y)

{

putchxy(y-1,x-1,219,MAGENTA,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 *qw;

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=qw;(*pw)=qw;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=0xa;

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;

clrscr();

for(i=0;i20;i++)

for(j=0;j20;j++)

ghouse[i][j]=0;

_AL=3;

_AH=0;

geninterrupt(0x10);

gotoxy(40,4);

printf("Welcome to push 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("April 30th 2004.");

}/* 第一关的图象初始化 */

winer *inithouse1()

{

int x,y;

winer *win=NULL,*pw;

gotoxy(8,2);

printf("Level No.1");

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);

return win;

}

(责任编辑:IT教学网)

更多

推荐windows vista文章