C语言推箱子源代码推箱子代码完善

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++)

相关文档
最新文档