C语言正反比例函数代码格式,c语言推箱子代码.doc

这是一个基于C语言实现的推箱子游戏程序。玩家通过键盘输入控制角色移动,目标是将箱子推到指定位置。游戏包含三个不同难度的地图,每个地图都有独特的布局和通关条件。程序使用了时间戳记录游戏耗时,并设有限时机制,超过30秒未完成操作会提示重新开始。此外,游戏还提供了退出选项。
摘要由CSDN通过智能技术生成

#include void map1();

void map2();

void map3();

void show();

void move();

void main(int argc,char*argv[])

{

time_t a,b;

time(&a);

system("color 1E");

loop1:{

system("cls");//刷屏

printf("\n\n\n\n\n\n\t\t\t\t欢迎进入推箱子游戏\n\n\t\t\t\t 请按a b c选择游戏\n\n\t\t\t\t 按 d 键 结束");

int t=getch();

if(t==d)

{

printf("\n\t\t\t ");

}

else

{

if(t==a)

{

map1();

goto loop1;

}

if(t==b)

{

map2();

goto loop1;

}

if(t==c)

{

map3();

goto loop1;

}

else

{

printf("\n\n\t\t\t\t 请重新输入:");

goto loop1;

}

}

}

time(&b);

printf("\n\n\n\n\t\t\t\t 游戏总共用时%.3d秒\n\t\t\t ",b-a);

getch();//等待读取回车符以结束程序

}

void map1()

