Курсовая работа: Программа "Крестики-нолики 5 в ряд на неограниченном игровом поле"
bool player_first_step – Определяет приоритетность хода при старте новой игры. При значении true первым ходит человек, при false – компьютер. Значение по умолчанию – true.
int comp_level – Уровень игры компьютера. Возможные значения:
0 – профессионал, сильный уровень, играет агрессивно;
1 – любитель, придерживается защитной стратегии;
2 – новичок, играет слабо, но достаточно агрессивно.
Описание функций программы:
void CChildView::OnPaint() – выполняет перерисовку клиентской области окна.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Производит перерисовку клеток игрового поля. В зависимости от значений массива fields выводит в клетку:
0 – ничего не выводит;
1 – нолик синим цветом;
2 – крестик зеленым цветом;
3 – нолик красным цветом (входит в выигрышный ряд);
4 – крестик красным цветом (входит в выигрышный ряд);
5 – нолик желтым цветом (последний сделанный ход);
6 – крестик желтым цветом (последний сделанный ход);
void CChildView::OnLButtonDown(UINT, CPoint xy) – Обработка нажатия левой кнопки мыши на клиентской области окна.
Входные параметры:
UINT – флаги, не используется;
CPoint xy – координаты точки нажатия.
Возвращаемое значение:
Нет.
Алгоритм работы:
По нажатию левой кнопки мыши, если игра не закончена выполняются следующие действия:
1) Обновляется массив fields c учетом последнего поставленного нолика.
2) Осуществляется проверка, не закончена ли игра с помощью функции end_analyze.
3) Вычисляется ход компьютера с помощью функции ii.
4) Осуществляется проверка, не закончена ли игра с помощью функции end_analyze.
5) Производится перерисовка окна.
Алгоритм работы функции приведен на рисунке 1 в разделе 5.
int CChildView::end_analyze() – Функция определяет не закончена ли игра, т. е. не составлен ли выигрышный ряд на поле одним из игроков, на основании значений элементов массива fields.
Входные параметры:
Нет.
Возвращаемое значение:
int – реузультат работы, = 1 – игра окончена, = 0 – игра не окончена.
Алгоритм работы:
Для каждой клетки на игровом поле просматриваются соседние клетки по горизонтали, вертикали, вниз и вправо по диагонали. Если в одном из направлений символы во всех клетках на расстоянии до 4 совпадают с символом в текущей клетке, то игра считается выигранной. К значениям найденных клеток в массиве fields прибавляется 2 для отображения выигрышной ситуации в окно.
void CChildView::ii() – Функция расчета очередного хода компьютера.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Функция рассчитывает оценочную функцию для каждой клетки игрового поля, с помощью вызова функции calculate, и заносит рассчитанные значения в массив calc_field. Исходя из значений массива calc_field выбирает очередной ход компьютера.
Алгоритм работы функции приведен в разделе 6.
unsigned long CChildView::calculate(int id,int x,int y) – Расчет оценочной функции для клетки игрового поля, с учетом установки в нее крестика или нолика.
Входные параметры:
int id – определяет какой символ ставится в клетку (= 1 – нолик, = 2 – крестик);
int x – координата x клетки.
int y – координата y клетки.
Возвращаемое значение:
unsigned long – значение оценочной функции.
Алгоритм работы:
Алгоритм работы функции приведен в разделе 6.
void CChildView::OnNewGame() – В главном меню нажата кнопка «Новая игра».
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Вызывается функция new_game для начала новой игры. Перерисовывается игровое поле.
void CChildView::OnX1010() – В главном меню выбран размер поля 10x10.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Изменяются значения size_x, size_y. Вызывается функция new_game для начала новой игры. С помощью функции resize_window устанавливаются новые размеры окна.
void CChildView::OnX1919() – В главном меню выбран размер поля 19x19.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Изменяются значения size_x, size_y. Вызывается функция new_game для начала новой игры. С помощью функции resize_window устанавливаются новые размеры окна.
void CChildView::OnX3030() – В главном меню выбран размер поля 30x30.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Изменяются значения size_x, size_y. Вызывается функция new_game для начала новой игры. С помощью функции resize_window устанавливаются новые размеры окна.
void CChildView::OnX5050() – В главном меню выбран размер поля 50x50.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Изменяются значения size_x, size_y. Вызывается функция new_game для начала новой игры. С помощью функции resize_window устанавливаются новые размеры окна.
void CChildView::OnX100100() – В главном меню выбран размер поля 100x100.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Изменяются значения size_x, size_y. Вызывается функция new_game для начала новой игры. С помощью функции resize_window устанавливаются новые размеры окна.
void CChildView::new_game() – Функция начала новой игры.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Функция начинает новую игру, при этом:
1) Перевыделяется память для динамических массивов fields и calc_fields в зависимости от значений old_size_x, old_size_y и size_x, size_y.
2) Сбрасывается в false флаг end_game.
3) Если переменная player_first_step равна false, то рассчитывается первый ход компьютера с помощью вызова функции ii.
void CChildView::resize_window() – Функция установки размеров окна.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Устанавливает новые размеры окна, в зависимости от переменных size_x, size_y.
void CChildView::set_chеcked_menu(unsigned int old_id,unsigned int new_id) – Служит для снятия галочки и установки новой в главном меню при выборе размеров поля, уровня игры компьютера и очереднсоти хода.
Входные параметры:
unsigned int old_id – id элемента меню, с которого необходимо снять галочку;
unsigned int new_id – id элемента меню, на который необходимо поставить галочку;
Возвращаемое значение:
Нет.
Алгоритм работы:
Снимает галочку в главном меню с элемента, определяемого переменной old_id и ставит галочку на элемент, определяемый переменной new_id.
void CChildView::OnStepH() – В главном меню выбрана очередность хода – человек.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Изменяется значение переменной player_first_step. Вызывается функция new_game для начала новой игры. Выполняется перерисовка окна.
void CChildView::OnStepС() – В главном меню выбрана очередность хода – компьютер.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Изменяется значение переменной player_first_step. Вызывается функция new_game для начала новой игры. Выполняется перерисовка окна.
void CChildView::OnLevelBeg() – В главном меню выбран уровень сложности начинающий.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Изменяется значение переменной comp_level. Значение коэффициента агрессивности игры компьютера attack_factor устанавливается в 1. Вызывается функция new_game для начала новой игры. Выполняется перерисовка окна.
void CChildView::OnLevelAmat() – В главном меню выбран уровень сложности любитель.
Входные параметры:
Нет.
Возвращаемое значение:
Нет.
Алгоритм работы:
Изменяется значение переменной comp_level. Значение коэффициента агрессивности игры компьютера attack_factor устанавливается в 1. Вызывается функция new_game для начала новой игры. Выполняется перерисовка окна.
5. Алгоритм работы программы
Алгоритм выполнения очередного хода:
Игрок выполняет очередной ход при нажатии левой кнопки мыши на игровом поле. При этом вызывается функция обработчика OnLButtonDown, которая содержит основной алгоритм выполнения очередного хода игроком и компьютером. Алгоритм работы функции приведен на рисунке 1.
Рисунок 1 – Блок-схема работы функции OnLButtonDown.
Алгоритм расчета очередного хода компьютерного соперника:
Расчет очередного хода компьютерного соперника выполняется при помощи вызова функции ii. Расчет производится при старте игры, если приоритет хода принадлежит компьютеру или после хода игрока вызовом из функции OnLButtonDown.