Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая по программированию (2012).docx
Скачиваний:
102
Добавлен:
20.04.2015
Размер:
286.2 Кб
Скачать
    1. Описание переменных

Namespace: System.Windows.Forms

  • DataGridView – отвечает за отображение данных

  • Label1,2,3 – отвечает за счет игры

  • ToolStripMenu – отвечает за функции программы

  • MessageBoxпоказывает кто победитель и правила игры

Методы, локальные и глобальные переменные в Form.cs

  • i,j - переменные счетчика цикла

  • s[,] – двумерный массив, служащий для передачи данных из dataGridView1.Rows[i].Cells[j] в метод Step.

  • X0.Step(ref s) – класс X0, метод Step, который возращает 1, 2 или 3

Методы, локальные и глобальные переменные в X0.cs

В данной библиотеке классов есть 2 метода (Conv, Step).

  • W[i][j] – массив массивов, служит для более удобной работой с массивом 3х3

  • i,j,z - переменные счетчика цикла

  • k – считывает сколько крестиков или ноликов находится в строке/диагонале

  • ran – Random, служит для случайной постановки нолика.

  • ir и jr – индексы массива массивов(от 0 до 3), нужны для случайного хода.

  • n и m – параметры, которые нужны, чтобы не было выхода за пределы массива

  • Conv(ref i, ref z) – метод, которые меняет значение i и z

  1. Распределение исходного кода по файлам проекта

    1. Проект Main

Является запускаемым проектом. Содержит ссылки на проекты Library. Основное окно приложения, реализующее отображение выходных данных и основные элементы управления:

  • Новая игра

  • О программе

  • Выход

    1. Проект Library

Библиотека классов приложения, организующая взаимоотношения между классом, его методами.

  1. Контрольный пример и описание результатов

  1. запустим приложение

  2. при нажатии “О программе” появиться окно с правилами игры

  3. нажимая на ячейки, появляется “X”, следом ходит противник “0” (компьютер делает обдуманный шаг)

  4. выигрыш или проигрыш пользователя

  5. можно посмотреть счет побед

  6. при нажатии на “Новая игра” игра начинается заново

  7. выход из приложения

В данном примере продемонстрированы основные возможности приложения.

    1. Код библиотеки классов X0

  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. // 00 01 02

  10. // 10 11 12

  11. // 20 21 22

  12. }

  13. public static int Step(ref string[,] A)

  14. {

  15. string[][] W = new string[8][];

  16. //все линии -> массивы (массив массивов)

  17. for (int i = 0; i < 3; i++) // по строкам

  18. {

  19. W[i] = new string[3];

  20. for (int j = 0; j < 3; j++)

  21. {

  22. W[i][j] = A[i, j];

  23. }

  24. }

  25. for (int j = 0; j < 3; j++) //по столбцам

  26. {

  27. W[j+3] = new string[3];

  28. for (int i = 0; i < 3; i++)

  29. {

  30. W[j + 3][i] = A[i, j];

  31. }

  32. }

  33. W[6] = new string[3]; //главня диаг.

  34. for (int i = 0; i < 3; i++)

  35. {

  36. W[6][i] = A[i, i];

  37. }

  38. W[7] = new string[3]; //диаг

  39. for (int i = 0; i < 3; i++)

  40. {

  41. W[7][i] = A[i, 2-i];

  42. }

  43. //проверяем победы

  44. for (int i = 0; i < 8; i++)

  45. {

  46. if (W[i][0] == "x" && W[i][1] == "x" && W[i][2] == "x") return 1; //PLAYER WIN

  47. if (W[i][0] == "o" && W[i][1] == "o" && W[i][2] == "o") return 2; //COMP WIN

  48. }

  49. //если 2 нолика -> третий : COMP WIN

  50. for (int i = 0; i < 8; i++)

  51. {

  52. int k = 0;

  53. for (int j = 0; j < 3; j++)

  54. {

  55. if (W[i][j] == "o") ++k;

  56. }

  57. if (k == 2)

  58. {

  59. for (int z = 0; z < 3; z++) if (W[i][z] == "")

  60. {

  61. Conv(ref i, ref z);

  62. A[i, z] = "o"; return 2;

  63. }

  64. }

  65. }

  66. //если 2 крестика -> закрываем

  67. for (int i = 0; i < 8; i++)

  68. { int k=0;

  69. for (int j = 0; j < 3; j++)

  70. {

  71. if (W[i][j] == "x") ++k;

  72. }

  73. if (k == 2) { for (int z = 0; z < 3; z++) if (W[i][z] =="") {Conv(ref i, ref z);

  74. A[i, z] = "o"; return 0; } }

  75. }

  76. //если есть один О -> ещё О

  77. for (int i = 0; i < 8; i++)

  78. {

  79. int k = 0, n = 0;

  80. for (int j = 0; j < 3; j++)

  81. {

  82. if (W[i][j] == "o") ++k; if (W[i][j] == "") ++n;

  83. }

  84. if (k == 1&&n==2) { for (int z = 0; z < 3; z++) if (W[i][z] =="") {Conv(ref i, ref z);

  85. A[i, z] = "o"; return 0; } }

  86. }

  87. //случайно ставим O

  88. bool e = false;

  89. for (int i = 0; i < 3; i++)

  90. for (int j = 0; j < 3; j++)

  91. if (A[i, j] != "o" && A[i, j] != "x") e = true;

  92. if (e == false) return 3;

  93. else

  94. {

  95. Random ran = new Random();

  96. int ir = ran.Next(3); int jr = ran.Next(3);

  97. if (A[ir, jr] != "o" && A[ir, jr] != "x") { A[ir, jr] = "o"; return 0; }

  98. else

  99. while (A[ir, jr] == "o" || A[ir, jr] == "x") { ir = ran.Next(3); jr = ran.Next(3); }

  100. A[ir, jr] = "o"; return 0;

  101. }

  102. }

  103. }

  104. }