RSS    

   Курсовая работа: Программа "Крестики-нолики 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.

Страницы: 1, 2, 3, 4, 5


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.