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