1. public static void Conv(ref int n,ref int m)
2. {
3. //n=i, m=z
4. for (int i = 0; i < 3; i++) if (n == 3 && m == i) { m = 0; n = i; };
5. for (int i = 0; i < 3; i++) if (n == 4 && m == i) { m = 1; n = i; };
6. for (int i = 0; i < 3; i++) if (n == 5 && m == i) { m = 2; n = i; };
7. for (int i = 0; i < 3; i++) if (n == 6 && m == i) { m = i; n = i; };
8. for (int i = 0; i < 3; i++) if (n == 7 && m == i) { m = 2-i; n = i; };
9.
10. // 00 01 02
11. // 10 11 12
12. // 20 21 22
13.
14. }
15. public static int Step(ref string[,] A)
16. {
17. string[][] W = new string[8][];
18.
19. //все линии -> массивы (массив массивов)
20. for (int i = 0; i < 3; i++) // по строкам
21. {
22. W[i] = new string[3];
23. for (int j = 0; j < 3; j++)
24. {
25. W[i][j] = A[i, j];
26. }
27. }
28.
29. for (int j = 0; j < 3; j++) //по столбцам
30. {
31. W[j+3] = new string[3];
32. for (int i = 0; i < 3; i++)
33. {
34. W[j + 3][i] = A[i, j];
35. }
36. }
37. W[6] = new string[3]; //главня диаг.
38. for (int i = 0; i < 3; i++)
39. {
40.
41. W[6][i] = A[i, i];
42. }
43. W[7] = new string[3]; //диаг
44. for (int i = 0; i < 3; i++)
45. {
46.
47. W[7][i] = A[i, 2-i];
48. }
49. //проверяем победы
50. for (int i = 0; i < 8; i++)
51. {
52. if (W[i][0] == "x" && W[i][1] == "x" && W[i][2] == "x") return 1; //PLAYER WIN
53. if (W[i][0] == "o" && W[i][1] == "o" && W[i][2] == "o") return 2; //COMP WIN
54. }
55. //если 2 нолика -> третий : COMP WIN
56. for (int i = 0; i < 8; i++)
57. {
58. int k = 0;
59. for (int j = 0; j < 3; j++)
60. {
61. if (W[i][j] == "o") ++k;
62. }
63. if (k == 2)
64. {
65. for (int z = 0; z < 3; z++) if (W[i][z] == "")
66. {
67. Conv(ref i, ref z);
68. A[i, z] = "o"; return 2;
69. }
70. }
71. }
72. //если 2 крестика -> закрываем
73. for (int i = 0; i < 8; i++)
74. { int k=0;
75. for (int j = 0; j < 3; j++)
76. {
77. if (W[i][j] == "x") ++k;
78. }
79. if (k == 2) { for (int z = 0; z < 3; z++) if (W[i][z] =="") {Conv(ref i, ref z);
80. A[i, z] = "o"; return 0; } }
81.
82. }
83. //если есть один О -> ещё О
84. for (int i = 0; i < 8; i++)
85. {
86. int k = 0, n = 0;
87. for (int j = 0; j < 3; j++)
88. {
89. if (W[i][j] == "o") ++k; if (W[i][j] == "") ++n;
90. }
91. if (k == 1&&n==2) { for (int z = 0; z < 3; z++) if (W[i][z] =="") {Conv(ref i, ref z);
92. A[i, z] = "o"; return 0; } }
93.
94. }
95.
96. //случайно ставим O
97. bool e = false;
98. for (int i = 0; i < 3; i++)
99. for (int j = 0; j < 3; j++)
100. if (A[i, j] != "o" && A[i, j] != "x") e = true;
101. if (e == false) return 3;
102. else
103. {
104. Random ran = new Random();
105. int ir = ran.Next(3); int jr = ran.Next(3);
106. if (A[ir, jr] != "o" && A[ir, jr] != "x") { A[ir, jr] = "o"; return 0; }
107. else
108. while (A[ir, jr] == "o" || A[ir, jr] == "x") { ir = ran.Next(3); jr = ran.Next(3); }
109. A[ir, jr] = "o"; return 0;
110. }
111.
112.
113. }
114.
115.
116. }
117. }