0, // Сдвиговый бит игнорируется

0, // Нет буфера накопления

0, 0, 0, 0, // Биты накопления игнорируются

32, // 32 битный Z-буфер (буфер глубины)

0, // Нет буфера трафарета

0, // Нет вспомогательных буферов

PFD_MAIN_PLANE, // Главный слой рисования

0, // Зарезервировано

0, 0, 0 // Маски слоя игнорируются

};

// Попытка получить контекст устройства

if(!(hDC = GetDC(hWnd)))

{

// Восстановить экран

KillGLWindow();

MessageBox(NULL, L"Can't Create A GL Device Context.", L"ERROR", MB_OK | MB_ICONEXCLAMATION);

// Ошибка получения контекста устройства

return false;

}

// Найден ли подходящий формат пикселя?

if(!(PixelFormat = ChoosePixelFormat(hDC, &pfd)))

{

// Восстановить экран

KillGLWindow();

MessageBox(NULL, L"Can't Find A Suitable PixelFormat.", L"ERROR", MB_OK | MB_ICONEXCLAMATION);

// Ошибка, формат для пикселя не найден

return false;

}

// Возможно ли установить Формат Пикселя?

if(!SetPixelFormat(hDC, PixelFormat, &pfd))

{

// Восстановить экран

KillGLWindow();

MessageBox(NULL, L"Can't Set The PixelFormat.", L"ERROR", MB_OK | MB_ICONEXCLAMATION);

// Ошибка задания формата пиксел

return false;

}

// Возможно ли установить Контекст Рендеринга?

if(!(hRC = wglCreateContext(hDC)))

{

// Восстановить экран

KillGLWindow();

MessageBox(NULL, L"Can't Create A GL Rendering Context.", L"ERROR", MB_OK | MB_ICONEXCLAMATION);

// Ошибка установки контекста рендеринга

return false;

}

// Попробовать активировать Контекст Рендеринга

if(!wglMakeCurrent(hDC, hRC))

{

// Восстановить экран

KillGLWindow();

MessageBox(NULL, L"Can't Activate The GL Rendering Context.", L"ERROR", MB_OK | MB_ICONEXCLAMATION);

// Ошибка активации конекства

return false;

}

// Показать окно

ShowWindow(hWnd, SW_SHOW);

// Слегка повысим приоритет

SetForegroundWindow(hWnd);

// Установить фокус клавиатуры на наше окно

SetFocus(hWnd);

// Инициализация библиотеки OpenGL для текущего окна

if(!InitGL())

{

// Восстановить экран

KillGLWindow();

MessageBox(NULL, L"Initialization Failed.", L"ERROR", MB_OK | MB_ICONEXCLAMATION );

return false;

}

// Завершение инициализации окна успешно

return true;

}

// Корректное разрушение окна

GLvoid View::KillGLWindow(GLvoid)

