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

4 Реализация программы

4.1 Реализация логической структуры, используемой в игре

Для объявления глобальных переменных и структуры был создан файл global.h. Содержимое этого файла:

typedef struct{

int all;

int win;

int winCurr;

int lossCurr;

int winMax;

int lossMax;

int BestTime[10];

}stat;

структура, используемая для хранения статистики; поля данной структуры:

all – количество сыгранных игр;

win – количество побед;

winCurr – текущее количество выигранных подряд игр;

lossCurr – текущее количество проигранных подряд игр;

winMax – максимальное количество выигранных подряд игр;

lossMax – максимальное количество проигранных подряд игр;

BestTime – массив с лучшими результатами;

typedef struct{

Element *Head;

} LIST;

LIST *list;

Структура для двухсвязного списка, используемого для хранения состояний игрового поля после каждого, сделанного игроком хода.

typedef struct _Element{

struct _Element *Next,*Prev;

BYTE** Array1;

BYTE **Array2;

HWND **Array3;

BYTE fieldHeight;

BYTE fieldWidth;

BYTE bombCount;

BYTE countNotBomb; BYTE bombCountForFlag;

} Element;

Структура, используемая для хранения состояния игрового поля и количества непомеченных «мин».

Глобальные переменные:

HWND hWnd – дескриптор основного окна;

BYTE field[MAX_HEIGHT][MAX_WIDTH] – матрица, содержащая информацию о клетках-ячейках игрового поля (числа от 0 до 9);

BYTE fieldMark[MAX_HEIGHT][MAX_WIDTH] – матрица, содержащая информацию о состоянии ячеек игрового поля, т.е. числа 0, 1, 2 или 3 (не открыто, открыто, помечено флагом, помечено вопросом);

HWND butt[MAX_HEIGHT][MAX_WIDTH] – матрица дескрипторов кнопок, являющихся ячейками игрового поля;

HWND hGrBox – дескриптор объекта GroupBox;

bool flagEOG – флаг окончания игры;

BYTE fieldHeight, fieldWidth – высота и ширина игрового поля соответственно;

BYTE bombCount – количество «мин»;

BYTE countNotBomb – количество ячеек, свободных от «мин»

BYTE timeCount – количество секунд;

BYTE bombCountForFlag – количество «мин» не помеченных флагом;

stat easy, medium, hard – структуры, хранящие статистическую информацию для каждого из уровней сложности;

static int TimerFlag=0; - флаг таймера;

Прототипы функций:

LRESULT CALLBACK WndProcButt(HWND, UINT, WPARAM, LPARAM) – оконная процедура для кнопки;

LRESULT CALLBACK WndProcGB(HWND, UINT, WPARAM, LPARAM) – оконная процедура для GroupBox;

В файле functions.h находятся основной функционал программы.

Далее будут описаны прототипы функций, реализующие логическую часть игры:

void create_field() – создание игрового поля (предварительное матрицы field и fieldMark обнуляются, и производится расстановка «мин»);

void setField() – расстановка чисел идентификаторов количества «мин»; функция будет использована только после того как будут расстановлены «мины»;

bool fieldIsClose() – проверка на «открытость» поля. Данная функция используется при сохранении игры, т.е. она проверяет, была ли открыта хотя бы одна ячейка;

void SaveGame() – сохранение игры в файл «save.sap». Сохранение всех свойств и состояний игрового поля и запись их в файл;

void LoadGame() – загрузка игры из файла «save.sap»;

void NullStat() – обнуление статистики. Вызывается в том случае, обнуление статистики производится непосредственно самим пользователем или в том случае, когда файл со статистикой повреждён или отсутствует;

void SaveStat() – сохранение статистики в файл «stat.sap»;

void LoadStat() – загрузка статистики из файла «stat.sap»;

void StatWin() – запись в статистику при выигрыше;

void StatLoss() запись в статистику при проигрыше;

LIST * AddList(LIST *list,BYTE **,BYTE **,HWND **,BYTE,BYTE,BYTE,BYTE,BYTE)- функция добавления состояния поля, размеров поля и количества непомеченных «мин» в ячейку двухсвязного списка;

LIST * DelList(LIST *list)- функция удаления ранее записанного состояния игрового поля, в случае если превышен размер списка, счетчик больше 3;

LIST *Repak(LIST *list,BYTE ***Array1,BYTE ***Array2,HWND ***Array3,BYTE *fieldHeight,BYTE *fieldWidth,BYTE *bombCount,BYTE *countNotBomb,BYTE *bombCountForFlag)- функция извлекает последний, записанный в список ход, срабатывает после нажатия клавиши Backspace;