void CPushBoxDlg::MoveDown(int x, int y) {
if ((x + 1) > 19) {
return;
}
Pos_x = x;
Pos_y = y;
switch (map[x + 1][y])//判断下一个位置的物体是什么
{
case WALL://墙
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
not_move++;
break;
case BOX://下一个是箱子
if ((x + 2) > 20){//如果下一个目标越界的话
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
not_move++;
break;
}
else if (map[x + 2][y] == LINE)//箱子的下一个如果是路
{
if (map[x][y] == MANINAIM) {
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MAN;
map[x + 2][y] = BOX;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MAN;
map[x + 2][y] = BOX;
map[x][y] = LINE;
CurrentStep++;
}
else if (map[x + 2][y] == AIM)//判断箱子的下下一个如果是目标
{
if (map[x][y] == MANINAIM)
{
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MAN;
map[x + 2][y] = BOXINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MAN;
map[x + 2][y] = BOXINAIM;
map[x][y] = LINE;
CurrentStep++;
}
else
{
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
not_move++;
}
break;
case BOXINAIM://如果下一个是箱子在目标里面
if (x + 2 > 20)//如果下下一个越界了
break;
else if (map[x + 2][y] == LINE)//判断下下一个如果是路
{
if (map[x][y] == MANINAIM) {
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MAN;
map[x + 2][y] = BOX;
map[x][y] = AIM;
CurrentStep++;
}
else {
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MANINAIM;
map[x + 2][y] = BOX;
map[x][y] = LINE;
CurrentStep++;
}
}
else if (map[x + 2][y] == AIM)//判断下下一个如果是目标
{
if (map[x][y] == MANINAIM) {
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MANINAIM;
map[x + 2][y] = BOXINAIM;
map[x][y] = AIM;
CurrentStep++;
}
else {
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MANINAIM;
map[x + 2][y] = BOXINAIM;
map[x][y] = LINE;
CurrentStep++;
}
}else{
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
not_move++;
}
break;
case LINE:
if (map[x][y] == MANINAIM)//如果玩家在目标里面
{
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MAN;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MAN;
map[x][y] = LINE;
CurrentStep++;
break;
case AIM:
if (map[x][y] == MANINAIM)
{
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MANINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVEDOWN;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x + 1][y];
history_d2 = map[x + 2][y];
map[x + 1][y] = MANINAIM;
map[x][y] = LINE;
CurrentStep++;
break;
default:
break;
}
Invalidate(false);
}
void CPushBoxDlg::MoveUp(int x, int y)
{
if (x - 1 < 0)
{
return;
}
Pos_x = x;
Pos_y = y;
switch (map[x - 1][y])
{
case WALL:
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
not_move++;
break;
case BOX:
if (x - 2 < 0) {
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
not_move++;
break;
}
else if (map[x - 2][y] == LINE)
{
if (map[x][y] == MANINAIM)
{
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MAN;
map[x - 2][y] = BOX;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MAN;
map[x - 2][y] = BOX;
map[x][y] = LINE;
CurrentStep++;
}
else if (map[x - 2][y] == AIM)
{
if (map[x][y] == MANINAIM)
{
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MAN;
map[x - 2][y] = BOXINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MAN;
map[x - 2][y] = BOXINAIM;
map[x][y] = LINE;
CurrentStep++;
}
else {
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
not_move++;
}
break;
case LINE:
if (map[x][y] == MANINAIM)
{
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MAN;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MAN;
map[x][y] = LINE;
CurrentStep++;
break;
case AIM:
if (map[x][y] == MANINAIM)
{
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MANINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MANINAIM;
map[x][y] = LINE;
CurrentStep++;
break;
case BOXINAIM://如果下一个是箱子在目标里面
if (x - 2 < 0)//如果下下一个越界了
break;
else if (map[x - 2][y] == LINE)//判断下下一个如果是路
{
if (map[x][y] == MANINAIM)
{
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 2][y] = BOX;
map[x - 1][y] = MANINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MANINAIM;
map[x - 2][y] = BOX;
map[x][y] = LINE;
CurrentStep++;
}
else if (map[x - 2][y] == AIM)//判断下下一个如果是目标
{
if (map[x][y] == MANINAIM)
{
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MANINAIM;
map[x - 2][y] = BOXINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
map[x - 1][y] = MANINAIM;
map[x - 2][y] = BOXINAIM;
map[x][y] = LINE;
CurrentStep++;
}
else {
movetype = MOVEUP;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x - 1][y];
history_d2 = map[x - 2][y];
not_move++;
}
break;
default:
break;
}
Invalidate(false);
}
void CPushBoxDlg::MoveLeft(int x, int y)
{
if (y - 1 < 0)
{
return;
}
Pos_x = x;
Pos_y = y;
switch (map[x][y - 1])
{
case WALL:
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y-1];
history_d2 = map[x][y-2];
not_move++;
break;
case BOX:
if (y - 2 < 0) {
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
not_move++;
break;
}
else if (map[x][y - 2] == LINE)
{
if (map[x][y] == MANINAIM)
{
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 1] = MAN;
map[x][y - 2] = BOX;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 1] = MAN;
map[x][y - 2] = BOX;
map[x][y] = LINE;
CurrentStep++;
}
else if (map[x][y - 2] == AIM)
{
if (map[x][y] == MANINAIM)
{
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 1] = MAN;
map[x][y - 2] = BOXINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 1] = MAN;
map[x][y - 2] = BOXINAIM;
map[x][y] = LINE;
CurrentStep++;
}
else {
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
not_move++;
}
break;
case LINE:
if (map[x][y] == MANINAIM)
{
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 1] = MAN;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 1] = MAN;
map[x][y] = LINE;
CurrentStep++;
break;
case AIM:
if (map[x][y] == MANINAIM)
{
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 1] = MANINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 1] = MANINAIM;
map[x][y] = LINE;
CurrentStep++;
break;
case BOXINAIM://如果下一个是箱子在目标里面
if (y - 2 < 0)//如果下下一个越界了
break;
else if (map[x][y - 2] == LINE)//判断下下一个如果是路
{
if (map[x][y] == MANINAIM)
{
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 2] = BOX;
map[x][y - 1] = MANINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 1] = MANINAIM;
map[x][y - 2] = BOX;
map[x][y] = LINE;
CurrentStep++;
}
else if (map[x][y - 2] == AIM)//判断下下一个如果是目标
{
if (map[x][y] == MANINAIM)
{
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 2] = BOXINAIM;
map[x][y - 1] = MANINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
map[x][y - 1] = MANINAIM;
map[x][y - 2] = BOXINAIM;
map[x][y] = LINE;
CurrentStep++;
}
else {
movetype = MOVELEFT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y - 1];
history_d2 = map[x][y - 2];
not_move++;
}
break;
default:
break;
}
Invalidate(false);
}
void CPushBoxDlg::MoveRight(int x, int y)
{
if (y + 1 > 19)
{
return;
}
Pos_x = x;
Pos_y = y;
switch (map[x][y + 1])
{
case WALL:
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
not_move++;
break;
case BOX:
if (y + 2 > 20) {
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
not_move++;
break;
}
else if (map[x][y + 2] == LINE)
{
if (map[x][y] == MANINAIM)
{
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 1] = MAN;
map[x][y + 2] = BOX;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 1] = MAN;
map[x][y + 2] = BOX;
map[x][y] = LINE;
CurrentStep++;
}
else if (map[x][y + 2] == AIM)
{
if (map[x][y] == MANINAIM)
{
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 1] = MAN;
map[x][y + 2] = BOXINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 1] = MAN;
map[x][y + 2] = BOXINAIM;
map[x][y] = LINE;
CurrentStep++;
}
else {
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
not_move++;
}
break;
case LINE:
if (map[x][y] == MANINAIM)
{
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 1] = MAN;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 1] = MAN;
map[x][y] = LINE;
CurrentStep++;
break;
case AIM:
if (map[x][y] == MANINAIM)
{
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 1] = MANINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 1] = MANINAIM;
map[x][y] = LINE;
CurrentStep++;
break;
case BOXINAIM://如果下一个是箱子在目标里面
if (y + 2 > 20)//如果下下一个越界了
break;
else if (map[x][y + 2] == LINE)//判断下下一个如果是路
{
if (map[x][y] == MANINAIM)
{
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 2] = BOX;
map[x][y + 1] = MANINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 1] = MANINAIM;
map[x][y + 2] = BOX;
map[x][y] = LINE;
CurrentStep++;
}
else if (map[x][y + 2] == AIM)//判断下下一个如果是目标
{
if (map[x][y] == MANINAIM)
{
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 2] = BOXINAIM;
map[x][y + 1] = MANINAIM;
map[x][y] = AIM;
CurrentStep++;
break;
}
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
map[x][y + 1] = MANINAIM;
map[x][y + 2] = BOXINAIM;
map[x][y] = LINE;
CurrentStep++;
}
else {
movetype = MOVERIGHT;
//记录历史记录
history_d = map[x][y];
history_d1 = map[x][y + 1];
history_d2 = map[x][y + 2];
not_move++;
}
break;
default:
break;
}
Invalidate(false);
}
2020-07-08-03
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。