逻辑首先有控制台写了一下。

需要注意的地方不少:

  • 进一步,需要考虑3个层面的问题。
  1. 前面的位置是空地,成功点,墙,还是箱子。
  2. 前面是箱子的时候,箱子的前面是空地,墙,成功点,还是箱子。
  3. 当移动的时候,原先人的地点是空地,成功点,需要恢复。
  • 需要后退一步的时候,需要考虑两种情况。
  1. 恢复两个点的节点原先值。
  2. 由于上面2的情况,需要恢复3个点的原先值。

Source Code:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; struct State
{
public int posX, posY, mapx;
}; namespace PushBox
{ class Program
{
// 1 表示 强
// 2 表示 人
// 3 表示 箱子
// 4 表示 成功点
static int[,] map = new int[, ] {
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,}
};
static int posX, posY; static State[] list = new State[];
static int list_cnt = ;
//箱子个数
static int cube_cnt;
static int _cube_cnt;
//步数
static int cnt; static void pre_clear()
{
list_cnt = ;
}
static void pre_save(int POSX,int POSY)
{
list[list_cnt].posX = POSX;
list[list_cnt].posY = POSY;
list[list_cnt].mapx = map[POSX, POSY];
list_cnt++;
} static bool victory()
{
int flag_cube_cnt = ;
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (map[i, j] == )
flag_cube_cnt++;
}
}
return flag_cube_cnt == cube_cnt;
} static void init()
{
cube_cnt = ;
cnt = ;
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (map[i, j] == )
{
cube_cnt++;
}
if (map[i, j] == )
{
posX = i;
posY = j;
pre_save(i, j);
}
}
}
} static void draw()
{
Console.Clear();
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (map[i, j] == ) //#
{
System.Console.Write("■");
}
else if(map[i,j]==)
System.Console.Write(" ");
else if (map[i, j] == ) //pepole
{
System.Console.Write("♀");
}
else if(map[i,j] == )
{
System.Console.Write("△");
}
else if (map[i, j] == )
{
System.Console.Write("☆");
}
else if (map[i,j] == ) // 人 + 成功点
{
System.Console.Write("◎");
}
else if (map[i, j] == )
{
_cube_cnt++;
System.Console.Write("◆"); } }
Console.WriteLine(""); }
/*
System.Console.Write("步数:{0}\n保存的链表",cnt); for (int i = 0; i < list_cnt; i++)
{
Console.WriteLine("{0} {1} {2}", list[i].posX, list[i].posY, list[i].mapx); }*/
System.Console.WriteLine("按z键退回一步哦!");
} //向上移动
static void moveUp()
{
if (posX - >= )
{
if (map[posX - , posY] == ) // 空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY); map[posX, posY] = ;
map[posX-,posY] = ;
posX--;
//now_save();
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX-, posY);
map[posX, posY] = ;
map[posX-, posY] = ;
posX--;
}
}
else if (map[posX - , posY] == ) //成功点
{ if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
}
else if (map[posX - , posY] == ) // 箱子
{
if (posX - >= )
{
if (map[posX - , posY] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{ // pre_save();
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
}
else if (map[posX - , posY] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
} }
}
}
else if (map[posX - , posY] == ) // 箱子+成功点
{
if (posX - >= )
{
if (map[posX - , posY] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
}
else if (map[posX - , posY] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
} }
}
}
}
} //向下移动
static void moveDown()
{
if (posX + < )
{
if (map[posX + , posY] == ) // 空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY); map[posX, posY] = ;
map[posX + , posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY); map[posX, posY] = ;
map[posX + , posY] = ;
posX++;
}
}
else if (map[posX + , posY] == ) //成功点
{ if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
}
else if (map[posX + , posY] == ) // 箱子
{
if (posX + < )
{
if (map[posX + , posY] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
}
else if (map[posX + , posY] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
} }
}
}
else if (map[posX + , posY] == ) // 箱子+成功点
{
if (posX + < )
{
if (map[posX + , posY] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
}
else if (map[posX + , posY] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
} }
}
}
}
} static void moveLeft()
{
if (posY - >= )
{
if (map[posX , posY-] == ) // 空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY-); map[posX, posY] = ;
map[posX, posY-] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - ); map[posX, posY] = ;
map[posX, posY-] = ;
posY--;
}
}
else if (map[posX, posY-] == ) //成功点
{ if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
}
}
else if (map[posX, posY-] == ) // 箱子
{
if (posY - >= )
{
if (map[posX, posY-] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX , posY-] = ;
map[posX, posY-] = ;
map[posX, posY] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX , posY-] = ;
map[posX , posY-] = ;
map[posX, posY] = ;
posY--;
}
}
else if (map[posX , posY-] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY-] = ;
map[posX, posY-] = ;
map[posX, posY] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX , posY-] = ;
map[posX , posY-] = ;
map[posX, posY] = ;
posY--;
} }
}
}
else if (map[posX, posY-] == ) // 箱子+成功点
{
if (posY - >= )
{
if (map[posX, posY-] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY-] = ;
map[posX, posY-] = ;
map[posX, posY] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY-] = ;
map[posX, posY-] = ;
map[posX, posY] = ;
posY--;
}
}
else if (map[posX, posY-] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY-] = ;
map[posX, posY-] = ;
map[posX, posY] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY-] = ;
map[posX, posY-] = ;
map[posX, posY] = ;
posY--;
} }
}
}
}
} static void moveRight()
{
if (posY + < )
{
if (map[posX, posY + ] == ) // 空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + ); map[posX, posY] = ;
map[posX, posY + ] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + ); map[posX, posY] = ;
map[posX, posY + ] = ;
posY++;
}
}
else if (map[posX, posY + ] == ) //成功点
{ if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
}
else if (map[posX, posY + ] == ) // 箱子
{
if (posY + < )
{
if (map[posX, posY + ] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
}
else if (map[posX, posY + ] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
} }
}
}
else if (map[posX, posY + ] == ) // 箱子+成功点
{
if (posY + < )
{
if (map[posX, posY + ] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
}
else if (map[posX, posY + ] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
} }
}
}
}
} static bool move()
{
var info = Console.ReadKey();
if (info.Key == ConsoleKey.UpArrow||info.Key == ConsoleKey.W)
{
cnt++;
moveUp(); } else if (info.Key == ConsoleKey.DownArrow||info.Key == ConsoleKey.S)
{
cnt++;
moveDown();
} else if (info.Key == ConsoleKey.LeftArrow || info.Key == ConsoleKey.A)
{
cnt++;
moveLeft();
} else if (info.Key == ConsoleKey.RightArrow || info.Key == ConsoleKey.D)
{
cnt++;
moveRight();
}
else if (info.Key == ConsoleKey.Z)
{
if (list_cnt > )
{
cnt--;
for (int i = ; i < list_cnt; i++)
{
int tx = list[i].posX;
int ty = list[i].posY;
int tmax = list[i].mapx; map[tx, ty] = tmax; }
posX = list[].posX;
posY = list[].posY;
pre_clear();
} }
return victory();
} static void Main(string[] args)
{
// System.Console.WriteLine("Hello");
for (int i = ; i < ; i++)
{
init();
while (true)
{ draw();
if (move()==true)
{
break;
}
}
Console.Clear(); Console.WriteLine("恭喜!");
Console.ReadKey();
} }
}
}

