コード例 #1
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 public char Guess(Position position)
 {
     Console.WriteLine("Guessing: {0}, {1}", position.ColFromLeft, position.RowFromTop);
       var info = Reveal(position);
       RenderAll(info);
       return info;
 }
コード例 #2
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 public bool CanGo(Position position)
 {
     return position.ColFromLeft >= 1 &&
      position.ColFromLeft <= Width &&
      position.RowFromTop >= 1 &&
      position.RowFromTop <= Height;
 }
コード例 #3
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 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();
 }
コード例 #4
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 public void AddMine(Position position)
 {
     SetField(_hiddenField, position, BOMB);
 }
コード例 #5
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private int TryLook(Position position)
 {
     if (CanGo(position)) return Look(position);
       return 0;
 }
コード例 #6
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private bool ShouldStopLooking(Position position)
 {
     if (!CanGo(position)) return true;
       return IsVisible(position);
 }
コード例 #7
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private void SetField(char[][] field, Position position, char value)
 {
     field[position.RowFromTop - 1][position.ColFromLeft - 1] = value;
 }
コード例 #8
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private char RevealPosition(Position position)
 {
     char info = CalcWarning(position);
       SetField(_visibleField, position, info);
       return info;
 }
コード例 #9
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private int CalcWarningSide(Position position, int warning)
 {
     warning += TryLook(position);
       warning = CalcWarningUpAndDown(position, warning);
       return warning;
 }
コード例 #10
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private char Reveal(Position position)
 {
     var info = RevealPosition(position);
       if (info == NOTHING) RevealAdjacent(position);
       return info;
 }
コード例 #11
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private int Look(Position position)
 {
     return IsMineAt(position) ? 1 : 0;
 }
コード例 #12
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private bool IsVisible(Position position)
 {
     return GetField(_visibleField, position) != UNKNOWN;
 }
コード例 #13
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private bool IsMineAt(Position position)
 {
     return GetField(_hiddenField, position) == BOMB;
 }
コード例 #14
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private char GetField(char[][] field, Position position)
 {
     return field[position.RowFromTop - 1][position.ColFromLeft - 1];
 }
コード例 #15
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private int CalcWarningUpAndDown(Position position, int warning)
 {
     warning += TryLook(position.Up());
       warning += TryLook(position.Down());
       return warning;
 }
コード例 #16
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private void RevealAdjacent(Position position)
 {
     foreach (var pos in Get360Positions(position))
       {
     if (ShouldStopLooking(pos)) continue;
     if (RevealPosition(pos) == NOTHING) RevealAdjacent(pos);
       }
 }
コード例 #17
0
ファイル: MineField.cs プロジェクト: decarufe/MineSweeperKata
 private char CalcWarning(Position position)
 {
     if (IsMineAt(position)) return BOMB;
       var warning = Get360Positions(position).Sum(pos => TryLook(pos));
       return ConvertWarningToString(warning);
 }