Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.01 KB | None | 0 0
  1. namespace GameOfLife
  2. {
  3. /* Реализуйте игру в жизнь на прямоугольном конечном поле.
  4.  
  5. На каждом ходе клетка меняет свое состояние по таким правилам:
  6. 1. Если у нее менее 2 живых соседей или более трех живых — она становится мертвой (false).
  7. 2. Если ровно 3 живых соседа, то клетка становится живой (true)
  8. 3. Если ровно 2 живых соседа, то клетка сохраняет своё состояние.
  9.  
  10. У каждой неграничной клетки есть 8 соседей (в том числе по диагонали)
  11.  
  12. Работу над игрой постройте итеративно в стиле TDD:
  13. 1. Сначала напишите какой-нибудь простейший тест в соседнем файле GameTest.cs. Тест должен быть красным.
  14. То есть должен проверять ещё нереализованное требование.
  15. 2. Только потом напшишите простейшую реализацию, которая делает тест зеленым.
  16. Не старайтесь реализовать всю логику, просто сделайте тест зеленым как можно быстрее.
  17. 3. Повторяйте процесс, пока ещё можете придумать новые красные тесты.
  18.  
  19. На каждый шаг (тест и реализация) у вас должно уходить не более 5 минут.
  20. Если вы не успели поднять тест за 5 минут — удалите этот тест и придумайте тест попроще.
  21. Засекайте время таймером на телефоне.
  22.  
  23. После каждого шага (тест или реализация) меняйте активного человека за клавиатурой.
  24.  
  25. Начните с простейших тестов.
  26.  
  27. Проект настроен так, что при каждой сборке запускаются все тесты и отчет выводится на консоль
  28. */
  29. public class Game
  30. {
  31. public static bool[,] NextStep(bool[,] field)
  32. {
  33. var a = new char[field.GetLength(0), field.GetLength(1)];
  34. for (var i = 0; i < a.GetLength(0); i++)
  35. for (var j = 0; j < a.GetLength(1); j++)
  36. a[i, j] = field[i, j];
  37.  
  38. for (var i = 0; i < a.GetLength(0); i++)
  39. for (var j = 0; j < a.GetLength(1); j++)
  40. {
  41. var temp = new bool[3,3];
  42. if (i == 0 || j == 0 || i == a.GetLength(0) - 1 || j == a.GetLength(1) - 1)
  43. {
  44. temp = GetUnic(i, j, a);
  45. }
  46. else
  47. {
  48. temp = new bool[,]{{a[i-1 , j-1], a[i, j-1], a[i + 1, j-1]},
  49. {a[i - 1, j], a[i , j], a[i + 1, j]},
  50. {a[i - 1 , j+1], a[i, j+1], a[i + 1, j+1]}
  51. };
  52. }
  53. a[i,j] = Check(a);
  54. }
  55. return a;
  56. }
  57.  
  58. private static bool[,] GetUnic(int i, int j, bool[,] a)
  59. {
  60. if (i == 0 && j == 0)
  61. return new bool[,]{{false, false, false},
  62. {false, a[i , j], a[i + 1, j]},
  63. {false, a[i, j+1], a[i + 1, j+1]}
  64. };
  65. if (i == 0 && j == a.GetLength(1) - 1)
  66. return new bool[,]{{false, false, false},
  67. {a[i - 1, j], a[i , j], false},
  68. {a[i - 1 , j+1], a[i, j+1], false}
  69. };
  70. if (i == a.GetLength(0) - 1 && j == 0)
  71. return new bool[,]{{false, a[i, j-1], a[i + 1, j-1]},
  72. {false, a[i , j], a[i + 1, j]},
  73. {false, false, false}
  74. };
  75. if (i == a.GetLength(0) - 1 && j == a.GetLength(1) - 1)
  76. return new bool[,]{{a[i-1 , j-1], a[i, j-1], false},
  77. {a[i - 1, j], a[i , j],false},
  78. {false, false, false}
  79. };
  80. if (i == a.GetLength(0) - 1)
  81. return new bool[,]{{a[i-1 , j-1], a[i, j-1], false},
  82. {a[i - 1, j], a[i , j], false},
  83. {a[i - 1 , j+1], a[i, j+1], false}
  84. };
  85. if(i == 0)
  86. return new bool[,]{{false, a[i, j-1], a[i + 1, j-1]},
  87. {false, a[i , j], a[i + 1, j]},
  88. {false, a[i, j+1], a[i + 1, j+1]}
  89. };
  90. if(j == 0)
  91. return new bool[,]{{false, false, false},
  92. {a[i - 1, j], a[i , j], a[i + 1, j]},
  93. {a[i - 1 , j+1], a[i, j+1], a[i + 1, j+1]}
  94. };
  95. if(j == a.GetLength(1) - 1)
  96. return new bool[,]{{a[i-1 , j-1], a[i, j-1], a[i + 1, j-1]},
  97. {a[i - 1, j], a[i , j], a[i + 1, j]},
  98. {false, false, false}
  99. };
  100. return null;
  101. }
  102. public static bool Check(bool[,] field)
  103. {
  104. var result = 0;
  105. for (var i = 0; i < 3; i++)
  106. for (var j = 0; j < 3; j++)
  107. if (field[i, j] && (i != j || j != 1))
  108. result += 1;
  109. if (result == 2)
  110. return field[1, 1];
  111. if (result == 3)
  112. return true;
  113. return false;
  114. }
  115. }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement