Beispiel #1
0
    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);
    }
Beispiel #2
0
        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);
            }
        }