C语言推箱子源代码推箱子代码完善
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
typedef struct MAP//地图
{
int wall[50][2];//墙
int box[9][2];//箱子
int des[9][2];//终点
int overlap[9][2];//箱子与终点的重叠位置
int all,now;//总箱子个数,到位箱子个数
int x,y;//起点
} MAP,*map;
//全局变量//
int U=1,D=2,L=3,R=4; //定义按键状态
//int jump;
int ofx=10,ofy=9; //定义xy偏移量
int player[2];//玩家位置
int nextp[2],nextb[2];//玩家下一步位置,箱子下一步位置MAP Pass[5];//关卡数组
map Group,p;//关卡数组指针,当前关卡指针
int level;//关卡等级
int status;//玩家状态
int boxc[9][2],overlapc[9][2];//箱子状态栈,重叠箱子状态栈int nowbox;//当前到位箱子个数
int reset;//是否重玩
//声明全部函数//
void Pos(int x,int y)//设置光标位置
{
COORD pos;
HANDLE hOutput;
pos.X=x;
pos.Y=y;
hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput,pos);
system("color 3B");
}
void welcometogame()//开始界面
{
system("title 2017程序设计之推箱子");
Pos(28,3);
printf("欢迎来到推箱子!");
Pos(50,24);
printf(" 软件1603 刘刈16110572087\n");
Pos(27,9);
printf("用↑.↓.←.→控制人物的移动。");
Pos(27,10);
printf("按空格键重新开始此局。");
Pos(27,11);
printf("按ESC结束游戏。\n");
Pos(0,22);
system("pause");
if(GetAsyncKeyState(VK_ESCAPE))
{
system("cls");
Pos(34,14);
printf("欢迎下次再玩。");
Pos(25,20);
printf("请按任意键退出。");
getch();
exit(0);
}
system("cls");
}
void inputmap(int a[][2])//创建地图数据
{
int i,k;
p->x=a[0][0];
p->y=a[0][1];//玩家坐标
p->all=a[1][0];
p->now=a[1][1];//箱子状态
for(k=0,i=2; i<2+p->now; i++,k++) //输入重叠箱子信息{
p->overlap[k][0]=a[i][0];
p->overlap[k][1]=a[i][1];
}
for(k=0; i<2+p->now+p->all; i++,k++) //输入终点信息
{
p->des[k][0]=a[i][0];
p->des[k][1]=a[i][1];
}
for(k=0; i<2+p->now+2*p->all; i++,k++) //输入箱子信息{
p->box[k][0]=a[i][0];
p->box[k][1]=a[i][1];
}
for(k=0; a[i][0]!=666; i++,k++) //输入墙的信息
{
p->wall[k][0]=a[i][0];
p->wall[k][1]=a[i][1];
}
}
void initgame()//初始化游戏
{
//[0][0],[0][1]是玩家起始位置,[1][0],[1][1]是箱子个数和到位个数,//之后是重叠箱子位置,终点位置,箱子位置,墙位置
int a0[50][2]= {{4,4},{4,0},{1,4},{3,1},{4,6},{6,3},{3,3},{3,4},{4,5},{5,3}, {0,3},{0,4},{0,5},{1,3},{1,5},{2,0},{2,1},{2,2},{2,3},{2,5},
{3,0},{3,5},{3,6},{3,7},{4,0},{4,1},{4,2},{4,7},
{5,2},{5,4},{5,5},{5,6},{5,7},{6,2},{6,4},{7,2},{7,3},{7,4},{666,666} },
a1[50][2]= {{1,1},{3,0},{7,3},{7,4},{7,5},{2,2},{2,3},{3,2},
{0,0},{0,1},{0,2},{0,3},{0,4},{1,0},{1,4},{1,5},{1,6},{1,7},{1,8},
{2,0},{2,4},{2,5},{2,8},{3,0},{3,8},{4,0},{4,1},{4,2},{4,3},{4,4},{4,8},
{5,4},{5,6},{5,7},{5,8},{6,2},{6,3},{6,4},{6,7},{7,2},{7,7},
{8,2},{8,3},{8,4},{8,5},{8,6},{8,7},{666,666}
},
a2[50][2]= {{2,3},{4,0},{2,4},{2,5},{3,4},{3,5},{2,2},{4,3},{6,4},{7,3}, {0,2},{0,3},{0,4},{0,5},{1,0},{1,1},{1,2},{1,5},{1,6},{2,0},{2,6},
{3,0},{3,2},{3,6},{4,0},{4,2},{4,4},{4,5},{4,6},{5,0},{5,2},{5,6},
{6,0},{6,6},{7,0},{7,1},{7,6},{8,1},{8,4},{8,5},{8,6},
{9,1},{9,2},{9,3},{9,4},{666,666}
},
a3[50][2]= {{1,2},{5,1},{3,6},{1,5},{1,6},{2,6},{3,6},{4,6},
{2,2},{2,3},{2,5},{3,4},{3,6},{0,1,},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},
{1,0},{1,1},{1,3},{1,4},{1,7},{2,0},{2,7},{3,0},{3,7},
{4,0},{4,1},{4,2},{4,3},{4,7},{5,3},{5,4},{5,5},{5,6},{5,7},{666,666} };
Group=Pass;
p=Group+0;
inputmap(a0);
p=Group+1;
inputmap(a1);
p=Group+2;
inputmap(a2);
p=Group+3;
inputmap(a3);
}
void printfoverlap(int b[9][2])//打印重叠箱子位置
{
int i;
for(i=0; i<9; i++)