PushBox

基本上整个推箱子的逻辑部分就已经完成了,现在只要在Unity下进行实例化就可以了。

Source Code:

 using UnityEngine;
using System.Collections;
using UnityEngine.UI; struct State
{
public int posX, posY, mapx;
}
public class Map : MonoBehaviour
{ public GameObject wallPre;
public GameObject Box;
public GameObject Point;
public GameObject EndPoint;
public GameObject man; int posX, posY; State[] list = new State[];
int list_cnt = ;
//箱子个数
int cube_cnt;
int _cube_cnt;
//步数
int cnt; void pre_clear()
{
list_cnt = ;
}
void pre_save(int POSX, int POSY)
{
list[list_cnt].posX = POSX;
list[list_cnt].posY = POSY;
list[list_cnt].mapx = map[POSX, POSY];
list_cnt++;
}
bool victory()
{
int flag_cube_cnt = ;
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (map[i, j] == )
flag_cube_cnt++;
}
}
return flag_cube_cnt == cube_cnt;
} static int[,] map = new int[, ]
{
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
};
static int[,] map_1 = new int[, ] {
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
}; static int[,] map_2 = new int[, ] {
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
}; GameObject x;
// Use this for initialization
void Start()
{
x = GameObject.Find("victory_UI");
x.SetActive(false);
init();
draw();
}
// Update is called once per frame
void Update()
{
draw();
if (move())
{
print("xxxxxxxxxxxxxxxxxxxxx\n"); x.SetActive(true); //init();
// draw();
}
} Vector3 getPoint(int x, float y, int z)
{
return new Vector3(x - 5.5f, y, z - 5.5f);
} //关卡
static int level;
void init()
{
cube_cnt = ;
cnt = ; GameObject x = GameObject.Find("level");
string tmp;
tmp = "第" + (level+).ToString() + "关";
x.GetComponent<Text>().text = tmp; if (level == )
{
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (map[i, j] == )
{
cube_cnt++;
}
if (map[i, j] == )
{
posX = i;
posY = j;
pre_save(i, j);
}
}
}
}
else if (level >= )
{
map = new int[, ] {
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
};
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (map[i, j] == )
{
cube_cnt++;
}
if (map[i, j] == )
{
posX = i;
posY = j;
pre_save(i, j);
}
}
}
}
level++;
Game_UI_Manage.Level++;
} void draw()
{
destroyMap();
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (map[i, j] == ) //#
{
Instantiate(wallPre, getPoint(i, 0.5f, j), Quaternion.identity);
//System.Console.Write("■");
}
else if (map[i, j] == )
{ } //System.Console.Write(" ");
else if (map[i, j] == ) //pepole
{
Instantiate(man, getPoint(i, 0.5f, j), Quaternion.identity);
//System.Console.Write("♀");
}
else if (map[i, j] == )
{
Instantiate(Box, getPoint(i, 0.5f, j), Quaternion.identity);
//System.Console.Write("△");
}
else if (map[i, j] == )
{
Instantiate(Point, getPoint(i, 0.5f, j), Quaternion.identity);
//System.Console.Write("☆");f
}
else if (map[i, j] == ) // 人 + 成功点
{
Instantiate(man, getPoint(i, 0.5f, j), Quaternion.identity);
}
else if (map[i, j] == )
{
Instantiate(EndPoint, getPoint(i, 0.5f, j), Quaternion.identity); } } } } void destroyMap()
{
GameObject[] gos = GameObject.FindGameObjectsWithTag("brick");
foreach (var go in gos)
{
Destroy(go);
}
} bool move()
{
//上
if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.A))
{
cnt++;
moveUp();
}
//下
else if (Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.D))
{
cnt++;
moveDown(); }
//左
else if (Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.S))
{
cnt++;
moveLeft();
}
//右
else if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W))
{
cnt++;
moveRight();
}
else if (Input.GetKeyDown(KeyCode.Z))
{
if (list_cnt > )
{
cnt--;
for (int i = ; i < list_cnt; i++)
{
int tx = list[i].posX;
int ty = list[i].posY;
int tmax = list[i].mapx; map[tx, ty] = tmax; }
posX = list[].posX;
posY = list[].posY;
pre_clear();
}
}
return victory();
} void moveUp()
{
if (posX - >= )
{
if (map[posX - , posY] == ) // 空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY); map[posX, posY] = ;
map[posX - , posY] = ;
posX--;
//now_save();
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
map[posX, posY] = ;
map[posX - , posY] = ;
posX--;
}
}
else if (map[posX - , posY] == ) //成功点
{ if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
}
else if (map[posX - , posY] == ) // 箱子
{
if (posX - >= )
{
if (map[posX - , posY] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{ // pre_save();
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
}
else if (map[posX - , posY] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
} }
}
}
else if (map[posX - , posY] == ) // 箱子+成功点
{
if (posX - >= )
{
if (map[posX - , posY] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
}
else if (map[posX - , posY] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX - , posY);
pre_save(posX - , posY); map[posX - , posY] = ;
map[posX - , posY] = ;
map[posX, posY] = ;
posX--;
} }
}
}
}
} //向下移动
void moveDown()
{
if (posX + < )
{
if (map[posX + , posY] == ) // 空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY); map[posX, posY] = ;
map[posX + , posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY); map[posX, posY] = ;
map[posX + , posY] = ;
posX++;
}
}
else if (map[posX + , posY] == ) //成功点
{ if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
}
else if (map[posX + , posY] == ) // 箱子
{
if (posX + < )
{
if (map[posX + , posY] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
}
else if (map[posX + , posY] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
} }
}
}
else if (map[posX + , posY] == ) // 箱子+成功点
{
if (posX + < )
{
if (map[posX + , posY] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
}
else if (map[posX + , posY] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX + , posY);
pre_save(posX + , posY); map[posX + , posY] = ;
map[posX + , posY] = ;
map[posX, posY] = ;
posX++;
} }
}
}
}
} void moveLeft()
{
if (posY - >= )
{
if (map[posX, posY - ] == ) // 空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - ); map[posX, posY] = ;
map[posX, posY - ] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - ); map[posX, posY] = ;
map[posX, posY - ] = ;
posY--;
}
}
else if (map[posX, posY - ] == ) //成功点
{ if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
}
}
else if (map[posX, posY - ] == ) // 箱子
{
if (posY - >= )
{
if (map[posX, posY - ] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
}
}
else if (map[posX, posY - ] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
} }
}
}
else if (map[posX, posY - ] == ) // 箱子+成功点
{
if (posY - >= )
{
if (map[posX, posY - ] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
}
}
else if (map[posX, posY - ] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY - );
pre_save(posX, posY - ); map[posX, posY - ] = ;
map[posX, posY - ] = ;
map[posX, posY] = ;
posY--;
} }
}
}
}
} void moveRight()
{
if (posY + < )
{
if (map[posX, posY + ] == ) // 空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + ); map[posX, posY] = ;
map[posX, posY + ] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + ); map[posX, posY] = ;
map[posX, posY + ] = ;
posY++;
}
}
else if (map[posX, posY + ] == ) //成功点
{ if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
}
else if (map[posX, posY + ] == ) // 箱子
{
if (posY + < )
{
if (map[posX, posY + ] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
}
else if (map[posX, posY + ] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
} }
}
}
else if (map[posX, posY + ] == ) // 箱子+成功点
{
if (posY + < )
{
if (map[posX, posY + ] == ) // 箱子上面是空地
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
}
else if (map[posX, posY + ] == ) //箱子上面是成功点
{
if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
}
else if (map[posX, posY] == )
{
pre_clear();
pre_save(posX, posY);
pre_save(posX, posY + );
pre_save(posX, posY + ); map[posX, posY + ] = ;
map[posX, posY + ] = ;
map[posX, posY] = ;
posY++;
} }
}
}
}
} static public void Reset(int Level)
{
level = Level;
if (Level == )
{
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
map[i,j] = map_1[i,j]; }
else if (Level >= )
{
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
map[i, j] = map_2[i, j]; } } public static void set_level(int Level)
{
level = Level;
if (Level == )
{
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
map[i, j] = map_1[i, j]; }
else if (Level >= )
{
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
map[i, j] = map_2[i, j]; }
} }

