Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка на диплом (от Коробкова).doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
838.66 Кб
Скачать

4.3 Реализация игры.

Итогом работы стала игровая программа нарды для мобильных устройств с поддержкой технологии Java. Игра обладает богатой графикой и набором особенностей, позволяющих выделить именно эту реализацию среди подобных игр конкурентов. К этим особенностям можно отнести возможности игры с историческими личностями, имеющими собственные стили игры, игры в турнирах, ведение рейтингов. Скриншоты из игры представлены на рисунке 3.

Для управления игрой используются переменные: private byte gameState, private int currentColor, private int moveNumber.

moveNumber – это номер хода. currentColor – цвет игрока, выполняющего ход(чёрный или белый). gameState может принимать значения:

byte GAMEOVER=1;//игра кончена

byte INPLAYERMOVE=3;//приложение ожидает выполнения хода игрока

byte INCOMPUTERMOVE=4;//приложение ожидает выполнения хода компьютера

byte MOVECOMPLETED=5;//ход выполнен

Переменная gameState используется для управления событиями и определения, какие процессы имеют место в данный момент. К примеру, если пользователь хочет поставить фишку, он может это сделать только если сейчас его очередь.

Теперь представляю вашему вниманию структурную схему игры:

рис 5. Структурная схема игры.

Функция StartTurn() вызывается в начале игры и после выполненного хода любым из игроков. Она отвечает за определение игровой ситуации и подготовку следующего хода.

Прежде всего она проверяет, имеет ли текущий игрок хоть одну клетку для хода. Если нет, она переключает ход на другого игрока и проверяет, имеет ли другой игрок клетки для хода. Когда ни один игрок не может делать ход, значит, игра окончена.

В противном случае, функция организует выполнение хода для текущего игрока. Если текущий игрок – пользователь, всё очень просто далее вызывается MakePlayerMove(), которая выполняет некоторые служебные оерации и вызывает MakeMove() для выполнения хода.

Если текущий игрок – компьютер, вызывается функция CalculateComputerMove() для вычисления лучшего хода. Затем вызывается MakeComputerMove() и MakeMove(). MakeMove() обновляет класс Board и помещает новую фишку в нужную клетку.

Далее вызывается функция EndMove(), которая переключает текущего игрока и вновь вызывает StartTurn().

Функция CalculateComputerMove() содержит 6 вспомогательных функций:

Первая функция генерирует все возможные ходы (с текущим положением кубиков) и осуществляет выборку наиболее вероятных ходов.

Вторая функция осуществляет подсчёт пипсов. Количество пипсов – это число, которое нужно выбросить на игральных костях, чтобы вывести все свои фишки. По этому параметру определяют лидерство и близость победы.

Третья функция максимизации числа полей с двумя и более фишками. Число полей с двумя и более фишками является противоположностью предыдущему параметру, его стремятся максимизировать. Чем больше таких полей, тем устойчивее позиция и тем сложнее через нее пройти.

Четвертая функция рассчитывает возможность блокад – несколько смежных полей, занятых двойными или более фишками. С этим параметром можно связать изменение стратегии – нужно проводить свои фишки вперед, если их запирают.

Пятая функция анализирует число прямых возможностей взятий – это число одинарных фишек на расстоянии 6 или меньше полей. Есть схожий с этим параметр – число одинарных фишек на расстоянии меньшем 12. Схожим параметром является вероятность взятия одинарной фишки, которая в большинстве случаев рассчитывается по предварительно посчитанной таблице.

Шестая анализирует выгодную позицию. Анализируя сыгранные партии можно заметить, что занятие определенных позиций на доске способствует победе. Такими позициями является 4-я и 5-я клетки и соответственно 20-я и 21-я симметричные клетки. Таким образом, в простейшем случае можно ввести факт занятия этих клеток в оценочную функцию. В более общем случае, вводят весовые коэффициенты для всех полей доски.

Рис. 6 Скриншоты игры.