Continous Integration in der Praxis Gruppenarbeit
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
2.9 KiB

  1. using System;
  2. namespace MiniGames.Shared.Models
  3. {
  4. public class TicTacToeBrett
  5. {
  6. public const int LEER = -1;
  7. int[,] Felder;
  8. public TicTacToeBrett()
  9. {
  10. Felder = new[,]
  11. {
  12. { LEER, LEER, LEER },
  13. { LEER, LEER, LEER },
  14. { LEER, LEER, LEER },
  15. };
  16. }
  17. public TicTacToeBrett(int[,] werte)
  18. {
  19. Felder = new int[3, 3];
  20. if (werte == null)
  21. {
  22. werte = new int[0, 0];
  23. }
  24. for (int i = 0; i < Felder.GetLength(0); i++)
  25. {
  26. for (int j = 0; j < Felder.GetLength(1); j++)
  27. {
  28. if (i < werte.GetLength(0) && j < werte.GetLength(1))
  29. {
  30. Felder[i, j] = werte[i, j];
  31. }
  32. else
  33. {
  34. Felder[i, j] = LEER;
  35. }
  36. }
  37. }
  38. }
  39. public bool Gleich(TicTacToeBrett anderes)
  40. {
  41. for (int i = 0; i < 3; i++)
  42. {
  43. for (int j = 0; j < 3; j++)
  44. {
  45. if (Felder[i, j] != anderes.Felder[i, j])
  46. {
  47. return false;
  48. }
  49. }
  50. }
  51. return true;
  52. }
  53. public bool Set(int pos, int wert)
  54. {
  55. int x = pos % 3;
  56. int y = pos / 3;
  57. try
  58. {
  59. if (Felder[x, y] == LEER)
  60. {
  61. Felder[x, y] = wert;
  62. return true;
  63. }
  64. }
  65. catch (IndexOutOfRangeException e)
  66. {
  67. // absichtlich leer
  68. }
  69. return false;
  70. }
  71. public bool Voll()
  72. {
  73. for (int i = 0; i < 3; i++)
  74. {
  75. for (int j = 0; j < 3; j++)
  76. {
  77. if (Felder[i, j] == LEER)
  78. {
  79. return false;
  80. }
  81. }
  82. }
  83. return true;
  84. }
  85. protected bool dreiGleichGefuellt(int a, int b, int c)
  86. {
  87. return a != LEER && a == b && b == c;
  88. }
  89. public int Gewinner()
  90. {
  91. for (int i = 0; i < 3; i++)
  92. {
  93. if (dreiGleichGefuellt(Felder[i, 0], Felder[i, 1], Felder[i, 2])) return Felder[i, 0];
  94. if (dreiGleichGefuellt(Felder[0, i], Felder[1, i], Felder[2, i])) return Felder[0, i];
  95. }
  96. if (
  97. dreiGleichGefuellt(Felder[0, 0], Felder[1, 1], Felder[2, 2]) ||
  98. dreiGleichGefuellt(Felder[2, 0], Felder[1, 1], Felder[0, 2])
  99. )
  100. {
  101. return Felder[1, 1];
  102. }
  103. return LEER;
  104. }
  105. }
  106. }