震惊——全网注释最详细的推箱子源代码竟是一名大一学生所做 ~~(来自UC震惊部)
步入正题:主要为大家介绍了用C语言实现简单的推箱子小游戏,有兴趣的小伙伴可以参考一下。下面分块给出源代码,并附有详细注释。
游戏流程(在主函数中实现)
1.打印菜单界面
2.初始化地图
3.玩家进行操作
4.判断游戏是否结束(若未结束,则循环2、3步骤)
5.结束后询问玩家是否继续
6.若玩家选择继续游戏,则循环2、3、4步骤,否则退出程序。
程序中用到的头文件及自定义函数,功能已写出
?#include<stdio.h>
#include<stdlib.h>
#define LEVEL 3 //地图数量(关卡数量)
#define WIDTH 9 //定义地图宽度
#define HEIGHT 9 //定义地图高度
void moveUp(); //向上移动
void moveDown(); //向下移动
void moveLeft(); //向左移动
void moveRight(); //向右移动
void initialMap(); //初始化地图
void initialData(); //初始化数据
int boxs = 0; //全局变量:箱子个数
int choice; //全局变量:选择地图
int x, y; //全局变量:表示人的坐标
用二维数组存储地图,根据数组中不同数字打印地图中不同元素,目前仅有三个地图,有兴趣的同学可自行设计地图,体验更多关卡的乐趣~
int map[LEVEL][WIDTH][HEIGHT] = {
{
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 4, 0, 0, 0, 1, 0},
{0, 1, 0, 2, 0, 0, 1, 0},
{0, 1, 0, 0, 3, 0, 1, 0},
{0, 1, 0, 0, 0, 0, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
},
{
{0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 1, 4, 1, 0, 0, 0, 0},
{0, 0, 1, 0, 1, 1, 1, 1, 0},
{1, 1, 1, 3, 0, 3, 4, 1, 0},
{1, 4, 0, 3, 2, 1, 1, 1, 0},
{1, 1, 1, 1, 3, 1, 0, 0, 0},
{0, 0, 0, 1, 4, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0},
},
{
{1, 1, 1, 1, 1, 0, 0, 0, 0},
{1, 0, 0, 0, 1, 0, 0, 0, 0},
{1, 0, 3, 3, 1, 0, 1, 1, 1},
{1, 2, 3, 0, 1, 0, 1, 4, 1},
{1, 1, 1, 0, 1, 1, 1, 4, 1},
{0, 1, 1, 0, 0, 0, 0, 4, 1},
{0, 1, 0, 0, 0, 1, 0, 0, 1},
{0, 1, 0, 0, 0, 1, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 0, 0, 0},
}
};
初始化地图函数
void initialMap() //初始化地图
{
int i, j;
for(i=0;i<WIDTH;i++)
{
for(j=0;j<HEIGHT;j++)
{
switch(map[choice][i][j])
{
case 0:
printf(" "); //0代表空地
break;
case 1:
printf("■"); //1代表墙体
break;
case 2:
printf("♀"); //2代表玩家(人)
break;
case 3:
printf("◆"); //3代表箱子
break;
case 4:
printf("●"); //4代表目的地
break;
case 5:
printf("★"); //5代表已到达目的地的箱子
break;
case 6:
printf("♀"); //6代表站在目的地上的人
break;
}
}
printf("\n");
}
}
初始化数据(箱子数量,人的坐标)
void initialData()
{
int i, j;
printf("游戏加载中,请稍后.........");
//遍历地图中的数据
for(i = 0; i < HEIGHT; i++)
{
for(j = 0; j < WIDTH; j++)
{
//遍历到2(人)时,记录人的坐标。x, y是前面定义的全局变量
if(map[choice][i]