{

time_t p,q,o;

time(&p);

int i=4,j=4,m=6,n=2,t=1,k=3;

system("cls");//刷屏

system("color 2E");

int x=1,y=7;

char z,a[9][9]=

{ /*为背景设置初始资料*/

{#,#,#,#,#,#,#,#,#},

{#,#,#, 3, 0 , 0 , 0 , 1 ,#},

{#,#, 0 , 0 , 0 ,#, 0 ,#,#},

{#, 0 , 0 ,#, 0 , 0 , 5 , 0 ,#},

{#, 0 , 5 , 5 , 3 , 0 , 0 , 0 ,#},

{#,#, 0 ,#, 0 , 0 ,#,#,#},

{#,#, 3 , 0 , 0 , 0 ,#,#,#},

{#,#,#,#,#,#,#,#,#},

{#,#,#,#,#,#,#,#,#}

};

show(a);//调用输出函数

loop://语句标号

move(a,&x,&y,i,j,m,n,t,k,&z);

if(a[i][j]==!&&a[m][n]==!&&a[t][k]==!)

{

system("cls");//刷屏

show(a);

printf("\t\t\t\t YOU ARE WIN!\n");

time(&q);

printf("\t\t\t\t\t 用时%.3d秒\n",q-p);

printf("\t\t\t\t*******回车重 新选择*******\n\t\t\t\t");

getch();

}

else

{

time(&o);

if(z==d)

{

return;

}

if(o-p>30)

{

loop1:system("cls");//刷屏

printf("\t\t\t\t时间已过请重新回车选关!");

int g=getch();

if(g==13)//判断是否为回车符

{

return;

}

else

{

goto loop1;

}

}

system("cls");//刷屏

show(a);//调用输出函数

goto loop;

}

}

void map2()

{

time_t p,q,o;

time(&p);

int i=2,j=1,m=1,n=3,t=4,k=6;

system("cls");//刷屏

system("color 2E");

int x=4,y=1;

char z,b[9][9]=

{ /*为背景设置初始资料*/

{#,#,#,#,#,#,#,#,#},

{#,#,#, 3 , 0 ,#,#,#,#},

{#, 3 ,#, 0 , 0 , 0 , 0 ,#,#},

{#, 0 , 5 , 0 ,#,#, 0 , 0 ,#},

{#, 1 , 0 , 5 , 0 , 0 , 3 , 0 ,#},

{#, 0 , 0 , 0 , 0 , 0 , 0 ,#,#},

{#,#,#, 0 , 0 , 5 ,#,#,#},

{#,#,#,#, 0 , 0 ,#,#,#},

{#,#,#,#,#,#,#,#,#}

};

show(b);//调用输出函数

loop://语句标号

move(b,&x,&y,i,j,m,n,t,k,&z);

if(b[i][j]==!&&b[m][n]==!&&b[t][k]==!)

{

system("cls");//刷屏

show(b);

printf("\t\t\t\t YOU ARE WIN!\n");

time(&q);

printf("\t\t\t\t\t 用时%.3d秒\n",q-p);

printf("\t\t\t\t*******回车重 新选择*******\n\t\t\t\t");

getch();

}

else

{

time(&o);

if(z==d)

{

return;

}

if(o-p>30)

{

loop1:system("cls");//刷屏

printf("\t\t\t\t时间已过请重新回车选关!");

int g=getch();

if(g==13)//判断是否为回车符

{

return;

}

else

{

goto loop1;

}

}

system("cls");//刷屏

show(b);//调用输出函数

goto loop;

}

}

void map3()

{

time_t p,q,o;

time(&p);

int i=2,j=1,m=6,n=2,t=7,k=6;

system("cls");//刷屏

system("color 2E");

int x=3,y=6;

char z,c[9][9]=

{ /*为背景设置初始资料*/

{#,#,#,#,#,#,#,#,#},

{#,#,#,#,#, 0 , 0 , 0 ,#},

{#, 3 ,#, 0 , 0 , 0 , 0 , 0 ,#},

{#, 0 , 5 , 0 , 5 ,#, 1 ,#,#},

{#, 0 , 0 , 0 , 0 , 0 , 5 , 0 ,#},

{#,#, 0 , 0 , 0 , 0 , 0 , 0 ,#},

{#,#, 3 , 0 ,#, 0 ,#, 0 ,#},

{#,#,#, 0 , 0 , 0 , 3 ,#,#},

{#,#,#,#,#,#,#,#,#}

};

show(c);//调用输出函数

loop://语句标号

move(c,&x,&y,i,j,m,n,t,k,&z);

if(c[i][j]==!&&c[m][n]==!&&c[t][k]==!)

{

system("cls");//刷屏

show(c);

printf("\t\t\t\t YOU ARE WIN!\n");

time(&q);

printf("\t\t\t\t\t 用时%.3d秒\n",q-p);

printf("\t\t\t\t*******回车重 新选择*******\n\t\t\t\t");

getch();

}

else

{

time(&o);

if(z==d)

{

return;

}

if(o-p>30)

{

loop1:system("cls");//刷屏

printf("\t\t\t\t时间已过请重新回车选关!");

int g=getch();

if(g==13)//判断是否为回车符

{

return;

}

else

{

goto loop1;

}

}

system("cls");//刷屏

show(c);//调用输出函数

goto loop;

}

}

void show(char b[9][9])

{

printf("\t\t\t\t***************************\n");

printf("\t\t\t\t 推箱子游戏 ");

printf("\n\t\t\t\t***************************\n");

printf("\t\t\t\t 人:★ 墙:■\n\t\t\t\t 箱子:◎ 目的地:□\n\t\t\t\t 按 d 键 退出游戏\n\t\t\t\t 限时30秒!");

printf("\n\t\t\t\t***************************\n");

int i;

int k;

for(i=0;i<9;i++) //使用循环将地图转换输出

{

printf("\t\t\t\t ");

for(k=0;k<9;k++)

{

if(b[i][k]==#)

{

printf("■");

}

else

{

if(b[i][k]==3)

{

printf("□");

}

else

{

if(b[i][k]==5)

{

printf("◎");

}

else

{

if(b[i][k]==1)

{

printf("★");

}

else

{

if(b[i][k]==0)

{

printf(" ");

}

else

{

if(b[i][k]==!)

{

printf("⊙");

}

else

printf("%c ",b[i][k]);

}

}

}

}

}

}

printf("\n");

}

printf("\t\t\t\t***************************\n");

}

void move(char c[9][9],int *x,int *y,int X,int Y,int A,int B,int N,int M,char *t)

{

*t=getch();//用getch()得到上下左右键,要调用二次getch(),上键72,下键80,左键75,右键77.

if(*t==d){}//遇到d返回

if(*t==75)//左键

{

if(c[*x][*y-1]==#||c[*x][*y-1]==5&&c[*x][*y-2]==5

||c[*x][*y-1]==5&&c[*x][*y-2]==!){}//遇到墙或推两个箱子

else

{

if(c[*x][*y-1]==!)//把箱子推出目的地

{

if(c[*x][*y-2]!=0){}

else

{

c[*x][*y]=0;

*y-=1;

c[*x][*y]=1;

c[*x][*y-1]=5;

}

}

else

{

if(c[*x][*y-1]==5&&c[*x][*y-2]!=#)//推箱子

{

if(c[*x][*y]==c[X][Y]||c[*x][*y]==c[A][B]

||c[*x][*y]==c[N][M]) //推着箱子离开目的地

{

c[*x][*y]=3;

*y-=1;

c[*x][*y]=1;

c[*x][*y-1]=5;

}

else

{

c[*x][*y]=0;

*y-=1;

c[*x][*y]=1;

c[*x][*y-1]=5;

}

}

else

{

if(c[*x][*y-1]==5&&c[*x][*y-2]==#){}//推不动箱子

else

{

if(c[*x][*y-1]==c[X][Y]||c[*x][*y-1]==c[A][B]

||c[*x][*y-1]==c[N][M])//进到目的地

{

c[*x][*y]=0;

*y-=1;

c[*x][*y]=1;

}

else

{

if(c[*x][*y]==c[X][Y]||c[*x][*y]==c[A][B]

||c[*x][*y]==c[N][M]) //离开目的地

{

c[*x][*y]=3;

*y-=1;

c[*x][*y]=1;

}

else //走到空地

{

c[*x][*y]=0;

*y-=1;

c[*x][*y]=1;

}

}

}

}

}

}

if(c[X][Y]==5||c[A][B]==5||c[N][M]==5)//箱子推到目的地

{

c[*x][*y-1]=!;

}

}

if(*t==77)//右键

{

if(c[*x][*y+1]==#||c[*x][*y+1]==5&&c[*x][*y+2]==5

||c[*x][*y+1]==5&&c[*x][*y+2]==!){}//遇到墙或推两个箱子

else

{

if(c[*x][*y+1]==!)//把箱子推出目的地

{

if(c[*x][*y+2]!=0){}

else

{

c[*x][*y]=0;

*y+=1;

c[*x][*y]=1;

c[*x][*y+1]=5;

}

}

else

{

if(c[*x][*y+1]==5&&c[*x][*y+2]!=#)//推箱子

{

if(c[*x][*y]==c[X][Y]||c[*x][*y]==c[A][B]

||c[*x][*y]==c[N][M]) //推着箱子离开目的地

{

c[*x][*y]=3;

*y+=1;

c[*x][*y]=1;

c[*x][*y+1]=5;

}

else

{

c[*x][*y]=0;

*y+=1;

c[*x][*y]=1;

c[*x][*y+1]=5;

}

}

else

{

if(c[*x][*y+1]==5&&c[*x][*y+2]==#){}//推不动箱子

else

{

if(c[*x][*y+1]==c[X][Y]||c[*x][*y+1]==c[A][B]

||c[*x][*y+1]==c[N][M])//进到目的地

{

c[*x][*y]=0;

*y+=1;

c[*x][*y]=1;

}

else

{

if(c[*x][*y]==c[X][Y]||c[*x][*y]==c[A][B]

||c[*x][*y]==c[N][M]) //离开目的地

{

c[*x][*y]=3;

*y+=1;

c[*x][*y]=1;

}

else //走到空地

{

c[*x][*y]=0;

*y+=1;

c[*x][*y]=1;

}

}

}

}

}

}

if(c[X][Y]==5||c[A][B]==5||c[N][M]==5)//箱子推到目的地

{

c[*x][*y+1]=!;

}

}

if(*t==72)//上键

{

if(c[*x-1][*y]==#||c[*x-1][*y]==5&&c[*x-2][*y]==5

||c[*x-1][*y]==5&&c[*x-2][*y]==!){}//遇到墙或推两个箱子

else

{

if(c[*x-1][*y]==!)//把箱子推出目的地

{

if(c[*x-2][*y]!=0){}

else

{

c[*x][*y]=0;

*x-=1;

c[*x][*y]=1;

c[*x-1][*y]=5;

}

}

else

{

if(c[*x-1][*y]==5&&c[*x-2][*y]!=#)//推箱子

{

if(c[*x][*y]==c[X][Y]||c[*x][*y]==c[A][B]

||c[*x][*y]==c[N][M]) //推着箱子离开目的地

{

c[*x][*y]=3;

*x-=1;

c[*x][*y]=1;

c[*x-1][*y]=5;

}

else

{

c[*x][*y]=0;

*x-=1;

c[*x][*y]=1;

c[*x-1][*y]=5;

}

}

else

{

if(c[*x-1][*y]==5&&c[*x-2][*y]==#){}//推不动箱子

else

{

if(c[*x-1][*y]==c[X][Y]||c[*x-1][*y]==c[A][B]

||c[*x-1][*y]==c[N][M])//进到目的地

{

c[*x][*y]=0;

*x-=1;

c[*x][*y]=1;

}

else

{

if(c[*x][*y]==c[X][Y]||c[*x][*y]==c[A][B]

||c[*x][*y]==c[N][M]) //离开目的地

{

c[*x][*y]=3;

*x-=1;

c[*x][*y]=1;

}

else //走到空地

{

c[*x][*y]=0;

*x-=1;

c[*x][*y]=1;

}

}

}

}

}

}

if(c[X][Y]==5||c[A][B]==5||c[N][M]==5)//箱子推到目的地

{

c[*x-1][*y]=!;

}

}

if(*t==80)//下键

{

if(c[*x+1][*y]==#||c[*x+1][*y]==5&&c[*x+2][*y]==5

||c[*x+1][*y]==5&&c[*x+2][*y]==!){}//遇到墙或推两个箱子

else

{

if(c[*x+1][*y]==!)//把箱子推出目的地

{

if(c[*x+2][*y]!=0){}

else

{

c[*x][*y]=0;

*x+=1;

c[*x][*y]=1;

c[*x+1][*y]=5;

}

}

else

{

if(c[*x+1][*y]==5&&c[*x+2][*y]!=#)//推箱子

{

if(c[*x][*y]==c[X][Y]||c[*x][*y]==c[A][B]

||c[*x][*y]==c[N][M]) //推着箱子离开目的地

{

c[*x][*y]=3;

*x+=1;

c[*x][*y]=1;

c[*x+1][*y]=5;

}

else

{

c[*x][*y]=0;

*x+=1;

c[*x][*y]=1;

c[*x+1][*y]=5;

}

}

else

{

if(c[*x+1][*y]==5&&c[*x+2][*y]==#){}//推不动箱子

else

{

if(c[*x+1][*y]==c[X][Y]||c[*x+1][*y]==c[A][B]

||c[*x+1][*y]==c[N][M])//进到目的地

{

c[*x][*y]=0;

*x+=1;

c[*x][*y]=1;

}

else

{

if(c[*x][*y]==c[X][Y]||c[*x][*y]==c[A][B]

||c[*x][*y]==c[N][M]) //离开目的地

{

c[*x][*y]=3;

*x+=1;

c[*x][*y]=1;

}

else //走到空地

{

c[*x][*y]=0;

*x+=1;

c[*x][*y]=1;

}

}

}

}

}

}

if(c[X][Y]==5||c[A][B]==5||c[N][M]==5)//箱子推到目的地

{

c[*x+1][*y]=!;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值