Ejemplo n.º 1
0
 public char Guess(Position position)
 {
     Console.WriteLine("Guessing: {0}, {1}", position.ColFromLeft, position.RowFromTop);
       var info = Reveal(position);
       RenderAll(info);
       return info;
 }
Ejemplo n.º 2
0
 public bool CanGo(Position position)
 {
     return position.ColFromLeft >= 1 &&
      position.ColFromLeft <= Width &&
      position.RowFromTop >= 1 &&
      position.RowFromTop <= Height;
 }
Ejemplo n.º 3
0
 private static IEnumerable<Position> Get360Positions(Position position)
 {
     yield return position.Left();
       yield return position.Up().Left();
       yield return position.Up();
       yield return position.Up().Right();
       yield return position.Right();
       yield return position.Down().Right();
       yield return position.Down();
       yield return position.Down().Left();
 }
Ejemplo n.º 4
0
 public void AddMine(Position position)
 {
     SetField(_hiddenField, position, BOMB);
 }
Ejemplo n.º 5
0
 private int TryLook(Position position)
 {
     if (CanGo(position)) return Look(position);
       return 0;
 }
Ejemplo n.º 6
0
 private bool ShouldStopLooking(Position position)
 {
     if (!CanGo(position)) return true;
       return IsVisible(position);
 }
Ejemplo n.º 7
0
 private void SetField(char[][] field, Position position, char value)
 {
     field[position.RowFromTop - 1][position.ColFromLeft - 1] = value;
 }
Ejemplo n.º 8
0
 private char RevealPosition(Position position)
 {
     char info = CalcWarning(position);
       SetField(_visibleField, position, info);
       return info;
 }
Ejemplo n.º 9
0
 private int CalcWarningSide(Position position, int warning)
 {
     warning += TryLook(position);
       warning = CalcWarningUpAndDown(position, warning);
       return warning;
 }
Ejemplo n.º 10
0
 private char Reveal(Position position)
 {
     var info = RevealPosition(position);
       if (info == NOTHING) RevealAdjacent(position);
       return info;
 }
Ejemplo n.º 11
0
 private int Look(Position position)
 {
     return IsMineAt(position) ? 1 : 0;
 }
Ejemplo n.º 12
0
 private bool IsVisible(Position position)
 {
     return GetField(_visibleField, position) != UNKNOWN;
 }
Ejemplo n.º 13
0
 private bool IsMineAt(Position position)
 {
     return GetField(_hiddenField, position) == BOMB;
 }
Ejemplo n.º 14
0
 private char GetField(char[][] field, Position position)
 {
     return field[position.RowFromTop - 1][position.ColFromLeft - 1];
 }
Ejemplo n.º 15
0
 private int CalcWarningUpAndDown(Position position, int warning)
 {
     warning += TryLook(position.Up());
       warning += TryLook(position.Down());
       return warning;
 }
Ejemplo n.º 16
0
 private void RevealAdjacent(Position position)
 {
     foreach (var pos in Get360Positions(position))
       {
     if (ShouldStopLooking(pos)) continue;
     if (RevealPosition(pos) == NOTHING) RevealAdjacent(pos);
       }
 }
Ejemplo n.º 17
0
 private char CalcWarning(Position position)
 {
     if (IsMineAt(position)) return BOMB;
       var warning = Get360Positions(position).Sum(pos => TryLook(pos));
       return ConvertWarningToString(warning);
 }