Пример #1
0
    public void IntoRoom(RoomInfo roomInfo)
    {
        IsInRoom   = true;
        CurrentX   = roomInfo.X;
        CurrentY   = roomInfo.Y;
        CurrentDir = CommonDefine.MoveDirection.None;
        ChangeCurrentPoint(roomInfo);
        //roomInfo.IsHere = true;

        OnPropertyChanged <RoomInfo>(ROOMIN, roomInfo);
    }
Пример #2
0
    /// <summary>
    /// 在指定的x,y和dir下创建一条路
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <param name="dir"></param>
    /// <returns>成功返回true,失败返回false</returns>
    private RoadInfo MakeRoad(int x, int y, CommonDefine.MoveDirection dir)
    {
        RoadInfo road = new RoadInfo();

        road.X        = x;
        road.Y        = y;
        road.BuildDir = dir;

        m_roads.Add(road);
        return(road);
    }
Пример #3
0
    /// <summary>
    /// 离开此房间,去往下一个房间
    /// </summary>
    /// <param name="targetRoom"></param>
    public void OutRoom(RoomInfo targetRoom)
    {
        //在路上时不能操纵去哪个房间
        if (!IsInRoom)
        {
            return;
        }

        //只能去隔壁房间,不能一下子去很远的房子
        RoomInfo curRoom  = GetRoomByXY(CurrentX, CurrentY);
        int      distance = Mathf.Abs(targetRoom.X - curRoom.X) + Mathf.Abs(targetRoom.Y - curRoom.Y);

        if (distance != 1)
        {
            return;
        }

        //判断去的房间的方向,从而取得去的路
        IsInRoom = false;
        if (targetRoom.X > CurrentX)
        {
            CurrentDir = CommonDefine.MoveDirection.East;
        }
        else if (targetRoom.Y > CurrentY)
        {
            CurrentDir = CommonDefine.MoveDirection.North;
        }
        else if (targetRoom.X < CurrentX)
        {
            CurrentDir = CommonDefine.MoveDirection.West;
        }
        else if (targetRoom.Y < CurrentY)
        {
            CurrentDir = CommonDefine.MoveDirection.South;
        }
        else
        {
            CurrentDir = CommonDefine.MoveDirection.None;
        }

        RoadInfo currentRoad = GetRoadByXYAndDir(CurrentX, CurrentY, CurrentDir);

        //通知更新UI
        OnPropertyChanged <RoadInfo>(ROOMOUT, currentRoad);
    }
Пример #4
0
    /// <summary>
    /// 递归创建随机地图
    /// </summary>
    /// <param name="previousX"></param>
    /// <param name="previousY"></param>
    /// <returns></returns>
    private bool CreateMap(int previousX, int previousY)
    {
        for (int i = 0; i < 30; i++)
        {
            if (CheckCreateMapFinished())
            {
                return(true);
            }
            CommonDefine.MoveDirection dir = (CommonDefine.MoveDirection)(Random.Range(0, 100) % 4);
            int tmpX = previousX;
            int tmpY = previousY;
            switch (dir)
            {
            case CommonDefine.MoveDirection.East:
                tmpX += 1;
                break;

            case CommonDefine.MoveDirection.South:
                tmpY -= 1;
                break;

            case CommonDefine.MoveDirection.West:
                tmpX -= 1;
                break;

            case CommonDefine.MoveDirection.North:
                tmpY += 1;
                break;
            }

            if (TryMakeRoom(tmpX, tmpY))
            {
                RoomInfo prevRoom = GetRoomByXY(previousX, previousY);
                RoadInfo road     = MakeRoad(previousX, previousY, dir);
                prevRoom.AddNeibourRoads(road);
                road.AddNeibourRoom(prevRoom);
                RoomInfo curRoom = MakeRoom(tmpX, tmpY);
                curRoom.AddNeibourRoads(road);
                road.AddNeibourRoom(curRoom);
                CreateMap(tmpX, tmpY);
            }
        }

        return(false);
    }
Пример #5
0
    /// <summary>
    /// 根据X,Y,DIR取得路
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <param name="dir"></param>
    /// <returns></returns>
    public RoadInfo GetRoadByXYAndDir(int x, int y, CommonDefine.MoveDirection dir)
    {
        foreach (RoadInfo r in m_roads)
        {
            if (x == r.X && y == r.Y && dir == r.BuildDir)
            {
                return(r);
            }

            if (Mathf.Abs(r.BuildDir - dir) == 2)
            {
                int tmpX = -1;
                int tmpY = -1;
                switch (r.BuildDir)
                {
                case CommonDefine.MoveDirection.East:
                    tmpX = r.X + 1;
                    tmpY = r.Y;
                    break;

                case CommonDefine.MoveDirection.North:
                    tmpX = r.X;
                    tmpY = r.Y + 1;
                    break;

                case CommonDefine.MoveDirection.South:
                    tmpX = r.X;
                    tmpY = r.Y - 1;
                    break;

                case CommonDefine.MoveDirection.West:
                    tmpX = r.X - 1;
                    tmpY = r.Y;
                    break;
                }

                if (tmpX == x && tmpY == y)
                {
                    return(r);
                }
            }
        }
        return(null);
    }
Пример #6
0
    public RoomInfo GetNeibourRoom(CommonDefine.MoveDirection dir)
    {
        int tmpX = -1;
        int tmpY = -1;

        switch (dir)
        {
        case CommonDefine.MoveDirection.East:
            tmpX = DungeonGenerator.Instance.CurrentX + 1;
            tmpY = DungeonGenerator.Instance.CurrentY;
            break;

        case CommonDefine.MoveDirection.North:
            tmpX = DungeonGenerator.Instance.CurrentX;
            tmpY = DungeonGenerator.Instance.CurrentY + 1;
            break;

        case CommonDefine.MoveDirection.South:
            tmpX = DungeonGenerator.Instance.CurrentX;
            tmpY = DungeonGenerator.Instance.CurrentY - 1;
            break;

        case CommonDefine.MoveDirection.West:
            tmpX = DungeonGenerator.Instance.CurrentX - 1;
            tmpY = DungeonGenerator.Instance.CurrentY;
            break;
        }

        foreach (RoomInfo room in m_neighbourRooms)
        {
            if (tmpX == room.X && tmpY == room.Y)
            {
                return(room);
            }
        }

        return(null);
    }