|
首先搞个简单的地图:
public class Map
{
public string MapName { get; set; }
public List<City> Citys { get; set; }
public Map()
{
this.MapName = "书剑";
Citys = new List<City>();
City city = new City("wg", "武馆");
city.Roms = new List<Room> {
new Room
{
RoomCode="wg-wgdt",
RoomName="武馆大厅",
Remark="这里是武馆大厅",
Ways= new string[5, 2] { { "eastdown", "wg-dl1"},{ "enter", "wg-zl1"},{ "southdown", "wg-wgqy"},{ "southeast", "wg-wpf"},{ "westdown", "wg-xl1"}}
},
new Room
{
RoomCode="wg-dl1",
RoomName="东廊",
Remark="这是一条走廊,廊顶描绘着江南",
Ways= new string[3, 2] { { "east", "wg-dl2"},{ "north", "wg-pt"},{ "westup", "wg-wgdt" }}
},
new Room
{
RoomCode="wg-dl2",
RoomName="东廊",
Remark="这是一条走廊,廊顶描绘着江南",
Ways= new string[4, 2] { { "east", "wg-dl3"},{ "north", "wg-sf"}, { "south", "wg-zf" }, { "west", "wg-dl1" } }
},
new Room
{
RoomCode="wg-dl3",
RoomName="东廊",
Remark="这是一条走廊,廊顶描绘着江南",
Ways= new string[4, 2] { { "east", "wg-hl"},{ "north", "wg-nxxs"}, { "south", "wg-vxxs" }, { "west", "wg-dl2" } }
},
new Room
{
RoomCode="wg-vxxs",
RoomName="女休息室",
Remark="这里是武馆内的休息室",
Ways= new string[1, 2] { { "north", "wg-dl3" } }
}
};
Citys.Add(city);
}
}
然后是找的代码:
bool sfzd = false;定义公共变量bool类型 默认false没找到
string zdlj = "";定义找到后返回的路径
找路径的递归函数:
localrm 当前角色的所在房间,gorm 要去那个房间,你从那个房间到你所在的房间编码
public void zlj(Room localrm, Room gorm, string sourceCode)
{
if (!sfzd)
{
Map map = new Map();
var rooms = map.Citys.Where(m => m.CityCode == "wg").FirstOrDefault().Roms;
if (localrm.RoomCode == gorm.RoomCode)
{
sfzd = true;
zdlj=localrm.Path;
}
else
{
string[,] ways = localrm.Ways;
for (int i = 0; i < ways.GetLength(0); i++)
{
var nextrm = rooms.Where(m => m.RoomCode == ways[i, 1]).FirstOrDefault();
if (nextrm != null && sourceCode != nextrm.RoomCode)
{
nextrm.Path = localrm.Path + ways[i, 0] + ",";
zlj(nextrm, gorm, localrm.RoomCode);
}
}
}
}
测试:函数调用
Map map = new Map();获取地图
var rooms = map.Citys.Where(m => m.CityCode == "wg").FirstOrDefault().Roms;获取武馆所有房间
var localrm = rooms.Where(m => m.RoomCode == "wg-wgdt").FirstOrDefault();获取当前房间武馆大厅
var gorm = rooms.Where(m => m.RoomCode == "wg-vxxs").FirstOrDefault();获取要去的房间女休息室
zlj(localrm, gorm, "");调用找路径函数
if (sfzd)如果找到
{
MessageBox.Show(zdlj.TrimEnd(','));弹出路径
}
效果还行!结果!
eastdown,east,east,south |
|