Esempio n. 1
0
        public void SolverCanWinGamesButNotAll(string title, int rowStart, int colStart, GameState finalState, int rows, int cols, int[] minedCellsPositions)
        {
            var minedCells = new List<MineCell>();

            for (int i = 0; i < minedCellsPositions.Length; i += 2)
            {
                minedCells.Add(new MineCell(minedCellsPositions[i], minedCellsPositions[i + 1]));
            }

            var mineField = new MineField(rows, cols, minedCells.ToArray());
            var solver = new Solver(mineField);
            mineField.UncoverCell(rowStart, colStart);
            solver.UncoverGrid();

            Assert.Equal(mineField.GameState, finalState);

            mineField.Reset(true);

            mineField.UncoverCell(rowStart, colStart);

            for (var i = 0; i < 100 && mineField.GameState == GameState.InProgress; i++)
            {
                solver.PlayNextStep();
            }

            Assert.Equal(finalState, mineField.GameState);
        }
Esempio n. 2
0
        public int PutMines(MineField mineField, int clickCellX, int clickCellY, Random random)
        {
            var x = clickCellX;
            var y = clickCellY;
            var generatedMines = 0;

            bool CheckAround(int i, int j) =>
            j != x && i != y &&  // Same as clicked
            j - 1 != x && j + 1 != x &&            // X offsets
            i + 1 != y && j - 1 != y;               // Y offsets

            while (generatedMines < mineField.TotalMines)
            {
                for (int i = 0; i < mineField.Height; i++)
                {
                    for (int j = 0; j < mineField.Width; j++)
                    {
                        if (generatedMines >= mineField.TotalMines)
                        {
                            continue;
                        }

                        if (CheckAround(i, j) &&
                            mineField.Cells[i, j].Type != FieldCellType.Mine && random.Next(1, mineField.Height * mineField.Width) == 1)
                        {
                            mineField.Cells[i, j].Type   = FieldCellType.Mine;
                            mineField.Cells[i, j].IsOpen = true;
                            generatedMines++;
                        }
                    }
                }
            }

            return(generatedMines);
        }
Esempio n. 3
0
        public void DontWinfAllFlagArePlacedOnBombAndCellNotRevelated()
        {
            var game = MineField.Create(5, 10);

            game.OfType <UndiscoveredCell>().Where(a => a.HasBomb).ForEach(cell => game.PoseFlag(cell));
            game.Win.Should().BeFalse();
        }
Esempio n. 4
0
        //flag a button on a right mouse click
        public void FlagButton(KeyValuePair <int, Button> button, MineField mineField)
        {
            Button currentButton = button.Value;

            //get the space we are working with
            Space space = new Space();

            foreach (KeyValuePair <int, Space> currentSpace in mineField.Spaces)
            {
                if (currentSpace.Key == button.Key)
                {
                    space = currentSpace.Value;
                }
            }

            if (space.Flagged)
            {
                currentButton.Image = null;
                space.Flagged       = false;
                mineField.ReturnFlag();
            }
            else
            {
                if (mineField.GetFlag() >= 1)
                {
                    currentButton.Image = Resource1.Flag;
                    space.Flagged       = true;
                }
            }
        }
Esempio n. 5
0
 public Tile(MineField mf, int x, int y, bool hasBomb)
 {
     this.x       = x;
     this.y       = y;
     this.hasBomb = hasBomb;
     mineField    = mf;
 }
Esempio n. 6
0
        private void ApplyCommand(int commandOrder, string command)
        {
            string[] commandArgs = command.Split(' ');
            switch (commandOrder)
            {
            case 0:                     // Initialize MineField
                MineField = _mineFieldService.Initialize(commandArgs);
                break;

            case 1:                     // Initialize Mines
                _mineService.Initialize(commandArgs).ForEach(x =>
                {
                    MineField.ValidateCoordinates(new Coordinate(x.X, x.Y));
                    MineField.SetItemCoordinates(new Coordinate(x.X, x.Y), x);
                });
                break;

            case 2:                     // Initialize Exit
                var mine = _exitService.Initialize(commandArgs);
                MineField.ValidateCoordinates(new Coordinate(mine.X, mine.Y));
                MineField.SetItemCoordinates(new Coordinate(mine.X, mine.Y), mine);
                break;

            case 3:                     // Initialize Turtle
                Turtle = _turtleService.Initialize(commandArgs);
                MineField.ValidateCoordinates(new Coordinate(Turtle.Point.X, Turtle.Point.Y));
                break;

            case 4:                     // Series of Move - Rotate Actions
                _gameService.StartGame(MineField, Turtle, commandArgs);
                break;
            }
        }
