努力学习C++中
心血来潮,觉得自己需要一个博客,于是翻到自己做的第一个项目–推箱子,之后会将自己的学习之路都放上来
之前写的时候还只学到了数组,所以推箱子只会涉及到数组和函数
程序实现了:基本推箱子的功能之外还实现了重玩,计步,有效撤回(撞墙的步数不计在内)
由于写的比较粗略,代码较长,下面只放上核心代码
void MoveLogic(int a, int b)
{
//如果人物前面是空地
if (space == map[level][posx + a][posy + b])
{
//如果人物在成功点上
if (winhum == map[level][posx][posy])
{
map[level][posx][posy] = win;
map[level][posx + a][posy + b] = hum;
posx += a;
posy += b;
}
//如果人物不在成功点上
else
{
map[level][posx][posy] = space;
map[level][posx + a][posy + b] = hum;
posx += a;
posy += b;
}
}
//如果人物前面是箱子
else if (box == map[level][posx + a][posy + b])
{
//如果箱子前面是空地
if (space == map[level][posx + 2 * a][posy + 2 * b])
{
//如果人物在成功点上
if (winhum == map[level][posx][posy])
{
map[level][posx][posy] = win;//人变成功点
map[level][posx + a][posy + b] = hum;//箱子变人
map[level][posx + 2 * a][posy + 2 * b] = box;//空地变箱子
posx += a;
posy += b;
}
//如果人物不在成功点上
else
{
map[level][posx + 2 * a][posy + 2 * b] = box;//空地变成箱子
map[level][posx + a][posy + b] = hum;//箱子变成人
map[level][posx][posy] = space;//人变空地
posx += a;
posy += b;
}
}
//如果箱子前面是成功点
else if (win == map[level][posx + 2 * a][posy + 2 * b])
{
//如果人物在成功点上
if (winhum == map[level][posx][posy])
{
map[level][posx][posy] = win;//人变成功点
map[level][posx + a][posy + b] = hum;//箱子变人
map[level][posx + 2 * a][posy + 2 * b] = winbox;//成功点变箱子与成功点的集合
posx += a;
posy += b;
}
//如果人物不在成功点上
else
{
map[level][posx][posy] = space;//人变成空地
map[level][posx + a][posy + b] = hum;//箱子变人
map[level][posx + 2 * a][posy + 2 * b] = winbox;//成功点变箱子与成功点的集合
posx += a;
posy += b;
}
}
}
//如果人物前面是成功点
else if (win == map[level][posx + a][posy + b])
{
//如果人物前面是成功点且人在成功点上
if (winhum == map[level][posx][posy])
{
map[level][posx][posy] = win;//人变成功点
map[level][posx + a][posy + b] = winhum;//成功点的人
posx += a;
posy += b;
}
else
{
map[level][posx][posy] = space;//人变空地
map[level][posx + a][posy + b] = winhum;//成功点的人
posx += a;
posy += b;
}
}
//如果人物前面是成功点和箱子的集合
else if (winbox == map[level][posx + a][posy + b])
{
//如果成功点和箱子的集合的前面是空地
if (space == map[level][posx + 2 * a][posy + 2 * b])
{
//如果人物在成功点上
if (winhum == map[level][posx][posy])
{
map[level][posx + 2 * a][posy + 2 * b] = box;//空地变箱子
map[level][posx + a][posy + b] = winhum;//成功点和箱子的集合变成功点与人的集合
map[level][posx][posy] = win;//成功点与人的集合变成功点
posx += a;
posy += b;
}
//如果人物不在成功点上
else
{
map[level][posx + 2 * a][posy + 2 * b] = box;//空地变箱子
map[level][posx + a][posy + b] = winhum;//成功点和箱子的集合变成功点与人的集合
map[level][posx][posy] = space; //成功点与人的集合变空地
posx += a;
posy += b;
}
}
//如果成功点和箱子的集合的前面是成功点
else if (win == map[level][posx + 2 * a][posy + 2 * b])
{
//如果人物在成功点上
if (winhum == map[level][posx][posy])
{
map[level][posx + 2 * a][posy + 2 * b] = winbox;//成功点变成功点和箱子的集合
map[level][posx + a][posy + b] = winhum;//成功点和箱子的集合变成功点与人的集合
map[level][posx][posy] = win;//成功点与人的集合变成功点
posx += a;
posy += b;
}
//如果人物不在成功点上
else
{
map[level][posx + 2 * a][posy + 2 * b] = winbox;成功点变成功点和箱子的集合
map[level][posx + a][posy + b] = winhum;//成功点和箱子的集合变成功点与人的集合
map[level][posx][posy] = space; //成功点与人的集合变空地
posx += a;
posy += b;
}
}
}
if (flagX != posx || flagY != posy)//若坐标未改变,不能撤回
recall = false;
}
计步
bool stoneChange()//计步:仅记录有效步数
{
if (flagX != posx || flagY != posy)
{
time++;
//更新一次地图信息
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
map_Z[i][j] = map_m[i][j];
}
}
return true;
}
return false;
}
新手之作,粗略见谅
若想要源码的请移步
https://download.csdn.net/download/weixin_42322684/10626742