Добавлен: 09.01.2024
Просмотров: 117
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
cin >> start_string;
cout << "Введите столбец начальной клетки : ";
cin >> start_column;
if (start_column < 10 && start_column >= 0 && start_string < 10 &&
start_string >= 0) {
if (PNode->field[start_string][start_column] == 2) {
cout << "Введите строку целевой клетки : ";
cin >> finish_string;
cout << "Введите столбец целевой клетки : ";
cin >> finish_column;
if (finish_column < 10 && finish_column >= 0 &&
finish_string < 10 && finish_string >= 0) {
if (PNode->field[finish_string][finish_column] != 1) {
if (abs(start_string - finish_string) == 1 &&
start_column == finish_column ||
abs(start_column - finish_column) == 1 &&
start_string == finish_string)
{
PNode->field
[finish_string][finish_column]=2;
PNode->count_connections
[start_string][start_column]++;
PNode->count_connections
[finish_string][finish_column]++;
int i = 0;
while (PNode->connections
[start_string][start_column][i]
!= -1) {
i++;
}
PNode->connections
[start_string][start_column][i] =
finish_string * 10 + finish_column;
i = 0;
while (PNode->connections
[finish_string][finish_column][i]
!= -1) {
i++;
}
PNode->connections
[finish_string][finish_column][i] =
start_string * 10 + start_column;
is_square(PNode, start_string,
start_column, finish_string,
finish_column);
}
else {
cout << "\u001B[31m\tЭту клетку нельзя"
<< "соеденить\n"
<< "\tОт начальной клетки до нее не
<< достать\n\n";
read_human_move(PNode);
}
}
else {
cout << "\u001B[31m\tЭту клетку нельзя соеденить\n"
<< "\tОна принадлежит сопернику\n\n";
read_human_move(PNode);
}
}
else {
cout << "\u001B[31m\tЦелевая клетка вне допустимого"
<<"диапозона\n"
<< "\tЗначния строки и столбца должны лежать в"
<<"интервале от 0 до 9\n\n";
read_human_move(PNode);
}
}
else {
cout << "\u001B[31m\tЭта клетка не принадлежит вам\n\n";
read_human_move(PNode);
}
}
else {
cout << "\u001B[31m\tНачальная клетка вне допустимого" <<"диапозона\n"
<< "\tЗначния строки и столбца должны лежать в интервале от 0 до"
<<"9\n\n";
read_human_move(PNode);
}
}
Функция game()
/*Функция игры
Параметры:
1)Указатель на узел дерева
Принцип работы:
1)Функция повторяется пока игра не окончена
2)i- показатель того, что компьютер собрал квадрат
3)Если компьютером был собран квадрат,то выводим соответствующую надпись
4)Выводим поле игры
4)Считываем ход человека
5)Если он собрал квадрат - повторяем пункты 4)-5)
6)Строим дерево возможных ходов
7)Производим алгоритм альфа-бетта отсечения
8)Выбираем лучший ход
9)Если был собран квадрат- повторяем пункты 6)-9)
*/
Tree_node* game(Tree_node* root) {
int i = 0;
while (game_is_over(root) == false) {
system("cls");
if (i > 0) {
cout << "\u001B[35mКомпьютер собрал квадрат \n";
i = 0;
}
Print_field(root);
read_human_move(root);
while (root->is_square == true) {
system("cls");
Print_field(root);
cout << "\u001B[35mВы собрали квадрат\n";
root->is_square = false;
read_human_move(root);
}
make_tree(root);
alpha_betta(root);
choose_best_move(root);
while (root->is_square == true) {
root = re_create_root(root);
root->is_square = false;
make_tree(root);
alpha_betta(root);
choose_best_move(root);
i++;
}
root = re_create_root(root);
}
return root;
}
Функция get_result()
/*Функция вывода результата игры
Параметры:
1)Указатель на корень дерева
Принцип работы:
1)Подсчёт баллов игрока и компьютера
2)Вывод результата
*/
void get_result(Tree_node* root) {
int score_c = 0, score_h = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (root->field[i][j] == 1) { score_c++; }
if (root->field[i][j] == 2) { score_h++; }
}
}
if (score_h > score_c) {
cout << "Вы выграли! Ваш счёт " << score_h
<< " Счёт компьютера " << score_c << "\n";
}
if (score_h < score_c) {
cout << "Вы проиграли( Ваш счёт " << score_h
<< " Счёт компьютера " << score_c << "\n";
}
if (score_h == score_c) {
cout << "Ничья! Ваш счёт " << score_h
<< " Счёт компьютера " << score_c << "\n";
}
}
Функция main()
int main() {
setlocale(LC_ALL, "ru"); //Включение русского языка
int field[10][10];
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
field[i][j] = 0;
}
}
field[9][0] = 1;
field[0][9] = 2;
Tree_node* root;
root = creat_root(field);
root = game(root);
Print_field(root);
get_result(root);
return 0;
}