Файл: Курсовая работа Игра Точки и квадраты.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 09.01.2024

Просмотров: 534

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Функция is_square_up ()

/*Функция проверки того, что на текущем ходу был сформирован квадрат из текущих клеток и клеток, находящихся над нимиПараметры функции:1)Указатель на узел дерева2)Номер строки первой клетки3)Номер столбца первой клетки4)Номер строки второй клетки5)Номер столбца второй клеткиПринцип работы:1)Если у первой клетки есть связь с верхней, то переменная flag_first=true2)Если у второй клетки есть связь с верхней, то переменная flag_second=true3)Если клетки соеденены с верхними, то проверяем связь верхних клеток между собой*/bool is_square_up(Tree_node* PNode, int string_first, int column_first, int string_second, int column_second) { bool flag_first = false; bool flag_second = false; bool flag_up = false; for (int i = 0; i < 4; i++) { if (PNode->connections[string_first][column_first][i] == (string_first - 1) * 10 + column_first) { flag_first = true; } if (PNode->connections[string_second][column_second][i] ==(string_second - 1) * 10 + column_second) { flag_second = true; } } if (flag_second == true && flag_first == true) { for (int i = 0; i < 4; i++) { if (PNode->connections[string_first - 1][column_first][i] ==(string_second - 1) * 10 + column_second) { flag_up = true; } } } return flag_up;}

Функция is_square_down ()

/*Функция проверки того, что на текущем ходу был сформирован квадрат из текущих клеток и клеток, находящихся под нимиПараметры функции:1)Указатель на узел дерева2)Номер строки первой клетки3)Номер столбца первой клетки4)Номер строки второй клетки5)Номер столбца второй клеткиПринцип работы:1)Если у первой клетки есть связь с нижней, то переменная flag_first=true2)Если у второй клетки есть связь с нижней, то переменная flag_second=true3)Если клетки соеденены с нижними, то проверяем связь нижних клеток между собой*/bool is_square_down(Tree_node* PNode, int string_first, int column_first, int string_second, int column_second) { bool flag_first = false; bool flag_second = false; bool flag_down = false; for (int i = 0; i < 4; i++) {
if (PNode->connections[string_first][column_first][i] ==(string_first + 1) * 10 + column_first) { flag_first = true; } if (PNode->connections[string_second][column_second][i] == (string_second + 1) * 10 + column_second) { flag_second = true; } } if (flag_second == true && flag_first == true) { for (int i = 0; i < 4; i++) { if (PNode->connections[string_first + 1][column_first][i] ==(string_second + 1) * 10 + column_second) { flag_down = true; } } } return flag_down;}

Функция is_square_right ()

/*Функция проверки того, что на текущем ходу был сформирован квадрат из текущих клеток и клеток, находящихся справаПараметры функции:1)Указатель на узел дерева2)Номер строки первой клетки3)Номер столбца первой клетки4)Номер строки второй клетки5)Номер столбца второй клеткиПринцип работы:1)Если у первой клетки есть связь с правой, то переменная flag_first=true2)Если у второй клетки есть связь с правой, то переменная flag_second=true3)Если клетки соеденены с правыми, то проверяем связь правых клеток между собой*/bool is_square_right(Tree_node* PNode, int string_first, int column_first, int string_second, int column_second) { bool flag_first = false; bool flag_second = false; bool flag_right = false; for (int i = 0; i < 4; i++) { if (PNode->connections[string_first][column_first][i] ==string_first * 10 + column_first + 1) { flag_first = true; } if (PNode->connections[string_second][column_second][i] ==string_second * 10 + column_second + 1) { flag_second = true; } } if (flag_second == true && flag_first == true) { for (int i = 0; i < 4; i++) { if (PNode->connections[string_first][column_first + 1][i] ==string_second * 10 + column_second + 1) { flag_right = true; } } } return flag_right;}

Функция is_square_left ()

/*Функция проверки того, что на текущем ходу был сформирован квадрат из текущих клеток и клеток, находящихся слеваПараметры функции:1)Указатель на узел дерева2)Номер строки первой клетки3)Номер столбца первой клетки4)Номер строки второй клетки5)Номер столбца второй клеткиПринцип работы:1)Если у первой клетки есть связь с левой, то переменная flag_first=true2)Если у второй клетки есть связь с левой, то переменная flag_second=true3)Если клетки соеденены с леваыми, то проверяем связь левых клеток между собой*/bool is_square_left(Tree_node* PNode, int string_first, int column_first, int string_second, int column_second) { bool flag_first = false; bool flag_second = false; bool flag_left = false; for (int i = 0; i < 4; i++) { if (PNode->connections[string_first][column_first][i] ==string_first * 10 + column_first - 1) { flag_first = true; } if (PNode->connections[string_second][column_second][i] == string_second * 10 + column_second - 1) { flag_second = true; } } if (flag_second == true && flag_first == true) { for (int i = 0; i < 4; i++) { if (PNode->connections[string_first][column_first - 1][i] == string_second * 10 + column_second - 1) { flag_left = true; } } } return flag_left;}

Функция is_square ()

