public void Test_HasMinesLeftShouldReturnTrueWhenMinesCountGreaterThanZero() { var field = new GameField(10); field.MinesCount = 2; var result = field.HasMinesLeft(); Assert.AreEqual(true, result); }
public void Test_HasMinesLeftShouldReturnFalseWhenMinesCountLessThanZero() { var field = new GameField(10); field.MinesCount = -2; var result = field.HasMinesLeft(); Assert.AreEqual(false, result); }
/// <summary> /// Initializes a new instance of the <see cref="GameWindow" /> class /// </summary> /// <param name="fieldSize">The size of the game field</param> /// <param name="isExplosionChained">Used to determine if explosions will chain</param> public GameWindow(int fieldSize, bool isExplosionChained) { this.InitializeComponent(); ICellDamageHandler damageHandler = new DefaultDamageHandler(); var renderer = new WpfRenderer(this); var engine = new Engine(renderer, damageHandler); this.engine = engine; var field = new GameField(fieldSize, isExplosionChained); this.engine.Init(field); }
public void Test_EngineReturnsCorrectGameDataObjectToBeStoredInCaretaker() { var mockedRenderer = new Mock<IRenderer>(); var mockedDamageHandler = new Mock<ICellDamageHandler>(); var gameField = new GameField(5); var engine = new Engine(mockedRenderer.Object, mockedDamageHandler.Object); engine.Init(gameField); var caretaker = new GameDataCaretaker(); caretaker.GameData = engine.CreateMemento(); Assert.AreSame(caretaker.GameData.DamageHandler, mockedDamageHandler.Object, "Engine damage handler is not the same as the stored in memento"); Assert.AreSame(caretaker.GameData.GameField, gameField, "Engine game field is not the same as the stored in memento"); Assert.AreEqual(caretaker.GameData.MovesCount, engine.MovesCount, "Engine moves count is not equal to the stored in memento"); }
/// <summary> /// Starts a new game. /// </summary> public void Start() { this.renderer.ShowWelcome(); this.renderer.ShowFieldSizePrompt(); int fieldSize = this.inputProvider.GetFieldSize(); GameField field = new GameField(fieldSize); this.engine.Init(field); this.renderer.ShowNamePrompt(); string playerName = this.inputProvider.GetPlayerName(); HighscoreLogger.Instance.AddHighscore(playerName, this.engine.MovesCount); this.renderer.ShowHighscores(); }
public void Test_EngineUpdateFieldWithInvalidPositionShouldCallRendererShowError() { var firstPosition = new Position(0, 0); var setOfPosition = new HashSet<Position>(); setOfPosition.Add(firstPosition); var mockedRenderer = new Mock<IRenderer>(); var mockedDamageHandler = new Mock<ICellDamageHandler>(); var mockedRandomGenerator = new Mock<IRandomGenerator>(); mockedRandomGenerator.Setup(x => x.GetUniquePointsBetween(It.IsAny<int>(), It.IsAny<Position>(), It.IsAny<Position>())).Returns(setOfPosition); mockedRandomGenerator.Setup(x => x.GetRandomBetween(It.IsAny<int>(), It.IsAny<int>())).Returns(1); var gameField = new GameField(mockedRandomGenerator.Object, new RandomMineFactory(), 8); var engine = new Engine(mockedRenderer.Object, mockedDamageHandler.Object); engine.Init(gameField); engine.UpdateField(new Position(0, 1)); mockedRenderer.Verify(x => x.ShowErrorMessage(It.IsAny<string>()), Times.Once()); }
public void Test_EngineRestoresGameDataFromMemento() { var mockedRenderer = new Mock<IRenderer>(); var mockedDamageHandler = new Mock<ICellDamageHandler>(); var mockedDamageHandlerToBeReplaced = new Mock<ICellDamageHandler>(); var gameField = new GameField(5); var gameFieldToBeReplaced = new GameField(4); int movesCount = 10; var gameData = new GameData(gameField, movesCount, mockedDamageHandler.Object); var engine = new Engine(mockedRenderer.Object, mockedDamageHandlerToBeReplaced.Object); engine.Init(gameFieldToBeReplaced); engine.SetMemento(gameData); var newGameData = engine.CreateMemento(); Assert.AreSame(newGameData.DamageHandler, mockedDamageHandler.Object, "Engine damage handler is not the same as the stored in memento"); Assert.AreSame(newGameData.GameField, gameField, "Engine game field is not the same as the stored in memento"); Assert.AreEqual(newGameData.MovesCount, 10, "Engine moves count is not equal to the stored in memento"); }
public void Test_IsInRangeShouldReturnTrueWithValidPosition() { var field = new GameField(10); var result = field.IsInRange(new Position(0, 0)); Assert.AreEqual(true, result); }
public void Test_IsInRangeShouldReturnFalseWithInvalidPositionPositiveRowCol() { var field = new GameField(10); var result = field.IsInRange(new Position(11, 11)); Assert.AreEqual(false, result); }
public void Test_GameFieldShouldThrowWithInvalidCoordinates(int X, int Y) { var field = new GameField(5); var cell = field[X, Y]; }
public void Test_GameFieldShouldReturnCellWithValidCoordinates(int X, int Y) { var field = new GameField(5); var cell = field[X, Y]; Assert.IsInstanceOf<Cell>(cell, "Game field does not return a valid cell object"); }
/// <summary> /// Updates the UI grid component /// </summary> /// <param name="field">Object containing the information about the cell content</param> public void RefreshGameField(GameField field) { this.UpdateField(this.grid, field); }
/// <summary> /// Updates the background images of the <see cref="CellButton" /> in the grid /// </summary> /// <param name="grid">Object containing instances of <see cref="CellButton" /></param> /// <param name="field">Object containing information about the cell content</param> private void UpdateField(Grid grid, GameField field) { for (int row = 0; row < field.RowsCount; row++) { for (int col = 0; col < field.ColumnsCount; col++) { this.UpdateCellStatus(grid, row, col, field[row, col].IsDestroyed); } } }
/// <summary> /// Initializes grid element and populates it with <see cref="CellButton" /> /// </summary> /// <param name="field">Object containing the information about the cell content</param> /// <param name="gridWidth">Value that specifies the max width of the grid element</param> /// <param name="gridHeigth">Value that specifies the max height of the grid element</param> /// <returns>Window grid element</returns> private Grid CreateGridElement(GameField field, int gridWidth, int gridHeigth) { var fieldRowCount = field.RowsCount; var fieldColCount = field.ColumnsCount; var grid = new Grid(); grid.MaxWidth = gridWidth; grid.MaxHeight = gridHeigth; for (int i = 0; i < fieldRowCount; i++) { RowDefinition rowdef = new RowDefinition(); grid.RowDefinitions.Add(rowdef); } for (int i = 0; i < fieldColCount; i++) { ColumnDefinition coldef = new ColumnDefinition(); grid.ColumnDefinitions.Add(coldef); } CellButton cell; for (int row = 0; row < fieldRowCount; row++) { for (int col = 0; col < fieldColCount; col++) { if (field[row, col] is Mine) { cell = new CellButton(row, col, CellStatus.WithMine); var mineType = this.GetMineRepresentaion(field[row, col]); cell.Background = this.brush.GetBrush(mineType); } else { cell = new CellButton(row, col, CellStatus.Normal); cell.Background = this.brush.GetBrush("Dirt"); } cell.Click += new RoutedEventHandler(this.HandleMouseDown); grid.Children.Add(cell); Grid.SetRow(cell, row); Grid.SetColumn(cell, col); } } return grid; }
/// <summary> /// Initializes grid element and appends it to the window /// </summary> /// <param name="field">Object containing the information about the cell content</param> public void ShowGameField(GameField field) { Border border = new Border(); border.BorderThickness = new Thickness(10); border.BorderBrush = Brushes.White; this.grid = this.CreateGridElement(field, GridWidth, GridHeight); border.Child = this.grid; this.window.Content = border; }