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); }
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; }
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); }
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; } } } } }