/// <summary> /// Initializes a new instance of the <see cref="ConsoleGame" /> class. /// </summary> /// <param name="inputProvider">The input provider.</param> /// <param name="renderer">The renderer.</param> /// <param name="damageHandler">The damage handler.</param> public ConsoleGame(IInputProvider inputProvider, ConsoleRenderer renderer, ICellDamageHandler damageHandler) { this.engine = new Engine(renderer, damageHandler); this.inputProvider = inputProvider; this.renderer = renderer; this.damageHandler = damageHandler; }
/// <summary> /// Initializes a new instance of the GameData class. /// </summary> /// <param name="gameField">The game field.</param> /// <param name="movesCount">Moves made by the player.</param> /// <param name="damageHandler">The damage handler.</param> public GameData(GameField gameField, int movesCount, ICellDamageHandler damageHandler) { this.GameField = gameField; this.MovesCount = movesCount; this.DamageHandler = damageHandler; }
/// <summary> /// Lets the DamageHander damage the cell. /// </summary> /// <param name="damageHandler">The concrete damage handler.</param> public abstract void TakeDamage(ICellDamageHandler damageHandler);
/// <summary> /// Lets the DamageHander damage the cell. /// </summary> /// <param name="damageHandler">The concrete damage handler.</param> public override void TakeDamage(ICellDamageHandler damageHandler) { damageHandler.Damage(this); }
/// <summary> /// Makes the field react to explosion. /// </summary> /// <param name="positions">Position of the mine.</param> /// <param name="damageHandler">Cells damage handler.</param> public void ReactToExplosion(IList<Position> positions, ICellDamageHandler damageHandler) { foreach (var position in positions) { if (this.IsInRange(position)) { var currentCell = this.field[position.Row, position.Col]; if (!currentCell.IsDestroyed) { this.field[position.Row, position.Col].TakeDamage(damageHandler); if (currentCell is Mine) { --this.MinesCount; if (this.isExplosionChained == true) { var mine = currentCell as Mine; this.ReactToExplosion(mine.GetExplodingPattern(), damageHandler); } } } } } }
/// <summary> /// Loads a game from memento. /// </summary> /// <param name="memento">The game data to be loaded.</param> public void SetMemento(GameData memento) { this.field = memento.GameField; this.MovesCount = memento.MovesCount; this.damageHandler = memento.DamageHandler; }
/// <summary> /// Initializes a new instance of the <see cref="Engine" /> class. /// </summary> /// <param name="renderer">Game renderer.</param> /// <param name="damageHandler">Cell damage handler.</param> public Engine(IRenderer renderer, ICellDamageHandler damageHandler) { this.renderer = renderer; this.damageHandler = damageHandler; }
/// <summary> /// Lets the DamageHander damage the cell. /// </summary> /// <param name="damageHandler">The concrete damage handler.</param> public abstract override void TakeDamage(ICellDamageHandler damageHandler);