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