C语言推箱子小游戏程序
- 格式:doc
- 大小:55.00 KB
- 文档页数:10
推箱子程序:
#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++)
{