找回密码
 注册
搜索
查看: 379|回复: 8

闲的没事用c#写找路径玩

[复制链接]
门派:桃花岛
发表于 2022-11-17 16:16:01 | 显示全部楼层 |阅读模式
首先搞个简单的地图:
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
门派:桃花岛
发表于 2022-11-17 16:41:34 | 显示全部楼层
我只能说 very good! 不知道lua里是怎么找路径的。没看到
门派:桃花岛
 楼主| 发表于 2022-11-17 17:02:50 | 显示全部楼层
thdwht@tj 发表于 2022-11-17 16:41
我只能说 very good! 不知道lua里是怎么找路径的。没看到

lua里面比较复杂,考虑的多,主要在room.lua和lujing.lua里面。
门派:桃花岛
 楼主| 发表于 2022-11-17 17:05:20 | 显示全部楼层
zmud的找路径比较有意思,是定义一个房间为中转的,比如当铺,武馆之类,然后从当铺 或者武馆到地图里所有房间去的路径,然后再反转,也是比较好玩,我第一版也是这样搞的,但是比较死。去那里都要先到武馆或者当铺,不能两点之间直线行走。
门派:桃花岛
发表于 2022-11-17 17:07:35 | 显示全部楼层
以前的书剑送信zmud好像是襄阳哪个地方等杀手
门派:桃花岛
 楼主| 发表于 2022-11-17 17:17:07 | 显示全部楼层
thdwht@tj 发表于 2022-11-17 17:07
以前的书剑送信zmud好像是襄阳哪个地方等杀手

现在MUSH单找路径行走,积累了很多,比如各种迷宫,比如吞命令等问题,不容易啊。
门派:桃花岛
发表于 2022-11-17 19:36:20 | 显示全部楼层
大佬啊···真是佩服这样的人啊
门派:桃花岛
发表于 2022-11-18 08:42:24 | 显示全部楼层
zhending@tj 发表于 2022-11-17 19:36
大佬啊···真是佩服这样的人啊

是啊,一直想学着写robot,但是一直 摸不清楚怎么写,不如找怪等等
门派:桃花岛
发表于 2022-11-24 09:11:46 | 显示全部楼层
这样的课程可以多样性
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-6-3 02:41 , Processed in 0.033238 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表