{

// Проверка существования контекста устройства

if(hRC)

{

// Попытка освободить RC и DC

if(!wglMakeCurrent(NULL, NULL))

MessageBox(NULL, L"Release Of DC And RC Failed.", L"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);

// Попытка удалить RC

if(!wglDeleteContext(hRC))

MessageBox(NULL, L"Release Rendering Context Failed.", L"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);

// Установить RC в NULL

hRC = NULL;

}

// Попытка уничтожить DC

if(hDC && !ReleaseDC(hWnd, hDC))

{

MessageBox(NULL, L"Release Device Context Failed.", L"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);

// Установить DC в NULL

hDC = NULL;

}

// Попытка уничтожить окно

if(hWnd && !DestroyWindow(hWnd))

{

MessageBox(NULL, L"Could Not Release hWnd.", L"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);

// Установить hWnd в NULL

hWnd = NULL;

}

// Возможно ли разрегистрировать класс

if(!UnregisterClass(L"Saper OpenGL Window Class", hInstance))

{

MessageBox(NULL, L"Could Not Unregister Class.", L"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);

// Установить hInstance в NULL

hInstance = NULL;

}

}

=============================Статистика=====================

#pragma once

#include "Statistic. h"

#include <windows. h>

// Конструктор

Statistic::Statistic()

{

// Общее количество выигранных игр

wins = 0;

// Общее количество проигрышей

looses = 0;

// Общее время затраченное на игры

TotalTime = 0;

// Время самой долгой победы

slowGame = 0;

// Время самой быстрой победы

quickGame = MAXLONG;

// Путь к файлу статистики

savePath = "Stat. dat";

}

// Деструктор

Statistic::~Statistic()

{

Clear();

}

// Добавить запись

void Statistic::AddRecord(StatRec &rec)

{

// Добавляем запись в список

records. push_back(new StatRec(rec));

// Обновляем данные статистики

Refresh();

}

// Очистить все записи

void Statistic::Clear()

{

for(size_t i = 0; i < records. size(); i++)

delete records. at(i);

}

// Сброс данных в файл

void Statistic::SaveStat()

{

// Открываем файл

ofstream outf(savePath, ios::trunc);

// Сохраняем все записи что есть на данный момент

for(size_t i = 0; i < records. size(); i++)

outf << records. at(i)->recDate << '#'

<< records. at(i)->Width << '#' << records. at(i)->Height << '#' << records. at(i)->BombCount << '#'

<< records. at(i)->gameTime << '#' << ((records. at(i)->WinGame) ? "win" : "loose") << '#' << endl;

// Закрываем файл

outf. close();

}

// Загрузка данных из файла

void Statistic::LoadStat()

{

// Открываем файл

ifstream inf(savePath);

if(!inf)

return;

// Временная строка - буфер

string buff = "";

char k;

StatRec temp;

// Читаем файл

while(!inf. eof())

{

k = inf. get();

// Если запись окончена

if(k == '\n')

{

// Разбираем данные в строке

Parse(&temp, buff);

// Очищаем буфер

buff. clear();

// Добавляем в вектор

records. push_back(new StatRec(temp));

}

buff += k;

}

// Обновляем данные статистики

Refresh();

// Закрываем файл

inf. close();

}

// Разбор строки параметров

void Statistic::Parse(StatRec *p, string buff)

{

string temp = "";

int count = 0;

for(size_t i = 0; i < buff. size(); i++)

{

// Обнаружен коней строки текущего параметра

if(buff. at(i) == '#')

{

switch(count)

{

// Добавляем первый параметр - дата игры

case 0:

strcpy(p->recDate, temp. c_str());

break;

// Ширина поля

case 1:

p->Width = atoi(temp. c_str());

break;

// Высота поля

case 2:

p->Height = atoi(temp. c_str());

break;

// Количество бомб

case 3:

p->BombCount = atoi(temp. c_str());

break;

// Время затраченное на игру

case 4:

p->gameTime = atoi(temp. c_str());

break;

// Исход игры: выиграл/проиграл

case 5:

p->WinGame = (strcmp(temp. c_str(), "win") == 0) ? true : false;

break;

default:

break;

}

// Очистка буферной строки

temp. clear();

// Переходим к следующему параметру

count++;

}

// Добавляем в буферную строку

else if(buff. at(i) != '\n')

temp += buff. at(i);

}

}

// Обновление глобальных данных о игре

void Statistic::Refresh()

{

for(size_t i = 0; i < records. size(); i++)

{

// Общее количество выигранных игр

if(records. at(i)->WinGame)

wins++;

// Общее количество проигрышей

else

looses++;

// Общее время затраченное на игры

TotalTime += records. at(i)->gameTime;

// Время самой долгой победы

if(records. at(i)->gameTime > slowGame && records. at(i)->WinGame)

slowGame = records. at(i)->gameTime;

// Время самой быстрой победы

if(records. at(i)->gameTime < quickGame && records. at(i)->WinGame)

quickGame = records. at(i)->gameTime;

}

}

// Собрать статистику в одну строку

string Statistic::ToString()

{

char buff[32];

string str = "\r\n\r\n";

itoa(wins, buff, 10);

str += "Количество выиграных игр:\t ";

str += buff; str += "\r\n";

itoa(looses, buff, 10);

str += "Количество проигранных игр:\t ";

str += buff; str += "\r\n";

itoa(TotalTime, buff, 10);

str += "Время затраченное на игры:\t ";

str += buff; str += "\r\n";

itoa(slowGame, buff, 10);

str += "Время самой длинной победы:\t ";

str += buff; str += "\r\n";

if(quickGame == MAXLONG)

itoa(0, buff, 10);

else

itoa(quickGame, buff, 10);

str += "Время самой быстрой победы:\t ";

str += buff; str += "\r\n";

return str;

}

// Получить список игровых записей

vector<StatRec*> Statistic::GetRecords()

{

return records;

}

===============================Игра========================

#pragma once

#include "Game. h"

// Идентификатор таймера

#define GAME_TIMER 1

// Конструктор

Game::Game()

{

// Загружаем данные статистики

stat. LoadStat();

model = NULL;

nTimerID = -1;

gameStart = false;

}

// Деструктор

Game::~Game()

{

delete model;

}

// Инициализация игры

void Game::InitGame(int FieldWidth, int FieldHeight)

{

// Создаем представление

model = new Model(FieldWidth, FieldHeight);

// Задаем параметры

view->ReSetModel(model);

}

// Старт игры

void Game::GameStart()

{

if(model == NULL) return;

gameStart = true;

TimerStart();

}

void Game::EndGame()

{

gameStart = false;

TimerStop();

view->ReleaseModel();

model = NULL;

}

// Запущенна ли игра

bool Game::IsStart()

{

return gameStart;

}

// Проверка состояния игры

GameState Game::GameProcess(int x, int y)

{

// Если нарвались на мину - игра окончена победил компьютер

if (model->GetCell(x, y).state == CellState::OPEN && model->GetCell(x, y).hasMine)

{

stat. AddRecord(StatRec(model->Width, model->Height, model->BombCount, model->timer, false));

// Возвращаем статус игры

return GameState::CompWin;

}

// Если количество флагов достигло количества бомб и все флаги раставлены только на бомбах а не на пустых клетках - игра окончена победил игрок

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6

Основные порталы (построено редакторами)

Домашний очаг

ДомДачаСадоводствоДетиАктивность ребенкаИгрыКрасотаЖенщины(Беременность)СемьяХобби
Здоровье: • АнатомияБолезниВредные привычкиДиагностикаНародная медицинаПервая помощьПитаниеФармацевтика
История: СССРИстория РоссииРоссийская Империя
Окружающий мир: Животный мирДомашние животныеНасекомыеРастенияПриродаКатаклизмыКосмосКлиматСтихийные бедствия

Справочная информация

ДокументыЗаконыИзвещенияУтверждения документовДоговораЗапросы предложенийТехнические заданияПланы развитияДокументоведениеАналитикаМероприятияКонкурсыИтогиАдминистрации городовПриказыКонтрактыВыполнение работПротоколы рассмотрения заявокАукционыПроектыПротоколыБюджетные организации
МуниципалитетыРайоныОбразованияПрограммы
Отчеты: • по упоминаниямДокументная базаЦенные бумаги
Положения: • Финансовые документы
Постановления: • Рубрикатор по темамФинансыгорода Российской Федерациирегионыпо точным датам
Регламенты
Термины: • Научная терминологияФинансоваяЭкономическая
Время: • Даты2015 год2016 год
Документы в финансовой сферев инвестиционнойФинансовые документы - программы

Техника

АвиацияАвтоВычислительная техникаОборудование(Электрооборудование)РадиоТехнологии(Аудио-видео)(Компьютеры)

Общество

БезопасностьГражданские права и свободыИскусство(Музыка)Культура(Этика)Мировые именаПолитика(Геополитика)(Идеологические конфликты)ВластьЗаговоры и переворотыГражданская позицияМиграцияРелигии и верования(Конфессии)ХристианствоМифологияРазвлеченияМасс МедиаСпорт (Боевые искусства)ТранспортТуризм
Войны и конфликты: АрмияВоенная техникаЗвания и награды

Образование и наука

Наука: Контрольные работыНаучно-технический прогрессПедагогикаРабочие программыФакультетыМетодические рекомендацииШколаПрофессиональное образованиеМотивация учащихся
Предметы: БиологияГеографияГеологияИсторияЛитератураЛитературные жанрыЛитературные героиМатематикаМедицинаМузыкаПравоЖилищное правоЗемельное правоУголовное правоКодексыПсихология (Логика) • Русский языкСоциологияФизикаФилологияФилософияХимияЮриспруденция

Мир

Регионы: АзияАмерикаАфрикаЕвропаПрибалтикаЕвропейская политикаОкеанияГорода мира
Россия: • МоскваКавказ
Регионы РоссииПрограммы регионовЭкономика

Бизнес и финансы

Бизнес: • БанкиБогатство и благосостояниеКоррупция(Преступность)МаркетингМенеджментИнвестицииЦенные бумаги: • УправлениеОткрытые акционерные обществаПроектыДокументыЦенные бумаги - контрольЦенные бумаги - оценкиОблигацииДолгиВалютаНедвижимость(Аренда)ПрофессииРаботаТорговляУслугиФинансыСтрахованиеБюджетФинансовые услугиКредитыКомпанииГосударственные предприятияЭкономикаМакроэкономикаМикроэкономикаНалогиАудит
Промышленность: • МеталлургияНефтьСельское хозяйствоЭнергетика
СтроительствоАрхитектураИнтерьерПолы и перекрытияПроцесс строительстваСтроительные материалыТеплоизоляцияЭкстерьерОрганизация и управление производством