/*Функция проверки того, что на текущем ходу был сформирован квадратПараметры функции:1)Указатель на узел дерева2)Номер строки первой клетки3)Номер столбца первой клетки4)Номер строки второй клетки5)Номер столбца второй клеткиПринцип работы:1)Смотрим номер строки.Если клетки расположены на одной строке:1.1)Если она последняя,то вызываем функцию is_square_up()1.2)Если она первая,то вызываем функцию is_square_down()1.3)Если строка не крайняя,то вызывем функции is_square_up() и is_square_down()2)Смотрим номер столбца. Если клетки в одном столбце:2.1)Если он последний,то вызываем функцию is_square_left()2.2)Если он первый,то вызываем функцию is_square_right()2.3)Если столбец не крайний, то вызывем функции is_square_left() и is_square_right()*/void is_square(Tree_node* PNode, int string_first, int column_first, int string_second, int column_second) { bool flag = false; if (string_first == string_second) { if (string_first == 9) { flag = is_square_up(PNode, string_first, column_first,string_second, column_second); if (flag == true) {PNode->is_square = true;} } if (string_first == 0) {
flag = is_square_down(PNode, string_first, column_first,string_second, column_second); if (flag == true) { PNode->is_square = true; } } if (string_first > 0 && string_first < 9) { flag = is_square_up(PNode, string_first, column_first,string_second, column_second); if (flag == true) { PNode->is_square = true; } flag = is_square_down(PNode, string_first, column_first,string_second, column_second); if (flag == true) { PNode->is_square = true; } } } if (column_first == column_second) { if (column_first == 9) { flag = is_square_left(PNode, string_first, column_first,string_second, column_second); if (flag == true) { PNode->is_square = true; } } if (column_first == 0) { flag = is_square_right(PNode, string_first, column_first,string_second, column_second); if (flag == true) { PNode->is_square = true; } } if (column_first > 0 && column_first < 9) { flag = is_square_left(PNode, string_first, column_first,string_second, column_second); if (flag == true) { PNode->is_square = true; } flag = is_square_right(PNode, string_first, column_first,string_second, column_second); if (flag == true) { PNode->is_square = true; } }}}

Функция generation_move()

/*Функция генерации ходаПараметры функии:1)Указатель на узел дерева2)Значение целого типа: 1, если нужно сгенерировать ход для компьютера,2 - для человека.Принцип работы:1)Просматриваем все значения клеток текущего игрового поля2)Если значение равно переданному, то рассматриваем его позицию.3)В зависимости от позиции равссматриваем соседнии клетки4)Ели узел был добвлен, проверяем был ли собрана квадрат на данном ходу*/void generation_move(Tree_node* PNode, const int value) { bool flag; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (PNode->field[i][j] == value) { if (i == 0 && j == 0) { flag=check_cell(PNode, i, j, value, 's', 1); if (flag == true) {is_square(PNode->child[PNode->count_child-1], i, j,i, j + 1);} flag=check_cell(PNode, i, j, value, 'c', 1); if (flag == true) {is_square(PNode->child[PNode->count_child-1], i, j,i+1, j );} } if (i == 0 && j == 9) { flag=check_cell(PNode, i, j, value, 's', -1); if (flag == true) { is_square(PNode->child[PNode->count_child-1], i, j,i, j - 1);} flag=check_cell(PNode, i, j, value, 'c', 1); if (flag == true) { is_square(PNode->child[PNode->count_child-1], i, j, i + 1, j);} } if (i == 9 && j == 0) { flag=check_cell(PNode, i, j, value, 'c', -1); if (flag == true) { is_square(PNode->child[PNode->count_child - 1], i, j, i - 1, j);} flag=check_cell(PNode, i, j, value, 's', 1); if (flag == true) { is_square(PNode->child[PNode-> count_child - 1], i,j, i, j + 1);} } if (i == 9 && j == 9) { flag=check_cell(PNode, i, j, value, 'c', -1); if (flag == true) { is_square(PNode->child[PNode->count_child - 1], i, j, i - 1, j);} check_cell(PNode, i, j, value, 's', -1); if (flag == true) { is_square(PNode->child[PNode->count_child - 1], i, j, i, j - 1); } } if (i == 0 && j > 0 && j < 9) { flag=check_cell(PNode, i, j, value, 's', -1); if (flag == true) { is_square(PNode->child[PNode->count_child - 1], i, j, i, j - 1); } flag=check_cell(PNode, i, j, value, 's', 1); if (flag == true) { is_square(PNode->child[PNode->count_child - 1], i, j, i, j + 1); } flag=check_cell(PNode, i, j, value, 'c', 1); if (flag == true) { is_square(PNode->child[PNode->count_child - 1], i,j, i + 1, j); } } if (i == 9 && j > 0 && j < 9) { flag=check_cell(PNode, i, j, value, 's', -1); if (flag == true) { is_square(PNode->child[PNode-> count_child - 1], i, j, i, j - 1); } flag=check_cell(PNode, i, j, value, 's', 1); if (flag == true) { is_square(PNode->child[PNode->count_child - 1], i,j, i, j + 1); } flag=check_cell(PNode, i, j, value, 'c', -1); if (flag == true) { is_square(PNode->child[PNode->count_child - 1], i,j, i - 1, j); } } if (j == 0 && i != 0 && i != 9) { flag=check_cell(PNode, i, j, value, 'c', -1); if (flag == true) { is_square(PNode->child[PNode->