C语言推箱子小游戏程序

  • 格式:doc
  • 大小:55.00 KB
  • 文档页数:10

下载文档原格式

  / 32
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

推箱子程序:

#include

#include

#include

#define U 1

#define D 2

#define L 3

#define R 4 //按键状态,U:上;D:下;L:左R:右

#define ofx 10

#define ofy 9 //x,y方向偏移量

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 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 regame; //是否重玩

//声明全部函数//

void Pos(int x,int y); //设置光标位置

void welcometogame(); //开始界面

void initgame(); //初始化游戏

void startgame(); //开始游戏

void copybox(int copy[9][2],int b[9][2]); //复制箱子信息

void loadmap(); //加载地图

void printfoverlap(int b[9][2]); //打印重叠箱子位置

void move(); //玩家移动

void trans(int p[2],int q[2]); //状态传递

void inputmap(int a[][2]); //输入地图数据

void gamecircle(); //控制游戏

int main()

{

system("mode con cols=80 lines=30"); //控制台宽度80,高度30

welcometogame();

initgame();

for(level=0;level<4;level++)

{

p=Group+level;

startgame();

}

system("cls");

Pos(32,14);

printf("恭喜你已通过所有关卡!\n");

system("pause");

}

void Pos(int x,int y) //设置光标位置

{

COORD pos;

HANDLE hOutput;

pos.X=x;pos.Y=y;

hOutput=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(hOutput,pos);

}

void welcometogame() //开始界面

{

system("title C语言程序游戏之推箱子");

Pos(31,13);

printf("欢迎来到推箱子游戏!");

Pos(55,25);

printf(" 作者:小葱\n");

system("pause");

system("cls");

Pos(29,12);

printf("用↑.↓.←.→控制人物的移动。");

Pos(29,13);

printf("按F2重新开始此局。");

Pos(29,14);

printf("按ESC结束游戏。\n");

system("pause");

system("cls");

}

void startgame() //开始游戏

{

while(1)

{

system("cls");

Pos(25,5);

printf("第%d关",level+1);

Pos(40,2);

printf("按F2重新开始此局。");

Pos(40,3);

printf("按ESC结束游戏。");

loadmap();

gamecircle();

if(regame==0) //regame为0不重玩

break;

else if(regame==1) //regame为1重玩

regame=0;

}

Sleep(300);

}

void loadmap() //加载地图

{

int i;

Pos(2*(p->wall[0][0]+ofx),p->wall[0][1]+ofy);

printf("■");

for(i=1;p->wall[i][0]!=0 || p->wall[i][1]!=0;i++)//打印墙

{

Pos(2*(p->wall[i][0]+ofx),p->wall[i][1]+ofy);

printf("■");

}

for(i=0;p->des[i][0]!=0 || p->des[i][1]!=0;i++)//打印终点{

Pos(2*(p->des[i][0]+ofx),p->des[i][1]+ofy);

printf("×");

}

for(i=0;p->box[i][0]!=0 || p->box[i][1]!=0;i++)//打印箱子{

Pos(2*(p->box[i][0]+ofx),p->box[i][1]+ofy);

printf("◇");

}

printfoverlap(p->overlap); //打印重叠箱子位置Pos(2*(p->x+ofx),p->y+ofy); //打印玩家位置

printf(":)");

Pos(79,29);

}

void printfoverlap(int b[9][2]) //打印重叠箱子位置

{

int i;

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

{