예제 #1
0
파일: Map.cs 프로젝트: Mico-LIT/Plumber
 static bool IsValidAllConnectedTybing(ITybing tybing)
 {
     if (!((tybing.Point.X == StartTybing.X && tybing.Point.Y == StartTybing.Y) ||
           (tybing.Point.X == FinishTybing.X && tybing.Point.Y == FinishTybing.Y)))
     {
         return(false);
     }
     return(true);
 }
예제 #2
0
파일: Session.cs 프로젝트: Mico-LIT/Plumber
        internal static void GetSavePoin()
        {
            var savepoint = JsonConvert.DeserializeObject <SavePoint>(System.IO.File.ReadAllText("SavePoint.json"));

            if (savepoint == null)
            {
                return;
            }

            ITybing[,] tybings = new ITybing[savepoint.SizeY, savepoint.SizeX];

            for (int y = 0; y < savepoint.SizeY; y++)
            {
                for (int x = 0; x < savepoint.SizeX; x++)
                {
                    var t1 = savepoint.Tybing1.FirstOrDefault(g => g.Point.X == x && g.Point.Y == y);
                    if (t1 != null)
                    {
                        tybings[y, x] = t1; continue;
                    }
                    var t2 = savepoint.Tybing2.FirstOrDefault(g => g.Point.X == x && g.Point.Y == y);
                    if (t2 != null)
                    {
                        tybings[y, x] = t2; continue;
                    }
                    var t3 = savepoint.Tybing3.FirstOrDefault(g => g.Point.X == x && g.Point.Y == y);
                    if (t3 != null)
                    {
                        tybings[y, x] = t3; continue;
                    }
                    var t4 = savepoint.Tybing4.FirstOrDefault(g => g.Point.X == x && g.Point.Y == y);
                    if (t4 != null)
                    {
                        tybings[y, x] = t4; continue;
                    }
                    var b = savepoint.Brick.FirstOrDefault(g => g.Point.X == x && g.Point.Y == y);
                    if (b != null)
                    {
                        tybings[y, x] = b; continue;
                    }
                }
            }

            Map.FinishTybing = savepoint.FinishTybing;
            Map.IsCompletedAllConnectedTybing = savepoint.IsCompletedAllConnectedTybing;
            Map.NameLevel   = savepoint.NameLevel;
            Map.SizeX       = savepoint.SizeX;
            Map.SizeY       = savepoint.SizeY;
            Map.StartTybing = savepoint.StartTybing;
            Map.Time        = savepoint.Time;
            Map.TravelTime  = savepoint.TravelTime;
            Map.MapTybings  = tybings;

            _Player = savepoint.player;
        }
예제 #3
0
파일: Map.cs 프로젝트: Mico-LIT/Plumber
        static bool IsValidDirect(int y, int x, ITybing tybing)
        {
            if (x < 0 || y < 0 || x >= SizeX || y >= SizeY)
            {
                if (OptionsAllConnectedTybing && IsCompletedAllConnectedTybing)
                {
                    IsCompletedAllConnectedTybing = IsValidAllConnectedTybing(tybing);
                }

                return(false);
            }

            return(true);
        }
예제 #4
0
파일: Map.cs 프로젝트: Mico-LIT/Plumber
        static public void Start(ITybing tybing = null, int hash = 0)
        {
            if (tybing == null)
            {
                if (MapTybings[StartTybing.Y, StartTybing.X].DirectCoordinate.Y != null)
                {
                    foreach (var Y in MapTybings[StartTybing.Y, StartTybing.X].DirectCoordinate.Y)
                    {
                        if (IsValidDirect(Y, StartTybing.X, MapTybings[StartTybing.Y, StartTybing.X]))
                        {
                            MapTybings[StartTybing.Y, StartTybing.X].IsColor = true;
                            Water(StartTybing.Y, StartTybing.X);
                            Start(MapTybings[Y, StartTybing.X], MapTybings[StartTybing.Y, StartTybing.X].GetHashCode());
                            return;
                        }
                    }
                }

                if (MapTybings[StartTybing.Y, StartTybing.X].DirectCoordinate.X != null)
                {
                    foreach (var X in MapTybings[StartTybing.Y, StartTybing.X].DirectCoordinate.X)
                    {
                        if (IsValidDirect(StartTybing.Y, X, MapTybings[StartTybing.Y, StartTybing.X]))
                        {
                            MapTybings[StartTybing.Y, StartTybing.X].IsColor = true;
                            Water(StartTybing.Y, StartTybing.X);
                            Start(MapTybings[StartTybing.Y, X], MapTybings[StartTybing.Y, StartTybing.X].GetHashCode());
                            return;
                        }
                    }
                }
            }
            else
            {
                // Проверка на соединение и потом идем дальше!
                var curDirectCoor = tybing.DirectCoordinate;

                var curY = tybing.Point.Y;
                var curX = tybing.Point.X;

                //Уперлись в закрушенную трубу + Обработка кирпича
                if (MapTybings[curY, curX].TubingType == Enum.SubjectType.Brick)
                {
                    IsCompletedAllConnectedTybing = false;
                    return;
                }

                if (curDirectCoor?.Y != null)
                {
                    for (int i = 0; i < curDirectCoor.Y.Length; i++)
                    {
                        int nextStapY = curY + curDirectCoor.Y[i];

                        if (IsValidDirect(nextStapY, curX, tybing))
                        {
                            if (hash == MapTybings[nextStapY, curX].GetHashCode())
                            {
                                if (MapTybings[curY, curX].IsColor)
                                {
                                    return;
                                }

                                curDirectCoor.Y[i]             = 0;
                                MapTybings[curY, curX].IsColor = true;
                                Water(curY, curX);
                                break;
                            }
                        }
                    }
                }

                if (curDirectCoor?.X != null)
                {
                    for (int i = 0; i < curDirectCoor.X.Length; i++)
                    {
                        int nextStapX = curX + curDirectCoor.X[i];

                        if (IsValidDirect(curY, nextStapX, tybing))
                        {
                            if (hash == MapTybings[curY, nextStapX].GetHashCode())
                            {
                                if (MapTybings[curY, curX].IsColor)
                                {
                                    return;
                                }

                                curDirectCoor.X[i]             = 0;
                                MapTybings[curY, curX].IsColor = true;
                                Water(curY, curX);
                                break;
                            }
                        }
                    }
                }

                // сначала проверяем соеденили мы труби ли нет
                // Если труба не закрашена нет соединения! значит соединения не было
                if (!MapTybings[curY, curX].IsColor)
                {
                    IsCompletedAllConnectedTybing = false;
                    return;
                }

                if (curDirectCoor?.Y != null)
                {
                    foreach (var Y in curDirectCoor.Y)
                    {
                        if (Y == 0)
                        {
                            continue;
                        }

                        int nextStapY = curY + Y;

                        if (IsValidDirect(nextStapY, curX, tybing))
                        {
                            Start(MapTybings[nextStapY, curX], tybing.GetHashCode());
                            continue;
                        }
                    }
                }

                if (curDirectCoor?.X != null)
                {
                    foreach (var X in curDirectCoor.X)
                    {
                        if (X == 0)
                        {
                            continue;
                        }

                        int nextStapX = curX + X;

                        if (IsValidDirect(curY, nextStapX, tybing))
                        {
                            Start(MapTybings[curY, nextStapX], tybing.GetHashCode());
                            continue;
                        }
                    }
                }
            }
        }