Esempio n. 7
0
 internal virtual void ValidateExit(MineField mineField, Tile exit)
 {
     Throw.If <MineFieldInitializationException>(() =>
                                                 exit.PositionX < 0 || exit.PositionY < 0 || exit.TileType != TileType.Exit);
     Throw.If <MineFieldInitializationException>(() =>
                                                 exit.PositionX >= mineField.TilesX || exit.PositionY >= mineField.TilesY);
 }
Esempio n. 8
0
 //recursively clear buttons that contain minefield spaces with a zero mineCount
 public void ClearZeroMineCounts(Space currentSpace, MineField mineField)
 {
     if (currentSpace.GetMineCount() == 0)
     {
         foreach (KeyValuePair <int, Point> location in currentSpace.parameter)
         {
             KeyValuePair <int, Space> adjacentSpace = mineField.GetSpace(location.Value);
             if (adjacentSpace.Value != null && buttonMap[adjacentSpace.Key].Enabled)
             {
                 buttonMap[adjacentSpace.Key].Enabled   = false;
                 buttonMap[adjacentSpace.Key].BackColor = Color.Chocolate;
                 mineField.MoveCloserToWinCondition();
                 if (adjacentSpace.Value.GetMineCount() != 0)
                 {
                     buttonMap[adjacentSpace.Key].Text = adjacentSpace.Value.GetMineCount().ToString();
                 }
                 if (adjacentSpace.Value.GetMineCount() == 0)
                 {
                     //recursive call
                     ClearZeroMineCounts(adjacentSpace.Value, mineField);
                 }
             }
         }
     }
 }
Esempio n. 9
0
        public int PutMines(MineField mineField, int clickCellX, int clickCellY, Random random)
        {
            var generatedMines = 0;

            while (generatedMines < mineField.TotalMines)
            {
                for (int i = 0; i < mineField.Height; i++)
                {
                    for (int j = 0; j < mineField.Width; j++)
                    {
                        if (generatedMines >= mineField.TotalMines)
                        {
                            continue;
                        }

                        if (j != clickCellX && i != clickCellY &&
                            mineField.Cells[i, j].Type != FieldCellType.Mine && random.Next(1, mineField.Height * mineField.Width) == 1)
                        {
                            mineField.Cells[i, j].Type = FieldCellType.Mine;
                            generatedMines++;
                        }
                    }
                }
            }

            return(generatedMines);
        }
Esempio n. 10
0
        public void PoseFlagOnUndiscoveredCell()
        {
            var game = MineField.Create(5, 10);

            game.PoseFlag(1, 1);
            game[1, 1].Should().BeAssignableTo <FlaggedCell>();
        }
Esempio n. 11
0
        public void SolverCanWinGamesButNotAll(string title, int rowStart, int colStart, GameState finalState, int rows, int cols, int[] minedCellsPositions)
        {
            var minedCells = new List <MineCell>();

            for (int i = 0; i < minedCellsPositions.Length; i += 2)
            {
                minedCells.Add(new MineCell(minedCellsPositions[i], minedCellsPositions[i + 1]));
            }

            var mineField = new MineField(rows, cols, minedCells.ToArray());
            var solver    = new Solver(mineField);

            mineField.UncoverCell(rowStart, colStart);
            solver.UncoverGrid();

            Assert.Equal(mineField.GameState, finalState);

            mineField.Reset(true);

            mineField.UncoverCell(rowStart, colStart);

            for (var i = 0; i < 100 && mineField.GameState == GameState.InProgress; i++)
            {
                solver.PlayNextStep();
            }

            Assert.Equal(finalState, mineField.GameState);
        }
Esempio n. 12
0
        public void ShowGameState()
        {
            var game = MineField.Create(5, 10);

            game.Should().HaveCount(25);
            game.Should().AllBeAssignableTo <UndiscoveredCell>();
        }