Map.cs

 using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement; public class UI_Manage : MonoBehaviour { // Use this for initialization
void Start () { } // Update is called once per frame
void Update () { } public void onStartBtnClick()
{
//跳转场景 SceneManager.LoadScene("Game");
//退出游戏
//Application.Quit();
//显示与隐藏
//游戏物体.setActive(true / false); } public void onEndBtnClick()
{
Application.Quit();
System.Console.WriteLine("Exit!");
} }

UI_Manage.cs

 using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement; public class Game_UI_Manage : MonoBehaviour { // Use this for initialization
void Start () { } // Update is called once per frame
void Update () { } public void onHomeBtnClick()
{
Level = ;
print(Level);
Map.set_level(Level);
SceneManager.LoadScene("Start"); } public static int Level;
public void onResetClick()
{
print(Level);
Map.set_level(--Level);
SceneManager.LoadScene("Game");
} public void victory_Home()
{
Level = ;
Map.set_level(Level);
SceneManager.LoadScene("Start");
} public void victory_next()
{
SceneManager.LoadScene("Game");
} }

结构:

UI_Manage管理开始界面的所有UI

Map:控制绘图,和行走

Game_UI_Manage:控制游戏界面的所有UI

最新文章

  1. maven全局配置文件settings.xml详解
  2. tomcat7 ajax请求服务中文乱码
  3. Redis内存管理(二)
  4. .Net 发邮件
  5. 定义一个runtime的Annotation
  6. css中padding中样式的顺序含义
  7. 解决EditText不能撑满全屏的问题及EditText你应该知道的属性
  8. [c/c++] programming之路(25)、字符串(六)——memset,Unicode及宽字符,strset
  9. C# NPOI 日期格式
  10. P1019 单词接龙
  11. #1075 : 开锁魔法III
  12. ORACLE SQL 函数 INITCAP()
  13. vue之后台管理系统遇到的几个痛点
  14. css flex 属性教程
  15. jquery的$.extend和$.fn.extend作用及区别,兼它们的一些小细节
  16. jconsole工具使用----jvm内存泄漏问题
  17. Egret3D初步学习笔记四 (地形使用)
  18. Altium Designer安装孔周围放置圆形Polygon Pour Cutout
  19. selenium--判断元素是否存在
  20. 第五次作业psp

热门文章

  1. PIE SDK正射校正
  2. Lakeshore
  3. vi和vim的基本介绍
  4. 基于setTimeout制作滚动广告板
  5. Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记
  6. SpringBoot | 第二十八章:监控管理之Spring Boot Admin使用
  7. Linux kernel workqueue机制分析
  8. Nginx下载安装
  9. GridView .net访问
  10. Linux配置JDK1.8环境变量