- •Федеральное государственное автономное образовательное учреждение высшего профессионального образования «национальный исследовательский технологический университет «миСиС»
- •Курсовая работа
- •Теоритическое введение. Алгоритм. Понятие алгоритма.
- •Исполнитель и разработчик алгоритма
- •Изображение алгоритма в виде схемы.
- •Этапы решения задач
- •Язык c#. Объектно-ориентированное программирование.
- •Разработка алгоритма.
- •Функция разрабатываемого приложения
- •Варианты использования
- •Победа игрока
- •Победа компьютера
- •Описание переменных
- •Распределение исходного кода по файлам проекта
- •Код Form1(Main)
- •Список литературы
Описание переменных
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
Распределение исходного кода по файлам проекта
Проект Main
Является запускаемым проектом. Содержит ссылки на проекты Library. Основное окно приложения, реализующее отображение выходных данных и основные элементы управления:
Новая игра
О программе
Выход
Проект Library
Библиотека классов приложения, организующая взаимоотношения между классом, его методами.
Контрольный пример и описание результатов
запустим приложение
при нажатии “О программе” появиться окно с правилами игры
нажимая на ячейки, появляется “X”, следом ходит противник “0” (компьютер делает обдуманный шаг)
выигрыш или проигрыш пользователя
можно посмотреть счет побед
при нажатии на “Новая игра” игра начинается заново
выход из приложения
В данном примере продемонстрированы основные возможности приложения.
Код библиотеки классов X0
public static void Conv(ref int n,ref int m)
{
//n=i, m=z
for (int i = 0; i < 3; i++) if (n == 3 && m == i) { m = 0; n = i; };
for (int i = 0; i < 3; i++) if (n == 4 && m == i) { m = 1; n = i; };
for (int i = 0; i < 3; i++) if (n == 5 && m == i) { m = 2; n = i; };
for (int i = 0; i < 3; i++) if (n == 6 && m == i) { m = i; n = i; };
for (int i = 0; i < 3; i++) if (n == 7 && m == i) { m = 2-i; n = i; };
// 00 01 02
// 10 11 12
// 20 21 22
}
public static int Step(ref string[,] A)
{
string[][] W = new string[8][];
//все линии -> массивы (массив массивов)
for (int i = 0; i < 3; i++) // по строкам
{
W[i] = new string[3];
for (int j = 0; j < 3; j++)
{
W[i][j] = A[i, j];
}
}
for (int j = 0; j < 3; j++) //по столбцам
{
W[j+3] = new string[3];
for (int i = 0; i < 3; i++)
{
W[j + 3][i] = A[i, j];
}
}
W[6] = new string[3]; //главня диаг.
for (int i = 0; i < 3; i++)
{
W[6][i] = A[i, i];
}
W[7] = new string[3]; //диаг
for (int i = 0; i < 3; i++)
{
W[7][i] = A[i, 2-i];
}
//проверяем победы
for (int i = 0; i < 8; i++)
{
if (W[i][0] == "x" && W[i][1] == "x" && W[i][2] == "x") return 1; //PLAYER WIN
if (W[i][0] == "o" && W[i][1] == "o" && W[i][2] == "o") return 2; //COMP WIN
}
//если 2 нолика -> третий : COMP WIN
for (int i = 0; i < 8; i++)
{
int k = 0;
for (int j = 0; j < 3; j++)
{
if (W[i][j] == "o") ++k;
}
if (k == 2)
{
for (int z = 0; z < 3; z++) if (W[i][z] == "")
{
Conv(ref i, ref z);
A[i, z] = "o"; return 2;
}
}
}
//если 2 крестика -> закрываем
for (int i = 0; i < 8; i++)
{ int k=0;
for (int j = 0; j < 3; j++)
{
if (W[i][j] == "x") ++k;
}
if (k == 2) { for (int z = 0; z < 3; z++) if (W[i][z] =="") {Conv(ref i, ref z);
A[i, z] = "o"; return 0; } }
}
//если есть один О -> ещё О
for (int i = 0; i < 8; i++)
{
int k = 0, n = 0;
for (int j = 0; j < 3; j++)
{
if (W[i][j] == "o") ++k; if (W[i][j] == "") ++n;
}
if (k == 1&&n==2) { for (int z = 0; z < 3; z++) if (W[i][z] =="") {Conv(ref i, ref z);
A[i, z] = "o"; return 0; } }
}
//случайно ставим O
bool e = false;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
if (A[i, j] != "o" && A[i, j] != "x") e = true;
if (e == false) return 3;
else
{
Random ran = new Random();
int ir = ran.Next(3); int jr = ran.Next(3);
if (A[ir, jr] != "o" && A[ir, jr] != "x") { A[ir, jr] = "o"; return 0; }
else
while (A[ir, jr] == "o" || A[ir, jr] == "x") { ir = ran.Next(3); jr = ran.Next(3); }
A[ir, jr] = "o"; return 0;
}
}
}
}