示例#1
0
        public static void Run([DefaultValue("Game1.txt")] string gameFile, [DefaultValue("18")] int depthPenalty,
                               [DefaultValue("50000")] int maxMoves)
        {
            string gameId = gameFile.Replace(".txt", "");

            Log.Logger = new LoggerConfiguration()
                         .WriteTo.LiterateConsole()
                         .WriteTo.File($"Log-{gameId}_Depth-{depthPenalty}")
                         .MinimumLevel.Debug()
                         .CreateLogger();

            ImmutableBubbleBurstGrid grid;

            using (var stream = File.OpenRead($"Games//{gameFile}"))
            {
                grid = BubbleGridBuilder.Create(new StreamReader(stream));
            }

            var solutionFileName = $"Solution_{gameId}_Depth-{depthPenalty}.json";

            File.Delete(solutionFileName);
            using (var fileStream = File.OpenWrite(solutionFileName))
                using (var writer = new StreamWriter(fileStream))
                {
                    var solver   = new GridSolver(grid, writer, depthPenalty);
                    var solution = solver.Solve(maxMoves);

                    writer.Write(JsonConvert.SerializeObject(solution.Moves));

                    solution.GridState.Display();
                }
        }
        public void RemoveAndJump_RemoveBottomRightTriangle_ShouldShiftDownAndRight()
        {
            _grid[3, 2] = Bubble.None;
            _grid[2, 2] = Bubble.None;
            _grid[1, 2] = Bubble.None;
            _grid[3, 1] = Bubble.None;
            _grid[2, 1] = Bubble.None;
            _grid[3, 0] = Bubble.None;

            var expected = BubbleGridBuilder.Create(new[]
            {
                new[] { Bubble.None, Bubble.Blue, Bubble.None, Bubble.None },
                new[] { Bubble.None, Bubble.Red, Bubble.Green, Bubble.None },
                new[] { Bubble.None, Bubble.Red, Bubble.Green, Bubble.Cyan, }
            });

            _grid.ToImmutable().Display();

            _grid.JumpTillTheresNoGaps();
            _grid.PushColumnsRight();


            Console.WriteLine("Actual:");
            _grid.ToImmutable().Display();

            Console.WriteLine("Expected:");
            expected.Display();

            Assert.IsTrue(_grid.ToImmutable().Equals(expected));
        }
 public void Setup()
 {
     _grid = BubbleGridBuilder.Create(new[]
     {
         new[] { Bubble.Blue, Bubble.Green, Bubble.Cyan, Bubble.Blue },
         new[] { Bubble.Red, Bubble.Green, Bubble.Red, Bubble.Green },
         new[] { Bubble.Red, Bubble.Yellow, Bubble.Yellow, Bubble.Blue, }
     }).ToBuilder();
 }
示例#4
0
        public void CreateFromGrid_TakeMove_ShouldPopCorrectly()
        {
            var expected = BubbleGridBuilder.Create(new[]
            {
                new[] { Bubble.Blue, Bubble.None, Bubble.None, Bubble.Blue },
                new[] { Bubble.Red, Bubble.Green, Bubble.Cyan, Bubble.Green },
                new[] { Bubble.Red, Bubble.Green, Bubble.Red, Bubble.Cyan },
                new[] { Bubble.Red, Bubble.Cyan, Bubble.Cyan, Bubble.Cyan, }
            });

            var move = new GameMove(_grid);

            _grid.Display();

            Console.WriteLine("Taking move (2,2)..");
            var next = move.BurstBubble(new Point(2, 2));

            next.GridState.Display();

            Assert.IsTrue(expected.Equals(next.GridState));
        }
示例#5
0
        public static void Play([Required] string gameFile, [Required, FileExists] string movesFile)
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.LiterateConsole()
                         .MinimumLevel.Debug()
                         .CreateLogger();

            ImmutableBubbleBurstGrid grid;

            using (var stream = File.OpenRead($"Games//{gameFile}"))
            {
                grid = BubbleGridBuilder.Create(new StreamReader(stream));
            }

            var state = new GameMove(grid);

            var movesJson = File.ReadAllText(movesFile);

            var moves = JsonConvert.DeserializeObject <List <Point> >(movesJson);


            state.GridState.Display();

            var lastScore = 0;

            foreach (var move in moves)
            {
                Console.WriteLine();
                Console.WriteLine($"({move.X}, {move.Y})");
                state = state.BurstBubble(move);
                Console.WriteLine($"{state.Score - lastScore} points scored this time ({state.Score} total)");
                state.GridState.Display();
                Thread.Sleep(1000);

                lastScore = state.Score;
            }
        }
示例#6
0
        public void CreateFromGrid_TakeTwoMoves_ShouldInheritState()
        {
            var expected = BubbleGridBuilder.Create(new[]
            {
                new[] { Bubble.Blue, Bubble.None, Bubble.None, Bubble.None, },
                new[] { Bubble.Red, Bubble.Green, Bubble.Cyan, Bubble.None },
                new[] { Bubble.Red, Bubble.Green, Bubble.Red, Bubble.Blue },
                new[] { Bubble.Red, Bubble.Yellow, Bubble.Yellow, Bubble.Green }
            });

            var secondExpected = BubbleGridBuilder.Create(new[]
            {
                new[] { Bubble.Blue, Bubble.None, Bubble.None, Bubble.None, },
                new[] { Bubble.Red, Bubble.None, Bubble.None, Bubble.None },
                new[] { Bubble.Red, Bubble.Green, Bubble.Cyan, Bubble.Blue },
                new[] { Bubble.Red, Bubble.Green, Bubble.Red, Bubble.Green }
            });

            var move = new GameMove(_grid);

            _grid.Display();

            Console.WriteLine("Taking move (3,3)..");
            var threeThree = move.BurstBubble(new Point(3, 3));

            threeThree.GridState.Display();

            Assert.IsTrue(expected.Equals(threeThree.GridState));

            Console.WriteLine("Taking move (2,3)");
            var twoThree = threeThree.BurstBubble(new Point(2, 3));

            twoThree.GridState.Display();

            Assert.IsTrue(secondExpected.Equals(twoThree.GridState));
        }