Example #1
0
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome to the \"Battle Field\" game.");

            ConsoleBattleField game = new ConsoleBattleField();
            int fieldSize = TryGetInputFieldSizeUntilValid(game);

            game.InitializeGameField(fieldSize);
            game.GenerateMines();

            while (true)
            {
                Console.WriteLine(String.Empty + game.GetBattleFieldAsString());

                int mineRow, mineCol;
                TryGetInputMineCoordinatesUntilValid(game, out mineRow, out mineCol);

                game.DetonateMine(mineRow, mineCol);
                if (game.MineCount == 0)
                {
                    Console.WriteLine(game.GetBattleFieldAsString());
                    Console.WriteLine("{0}Game over! {0}Detonated mines: {1}",
                        Environment.NewLine, game.DetonatedMinesCount);
                    break;
                }
            }
        }
        public void TestCellIsDetonated_WithNoDetonatedCells()
        {
            ConsoleBattleField testGame = new ConsoleBattleField();
            testGame.InitializeGameField(10);
            testGame.GenerateMines();

            for (int row = 0; row < 10; row++)
            {
                for (int col = 0; col < 10; col++)
                {
                    if (testGame.CellIsMine(row, col) || testGame.CellIsEmpty(row, col))
                    {
                        Assert.IsFalse(testGame.CellIsDetonated(row, col));
                    }
                }
            }
        }
        public void TestCellIsMine_WithMines()
        {
            ConsoleBattleField testGame = new ConsoleBattleField();
            testGame.InitializeGameField(10);
            testGame.GenerateMines();
            var fieldCopy = testGame.GameFieldCopy;

            for (int row = 0; row < 10; row++)
            {
                for (int col = 0; col < 10; col++)
                {
                    if (fieldCopy[row, col] == FieldCell.Mine1 ||
                        fieldCopy[row, col] == FieldCell.Mine2 ||
                        fieldCopy[row, col] == FieldCell.Mine3 ||
                        fieldCopy[row, col] == FieldCell.Mine4 ||
                        fieldCopy[row, col] == FieldCell.Mine5)
                    {
                        Assert.IsTrue(testGame.CellIsMine(row, col));
                    }
                }
            }
        }
        public void TestMineCount()
        {
            ConsoleBattleField testGame = new ConsoleBattleField();
            testGame.InitializeGameField(10);
            testGame.GenerateMines();

            int expectedCountMines = 0;

            for (int row = 0; row < 10; row++)
            {
                for (int col = 0; col < 10; col++)
                {
                    if (testGame.CellIsMine(row, col))
                    {
                        expectedCountMines++;
                    }
                }
            }

            Assert.AreEqual(expectedCountMines, testGame.MineCount);
        }
        public void TestGenerateMines_CountCorrectnessInTenCellField()
        {
            for (int i = 0; i < 20; i++)
            {
                ConsoleBattleField testGame = new ConsoleBattleField();
                testGame.InitializeGameField(10);
                testGame.GenerateMines();

                int expectedMinCountMines = 15; // >= 15% of the field
                int expectedMaxCountMines = 30; // <= 30% of the field

                int minesCount = 0;

                for (int row = 0; row < 10; row++)
                {
                    for (int col = 0; col < 10; col++)
                    {
                        if (testGame.CellIsMine(row, col))
                        {
                            minesCount++;
                        }
                    }
                }

                Assert.IsTrue(expectedMinCountMines <= minesCount &&
                    minesCount <= expectedMaxCountMines);
            }
        }
        public void TestGenerateMines_CountCorrectnessInFourCellField()
        {
            for (int i = 0; i < 20; i++)
            {
                ConsoleBattleField testGame = new ConsoleBattleField();
                testGame.InitializeGameField(2);
                testGame.GenerateMines();
                int expectedMinesCount = 1; // the only possible number of mines in 2x2 field
                // for the default 15%-30% of all field blocks

                int minesCount = 0;

                for (int row = 0; row < 2; row++)
                {
                    for (int col = 0; col < 2; col++)
                    {
                        if (testGame.CellIsMine(row, col))
                        {
                            minesCount++;
                        }
                    }
                }

                Assert.IsTrue(expectedMinesCount == minesCount);
            }
        }
        public void TestGenerateMines_CountCorrectnessInFieldLengthOfSix()
        {
            for (int i = 0; i < 20; i++)
            {
                ConsoleBattleField testGame = new ConsoleBattleField();
                testGame.InitializeGameField(6);
                testGame.GenerateMines();

                int expectedMinCountMines = 5;
                int expectedMaxCountMines = 11;

                int minesCount = 0;

                for (int row = 0; row < 6; row++)
                {
                    for (int col = 0; col < 6; col++)
                    {
                        if (testGame.CellIsMine(row, col))
                        {
                            minesCount++;
                        }
                    }
                }

                Assert.IsTrue(expectedMinCountMines <= minesCount &&
                    minesCount <= expectedMaxCountMines);
            }
        }
        public void TestDetonateMine_WithNoMine()
        {
            ConsoleBattleField testGame = new ConsoleBattleField();
            testGame.InitializeGameField(10);
            testGame.GenerateMines();
            var fieldCopy = testGame.GameFieldCopy;

            for (int row = 0; row < 10; row++)
            {
                for (int col = 0; col < 10; col++)
                {
                    if (!testGame.CellIsMine(row, col))
                    {
                        testGame.DetonateMine(row, col);
                    }
                }
            }
        }
        public void TestDetonateMine_WithMine1()
        {
            ConsoleBattleField testGame = new ConsoleBattleField();
            testGame.InitializeGameField(10);
            testGame.GenerateMines();
            var fieldCopy = testGame.GameFieldCopy;

            for (int row = 0; row < 10; row++)
            {
                for (int col = 0; col < 10; col++)
                {
                    if (FieldCell.Mine1 == fieldCopy[row, col])
                    {
                        testGame.DetonateMine(row, col);
                        Assert.IsTrue(testGame.CellIsDetonated(row, col));
                        if (row > 0 && col > 0)
                        {
                            Assert.IsTrue(testGame.CellIsDetonated(row - 1, col - 1));
                        }
                        if (row < 9 && col < 9)
                        {
                            Assert.IsTrue(testGame.CellIsDetonated(row + 1, col + 1));
                        }
                        if (row > 0 && col < 9)
                        {
                            Assert.IsTrue(testGame.CellIsDetonated(row - 1, col + 1));
                        }
                        if (row < 9 && col > 0)
                        {
                            Assert.IsTrue(testGame.CellIsDetonated(row + 1, col - 1));
                        }

                        return;
                    }
                }
            }
        }