public override void Update() { base.Update(); Levels = new Dictionary <LevelType, List <int> > [ModEntry.DaysPerMonth]; Nodes = new IFlowNode[ModEntry.DaysPerMonth]; WorldDate date = new(Menu.Date); FlowBuilder builder = new(); builder.FormatText( I18n.Page_Mines_About(Utility.getSeasonNameFromNumber(date.SeasonIndex)) ); for (int day = 1; day <= ModEntry.DaysPerMonth; day++) { date.DayOfMonth = day; int days = date.TotalDays; Levels[day - 1] = new(); // Normal Mines for (int floor = 1; floor <= 120; floor++) { LevelType type = MineHelper.GetLevelType( floor: floor, seed: Seed, date: days ); if (type == LevelType.None) { continue; } if (!Levels[day - 1].ContainsKey(type)) { Levels[day - 1].Add(type, new List <int>()); } Levels[day - 1][type].Add(floor); } // Dinosaurs for (int floor = 121; floor <= 600; floor++) { LevelType type = MineHelper.GetLevelType( floor: floor, seed: Seed, date: days ); if (type != LevelType.Dino) { continue; } if (!Levels[day - 1].ContainsKey(type)) { Levels[day - 1].Add(type, new List <int>()); } Levels[day - 1][type].Add(floor - 120); } SDate sdate = new(day, date.Season); builder.Text("\n\n"); var node = new TextNode( $"{sdate.ToLocaleString(withYear: false)}\n", new TextStyle(font: Game1.dialogueFont), onClick: (_, _, _) => false ); Nodes[day - 1] = node; builder.Add(node); bool fline = true; foreach (var entry in Levels[day - 1]) { string key = $"page.mines.type.{entry.Key}"; string floors = string.Join(", ", entry.Value); if (!fline) { builder.Text("\n"); } else { fline = false; } if (Sprites != null && Sprites.TryGetValue(entry.Key, out SpriteInfo? sprite) && sprite != null) { builder.Sprite(sprite, 2); } builder .FormatText($" {Mod.Helper.Translation.Get(key)}: ", shadow: false); builder.Text( string.Join(", ", entry.Value), color: Color.White * 0.75f ); } } SetRightFlow(builder, 4); }
public static void EscapeMines() { var(board, mines, exitPoint, turtle) = FileService.ReadFromFile(); var i = turtle.X; var j = turtle.Y; var moves = turtle.Moves; foreach (var move in moves) { if (i > board.X && j > board.Y) { Console.WriteLine(Constants.OutOfTable); return; } switch (move) { case "R": var currentPos = Constants.CardinalPoints.IndexOf(turtle.Orientation); turtle.Orientation = Constants.CardinalPoints.ElementAtOrDefault((currentPos + 1) % 4); break; case "L": var currentPosition = Constants.CardinalPoints.IndexOf(turtle.Orientation); turtle.Orientation = MineHelper.GetLeftOrientation(currentPosition); break; case "M": switch (turtle.Orientation) { case "N": i -= 1; break; case "S": i += 1; break; case "W": j -= 1; break; case "E": j += 1; break; } break; case "N": turtle.Orientation = move; break; case "S": turtle.Orientation = move; break; case "W": turtle.Orientation = move; break; case "E": turtle.Orientation = move; break; } if (MineHelper.IsMoveIncorrect(mines, i, j)) { Console.WriteLine(Constants.MineHit); return; } if (MineHelper.IsFinishPoint(exitPoint, i, j)) { Console.WriteLine(Constants.Success); return; } Console.WriteLine(Constants.Danger); } }