Esempio n. 13
0
        public void DontThrowErrorIfRevealIsOutOfIndex(int row, int columns)
        {
            var game = MineField.Create(5, 10);

            game.Reveal(row, columns);
            game.Should().AllBeAssignableTo <UndiscoveredCell>();
        }
        public void Construct()
        {
            // Arrange
            var sut = new MineField(4, 4);

            // Assert
            sut.Cells.Length.Should().Be(4 * 4);
        }
Esempio n. 15
0
 public GameServiceTests()
 {
     _gameService = new GameService();
     MineField    = new MineField(1, 2);
     MineField.ItemCoordinates.Add("[0,2]", new Exit(0, 2));
     MineField.ItemCoordinates.Add("[1,1]", new Mine(1, 1));
     Turtle = new Turtle(0, 0, Direction.N);
 }
Esempio n. 16
0
        public void DontPoseMoreFlagsThanBombs()
        {
            var game = MineField.Create(5, 10);

            game.ForEach(cell => game.PoseFlag(cell));

            game.FlaggedCellCount.Should().Be(10);
        }
        public void SetBombs([Range(3, 5)] int bombCount)
        {
            // Arrange
            var sut = new MineField(4, 4, bombCount);

            // Assert
            sut.Cells.Where(x => x.IsBomb).Count().Should().Be(bombCount);
        }
Esempio n. 18
0
        public void RevealEmptyCell()
        {
            var game      = MineField.Create(5, 10);
            var emptyCell = game.OfType <UndiscoveredCell>().First(a => !a.HasBomb);

            game.Reveal(emptyCell);
            game[emptyCell].Should().BeAssignableTo <EmptyCell>();
        }
Esempio n. 19
0
        public void WinfOnlyIfAllFlagArePlacedOnBombAndCellRevelated()
        {
            var game = MineField.Create(5, 10);

            game.OfType <UndiscoveredCell>().Where(a => a.HasBomb).ForEach(cell => game.PoseFlag(cell));
            game.OfType <UndiscoveredCell>().Where(a => !a.HasBomb).ForEach(cell => game.Reveal(cell));
            game.Win.Should().BeTrue();
        }
Esempio n. 20
0
        public void CreateFirstLevel()
        {
            var       game  = new Game();
            MineField board = game.Start();

            board.ZoneSize.Should().Be(3);
            board.BombCount.Should().Be(1);
        }
Esempio n. 21
0
        public void CreateMineField_WithListOfStringsAllEqualLength_IsCreated()
        {
            var testField = new MineField(new List <string> {
                "..*", "...", ".*."
            });

            Assert.That(testField, Is.Not.Null);
        }
Esempio n. 22
0
        public void MineField_SimpleLayout_GeneratesCorrectHintString()
        {
            var expectedHint = "01*1221*1";

            var actualHint = new MineField(3, "..*....*.").GenerateHintString();

            Assert.AreEqual(expectedHint, actualHint);
        }
Esempio n. 23
0
        public void RevealABomb()
        {
            var game        = MineField.Create(5, 10);
            var trappedCell = game.OfType <UndiscoveredCell>().First(a => a.HasBomb);

            game.Reveal(trappedCell);

            game.Fail.Should().BeTrue();
        }
Esempio n. 24
0
        public MineFieldScreen(Game game)
            : base(game)
        {
            _field = new MineField(9, 9, 15, true, MinePutterDifficulty.Easy);

            _gameStateManager = new GameStateManager();
            _gameTimeHandler  = new GameTimeHandler(_gameStateManager);
            _scoreHandler     = new ScoreHandlerTextFile("scores.json");
        }
Esempio n. 25
0
        public void it_should_contain_elements()
        {
            var field = new MineField(3, 4, new List <string> {
                "*...", "*.*.", "...."
            });
            var sweeper = new MineSweeper(field);

            Assert.AreEqual(true, sweeper.GenerateSolution().Any());
        }
Esempio n. 26
0
        public async Task LoadGameAsync(String path)
        {
            if (_dataAccess == null)
            {
                throw new InvalidOperationException("No data access is provided.");
            }

            _Field = await _dataAccess.LoadAsync(path);
        }
Esempio n. 27
0
        public GameEngine(Settings settings)
        {
            _settings = settings;
            var(width, height, turtleDirection, turtlePosition, exit, mines) = _settings;

            var mineField = new MineField(width, height, mines, exit);

            _turtle = new Turtle(turtlePosition, turtleDirection, mineField);
        }
