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

需要注意的地方不少:

  • 进一步,需要考虑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

推箱子Unity的更多相关文章

  1. OC推箱子

    #include<stdio.h> #include<stdlib.h> int main(void) { char sr;//存储用户输入的指令 //绘制地图 char a[ ...

  2. c语言游戏推箱子

    前两天做了推箱子小游戏,看似简单的一个小游戏背后却 有巨大的秘密,这秘密就是一大堆逻辑. 自从学习了函数过后,的确是解决了很多问题,而且调用很方便,尽管我现在都不是很会调用. 写完一个函数,准备测试一 ...

  3. JavaScript写一个小乌龟推箱子游戏

    推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用 ...

  4. 用C#制作推箱子小游戏

    思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图  (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...

  5. hdu.1254.推箱子(bfs + 优先队列)

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  6. [游戏模版17] Win32 推箱子 迷宫

    >_<:Here introduce a simple game: >_<:resource >_<:only can push a box and finally ...

  7. [转]Flash ActionScript2.0面向对象游戏开发-推箱子

    本文转自:http://www.alixixi.com/Dev/W3C/Flash/2007/2007070868666.html 概述: Flash ActionScript2.0是一种面向对向的编 ...

  8. c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;

    网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...

  9. c++、c实现推箱子小游戏

    经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...

随机推荐

  1. linux 卡在进度条进不去解决办法之一

    centos为例 一, 如下: 如果这个地方卡住了的话也许是你上次改了passwd文件,这个是其中一个情况. 如果刚刚开机就卡住了或者怎么卡住了的话在开机的读条时候摁esc显示读取的进程,根据显示的错 ...

  2. 使用PagerSlidingTabStrip实现顶部导航栏

    使用PagerSlidingTabStrip配合ViewPager实现顶部导航栏. 效果图如下:          PagerSlidingTabStrip是github上的一个开源项目,项目地址如下 ...

  3. Angular4+NodeJs+MySQL 入门-01

    有一定的后台开发经验ES6语法.后台没有用框架来,纯自己写.会sql语句 安装NodeJS的安装 从网上下载 https://nodejs.org/en/ 选择自己,我用的是最新版本 Angular ...

  4. How to add more to Git Bash on Windows

    How to add more to Git Bash on Windows Download the lastest wget binary for windows from https://ete ...

  5. 在 Azure 中创建静态 HTML Web 应用

    Azure Web 应用提供高度可缩放.自修补的 Web 托管服务. 本快速入门教程演示如何将基本 HTML+CSS 站点部署到 Azure Web 应用. 使用 Azure CLI 创建 Web 应 ...

  6. c# 快速修改图片颜色

    public static void ChangeColour(this Bitmap bmp, byte inColourR, byte inColourG, byte inColourB, byt ...

  7. SqlServer系统表认识和操作

    地址:http://technet.microsoft.com/zh-cn/library/ms178551.aspx 一.sys.sysindexkeys 包含有关数据库的索引中的键或列的信息.(表 ...

  8. linux下(ubuntu)反删除(误删恢复)与回收站制作

    刚刚有个小伙伴不小心删了他写了好几的天代码,为他心疼之余帮他找回了文件. 想到我之前也常常误删一些文件,就干脆分享一下我的反删除方法,并说说我做的回收站(好low的,求大神指点) 首先是反删除软件ex ...

  9. vue+rest-framework前后端分离整合

    一.vue部分 二.django路由配置 (1)项目urls.py修改如下: from django.conf.urls import url, include urlpatterns = [ # p ...

  10. scss-@else if指令

    @else if语句用来与@if指令一起使用.当 @if 语句失败时,则 @else if 语句测试,如果它们也无法测试满足时再 @else 执行. 语法: @if expression { // C ...