- •Содержание
- •1.1. Наименование продукта
- •1.2. Краткая характеристика области применения
- •2.1. Документ, на основании которого ведётся разработка
- •2.2. Организация, утвердившая документ
- •Требования к разработке
- •4.1. Требования к функциональным характеристикам
- •4.2. Требования к надёжности
- •4.3. Требования к составу и параметрам технических средств
- •4.4. Требования к информационной и программной совместимости
- •Требования к программной документации
- •Технико-экономические показатели
- •7. Стадии и этапы разработки
- •Введение
- •Постановка задачи
- •Выбор и проработка программных средств
- •Проектирование программы
- •1. Общая схема программы
- •2. Наследование класса kletka_pust
- •3. Переопределение стандартной операции
- •4. Структура класса common
- •5. Подробное описание метода game
- •6. Описание метода privet()
- •7. Описание методов registration() и enter()
- •8. Описание метода menu()
- •9. Описание метода record()
- •10. Описание метода spravka()
- •11. Описание подменю Begin
- •12. Руководство по использованию
- •Анализ результатов разработки программы
- •Заключение
- •Список литературы
- •Листинг программы
5. Подробное описание метода game
Метод реализует «искусственный интеллект» компьютера. Игрок всегда будет ходить первым и фишкой – крестик, а компьютер, соответственно, ноликом. В массиве маркер – крестик обозначен цифрой «1», нолик – цифрой «0», пустая клетка – цифрой «2». Алгоритм стратегии игры основывается на оценочной функции. Имеется три двумерных массива:
1) chArrPie[i][j]
2) iArrVes0 [i] [j]
3) iArrVesX[i] [j]
Первый массив chArrPie[i] [j] содержит ходы, как компьютера, так и игрока, или, образно говоря, его можно назвать игровой доской ходов. Вторая матрица iArrVes0 [i] [j] содержит текущие ходы фишки – нолик или матрица весов для ноликов, и третья матрица iArrVesX[i] [j], соответственно, текущие ходы фишки – крестик или матрица весов для фишек – крестики.
Изначально каждая ячейка матрицы имеет вес равный нулевому значению. Далее в процессе игры у каждой клетки на вертикали, горизонтали, главной и побочной диагонали изменяется свой вес и, где вес ячейки второй матрицы iArrVes0 [i] [j] наибольший, там ставится соответствующая фишка компьютера, при этом с рядом уже стоящей своей фишкой, таким образом, выстраивая возможный выигрышный ряд из своих фишек. Либо же фишка компьютера ставится, исходя из веса клеток третьей матрицы iArrVesX[i] [j] игрока, таким образом, компьютер блокирует возможный выигрышный ряд игрока.
Данный алгоритм оценивает все четыре выигрышные линии. Далее проверяется выигрышная ситуация игрока и компьютера и, соответственно, если такова существует, то осуществляется вычеркивание пяти подряд стоящих фишек с помощью функции line() для каждой линии.
Также в программе присутствуют члены класса, которые считают победы компьютера – win_comp, игрока – winZnak и ничью – countTie. Все счетчики для игрока отображаются на экране в правом верхнем углу в подменю Start меню Begin, а также вызывается метод сохранения количества побед игрока в любой момент – save (wins_old_nick,win_new_nick) – то есть сохраняются именно победы игрока, которые отображаются в разделе меню Record, при условии, если игрок попал в десятку лучших игроков. За количество побед отвечают два члена класса – wins_old_nick и win_new_nick. Первыйй – содержит количество побед уже зарегистрированного ника, второй – количество побед нового ника. Значения этих переменных передаются из метода game() в метод save(), таким образом, происходит обновление значений членов. Сохранение побед происходит в файле data.txt (рис. 5.1).
Рис. 5.1. Структура файла
Изначально в файле первая строка содержит количество ников: за количество ников отвечает член класса – n , на второй указана длина ника: массив length [i] отвечает за длины ников, так как ников содержится несколько в файле, и на этой же строке далее находится название ника, которое представлено, как массив символов – char nick[10][10], причем массив двумерный, так как ников несколько в файле, на третьей – количество побед, за которое отвечают члены wins_old_nick или win_new_nick. Члены wins_old_nick или win_new_nick обновляются в том случае, если игрок увеличивает количество побед, и, таким образом, его победы сохраняются в файле.
Графический интерфейс игры реализован с помощью стандартных
функций графического режима, который инициализируется при помощи функции inilization_graph(). При этом, управление меню происходит с помощью мыши.