Esempio n. 28
0
    void Start()
    {
        int numberOfBombs = Mathf.FloorToInt((width * height) * bombsMultiplier);

        Debug.Log("Number of bombs is: Floor(" + width + " * " + height + " * " + bombsMultiplier + ") = " + numberOfBombs);
        field = new MineField(width, height, numberOfBombs);
        field.RegisterTileChanged(OnTileChanged);
        UpdateRemainingBombsText();
    }
Esempio n. 29
0
        private void OffsetPointToBlankTile(ref WrappingScreenGrid grid, MineField mineField, ref Point coordinates)
        {
            var searchCoordinates = coordinates;
            var maskIndex         = mineField.GetMaskIndex(coordinates);
            var tileFound         = false;

            for (var maxAdjacents = 1; maxAdjacents < 9; maxAdjacents++)
            {
                do
                {
                    searchCoordinates.X++;

                    if (searchCoordinates.X >= mineField.Width)
                    {
                        searchCoordinates.X = 0;
                        searchCoordinates.Y++;

                        if (searchCoordinates.Y >= mineField.Height)
                        {
                            searchCoordinates.Y = 0;
                        }

                        if (searchCoordinates.Y % BitMaskGrid.Size == 0)
                        {
                            maskIndex += mineField.MasksPerRow;
                        }
                    }

                    if (searchCoordinates.X % BitMaskGrid.Size == 0)
                    {
                        maskIndex++;

                        if (maskIndex >= mineField.MaskAmount)
                        {
                            maskIndex = 0;
                        }
                    }

                    if (!mineField.MineMasks[maskIndex][searchCoordinates.X, searchCoordinates.Y] &&
                        CalculateAdjacents(mineField, searchCoordinates) < maxAdjacents)
                    {
                        var offset = coordinates - searchCoordinates; // Swap?
                        grid.ShiftObserver(offset, out var wrappedBorder);

                        coordinates = searchCoordinates;
                        tileFound   = true;
                        break;
                    }
                } while (searchCoordinates != coordinates);

                if (tileFound)
                {
                    break;
                }
            }
        }
Esempio n. 30
0
    protected void OnMineFieldCreated(MineField mineField)
    {
        if (SectorControllers != null)
        {
            DestroyMineField();
        }

        MineField = mineField;
        BuildMineField();
    }
Esempio n. 31
0
 private void StartNewGame()
 {
     _mineField             = new MineField(_settings);
     _mineField.OnGameOver += OnGameOver;
     _mineField.OnGameWon  += OnGameWon;
     SetFace(_skin.DefaultFace);
     flagsLeftLabel.Text = _mineField.FlagsLeft.ToString();
     ResizeForm();
     pictureBox1.DrawField(_mineField, _skin);
 }
Esempio n. 32
0
        public void FirstMoveWithFlagUncoverTheFirstCell()
        {
            var firstMove = new MineCell(4, 4);
            var minefield = new MineField(9, 9, 10);

            minefield.UncoverCell(firstMove.Row, firstMove.Col);
            Assert.Equal(GameState.InProgress, minefield.GameState);

            var uncoveredCell = minefield.GetCell(firstMove.Row, firstMove.Col);
            Assert.Equal(MineState.Uncovered, uncoveredCell.GetState());
            Assert.Equal(0, uncoveredCell.NeighbourhoodMineCount);
        }
Esempio n. 33
0
        public void UncoverMineCauseDefeat()
        {
            var minefield = new MineField(2, 2, new MineCell(1, 1));

            minefield.UncoverCell(0, 0);
            Assert.Equal(GameState.InProgress, minefield.GameState);
            minefield.ToggleFlagOnCell(0, 1);
            minefield.UncoverNeighbours(0, 0);

            Assert.Equal(GameState.Defeat, minefield.GameState);
            Assert.Equal(MineState.IncorrectlyFlagged, minefield.GetCell(0, 1).GetState());
            Assert.Equal(MineState.MineDetonated, minefield.GetCell(1, 1).GetVisibleState(false));
        }
Esempio n. 34
0
 public void TestInit()
 {
     _mineField = new MineField(5, 5);
 }