ria pc game
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
24 марта 2019 18:46
Вход Регистрация Забыли пароль ?

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 8
Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 8 Онлайн-комикс Костя Коробкин - В гостях у тёти Светы - интерактивный комикс (kk as). - Ну вот мы и дома. Неплохой вид, правда ? - Супер ! Я и не знал что у Вас так красиво.
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - для чего нужна карта сайта

megainformatic - Web Администрирование

megainformatic - Мысли о разном

megainformatic - Легко ли быть программистом

megainformatic - Глубины программирования на C++

megainformatic - Убираем лимит на размер импортируемого файла в PhpMyAdmin

megainformatic - Как создать torrent файл

megainformatic - Нужна ли валидация вашему сайту ?

megainformatic - Антивирус DrWeb

megainformatic - Калькулятор рассчёта стоимости зубопротезирования для стоматологической клиники

megainformatic - Что такое BitTorrent (БитТоррент)

megainformatic - Миссис Даутфайр 1993 фильм torrent

megainformatic - Как скачивать торрент-раздачу ?

megainformatic - Автотелега фильтр

megainformatic - Фильмы

megainformatic - Fahrengeit Фаренгейт игра 2006 для PC

megainformatic - Fez игра для PC 2013

megainformatic - Дневник памяти - фильм 2004

megainformatic - Scooter - The night - Video and Lyrics - Скутер - Ночь - Видео и лирика

megainformatic - Если всё же неудача

megainformatic - Смерть или искупление или избавление

megainformatic - По ту сторону

cj megainformatic - музыкальный альбом БЕСКОНЕЧНОЕ ДВИЖЕНИЕ ОЖИДАНИЕ И ДЕЙСТВИЕ

megainformatic - Костя Коробкин - Секретный проект - интерактивный комикс

megainformatic - Основы анимации во флеш на примере анимирования простейшей окружности

megainformatic - Парсер сайтов Введение

megainformatic - Я пишу музыку для себя и для продажи

megainformatic - Статьи на околомузыкальные темы - осень 2014 часть 1

megainformatic - рассказ - Чужие воспоминания - автор Синицин Андрей - 24.09.2014

megainformatic - Сайты живущие вне поисковых систем. Есть ли такие и как их найти ?

megainformatic - Game craft - проект разработки игровых и мультимедийных проектов

megainformatic - Game craft - моделируем scv

megainformatic - Game craft - моделируем scv - шаг 1 (часть 2)

megainformatic - Game craft - моделируем scv - шаг 2 (часть 3)

megainformatic - Game craft - Наложение текстуры на модель робота scv (часть 4)

megainformatic - Game craft - Прорисовка текстуры робота SCV шаг 5

megainformatic - Game craft - Экспорт модели из 3ds max в формат X

megainformatic - Game craft - отображение scv модели в формате x в d3d9-приложении

megainformatic - Game craft - управление игрой от Direct Input в d3d9 - приложении

megainformatic - Game craft - игровая камера в d3d9 - приложении

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 1

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 2

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 3

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 4

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 5

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 6

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 7

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 1

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 2

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 3

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 4

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 5

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 6

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - онлайн комикс - страница 7

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 1

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 2

подробнее

     
  Веселый Буквоежка - игра  
     
 

Как создать игру ? - Программируем сами.

Рассмотрение программирования игр под DirectX 9c на C++ с использованием среды разработки MSVS 2005 или выше.

 
     
  [содержание] [назад] [страница 2] [далее]  
     
  Введение в 2d-игры - страница 2 - создание игровой оболочки как у игр от Nevosoft, Alawar и аналогичных  
     
 

Этот простой пример поможет Вам быстрее освоить программирование игр на C++.

Суть работы игровой оболочки сводится к следующему - если пользователь запустил исполнимый файл Вашей игры, то сначала появляется окно такого вида -

 
     
  игровая оболочка  
     
 

При закрытии окна нажатием кнопки X в правом верхнем углу приложение завершает работу, а игра так и не будет запущена.

Нажатие кнопок Играть, Купить, Еще игр приводит к каким-либо действиям -

Играть - запускается игра;

Купить - отображается веб-страничка покупки;

Еще игр - отображается веб-страничка других игровых проектов;

 
     
 

Для того, чтобы реализовать такую оболочку потребуется следующее:

1) изображение основного экрана оболочки и 3 изображения кнопок Играть, Купить, Еще игр;

2) файлы в формате html, представляющие страницы Купить и Еще игр;

3) потребуется написать код, реализующий описанные возможности:

- при выборе Играть должна запускаться игра - в нашем примере пока простейший пример DirectX-приложения;

- при выборе других пунктов должны открываться соответствующие веб-странички;

 
     
  Начнём !  
     
  Скачайте указанные ниже 4 изображения на свой компьютер, внутри папки созданного MFC-проекта создайте подпапку Media\shell_window и разместите данные изображения внутри созданной папки  
     
  базовая картинка оболочки  
     
  кнопка играть  
     
  кнопка купить  
     
  кнопка еще игр  
     
 

Теперь переходим к разработке собственно оболочки - в окне Solution Explorer нашего проекта выбираем вкладку Resource View и последовательно открываем узлы

Fle2 > Fle2.rc > Dialog > IDD_FLE2_DIALOG

Пункт IDD_FLE2_DIALOG щелкаем дважды

 
     
  открытие шаблона окна диалога нашего приложения  
     
  При этом в правой части будет открыт редактор Диалоговых окон и шаблон Диалога окна нашего приложения  
     
  редактор шаблонов диалоговых окон  
     
 

Нам нужно внести в шаблон окна следующие изменения:

Убрать кнопки OK и Cancel;

Удалить метку с текстом TODO: Place dialogs controls here

После этого сохранить изменения в шаблон диалога и закрыть его.

 
     
 

Теперь нужно будет написать программный код.

Откройте файлы Fle2Dlg.h и Fle2Dlg.cpp

если Ваш проект называется не Fle2, а как то иначе, то эти файлы также будут называться по-другому, но слово Dlg в них будет присутствовать.

Правда если Вы дали классам окна диалога другие имена, исключив слово Dlg, то тогда Вам нужно открыть заголовочный и cpp файлы, которые содержат описание класса окна диалога Вашего приложения - объект окна диалога производится от класса CDialog -

class CFleDlg : public CDialog

 
     
 

В модуль Fle2Dlg.h добавляем следующий код -

// CFle2Dlg dialog
class CFle2Dlg : public CDialog
{
// Construction
public:
CFle2Dlg(CWnd* pParent = NULL); // standard constructor
~CFle2Dlg(); //определяем деструктор объекта CFleDlg

// Dialog Data
enum { IDD = IDD_FLE_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support


// Implementation
protected:
HICON m_hIcon;

// Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()

private:
CImage* pBigImage; //определяем объекты, в которых будут храниться изображения
CImage* pPlayImage; //формирующие внешний вид игровой оболочки
CImage* pBuyImage;
CImage* pOthesImage;

RECT m_rcClientBounds; //размеры рабочей области окна будем хранить здесь
RECT m_rcPlayImage; //аналогично будем хранить размеры изображений
RECT m_rcBuyImage;
RECT m_rcOthesImage;

void InitShell(); //описываем метод инициализации оболочки

bool TargetBtnArea(CPoint* CursorPos, RECT* aBtnArea); //метод попадания указателя мыши в область границ одной из кнопок игровой оболочки

public:
bool bPlayBtnUp; //индикаторы отпускания левой кнопки мыши над данной кнопкой
bool bBuyBtnUp; //игровой оболочки - используются для срабатывания нажатий
bool bOthesBtnUp; //этих кнопок
private:
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);

};

 
     
  коричневым цветом выделен код, который Вы должны набрать сами, зеленым цветом я выделил поясняющие комментарии, их набирать не нужно.  
     
  в модуле Fle2Dlg.cpp пишем такой код - коричневым цветом снова выделен код, который Вы должны набрать сами, зеленым цветом я выделил поясняющие комментарии, их набирать не нужно.  
     
 

#include "stdafx.h"
#include "Fle.h"
#include "FleDlg.h"

#include "openwebpage.h" //подключаем модуль openwebpage.h и .cpp - эти модули выполняют открытие указанной веб-страницы и входят в комплект ПОЛНОГО ИСХОДНОГО КОДА игры ВЕСЕЛЫЙ БУКВОЕЖКА, который Вы можете приобрести всего за 200 рублей

о том, что еще входит в состав комплекта ПОЛНОГО ИСХОДНОГО кода Вы узнаете далее

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

 

#define bi_x 0 //определяем начальные координаты первого из 4х изображений
#define bi_y 0 //которые будут формировать внешний вид нашей игровой оболочки

//определяем имена файлов веб-страниц для кнопок <Еще игр> и <Купить>
#define OthesGamesUrl L"\\WebLinks\\index.htm"
#define BuyGameUrl L"\\WebLinks\\buy_fle.htm"

 


// CFle2Dlg dialog


CFle2Dlg::CFleDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFleDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

pBigImage = NULL; //обнуляем экземпляры объектов класса CImage
pPlayImage = NULL;
//которые мы описали в заголовочном файле
pBuyImage = NULL;
pOthesImage = NULL;

bPlayBtnUp = false; //выставляем индикатор отпускания левой кнопки мыши
bBuyBtnUp = false; //над данной кнопкой игровой оболочки в false
bOthesBtnUp = false;

}

CFle2Dlg::~CFleDlg()
{


delete pBigImage; //при удалении объекта CFleDlg из памяти нужно удалить и эти объекты
delete pPlayImage;
delete pBuyImage;
delete pOthesImage;


}

void CFle2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CFleDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
// ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()


// CFle2Dlg message handlers

BOOL CFle2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon


InitShell();
//выполняем инициализацию нашей игровой оболочки

return TRUE; // return TRUE unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CFle2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this); // device context for painting //выводим изображения на поверхности окна нашей игровой оболочки

 

pBigImage->Draw(dc, bi_x, bi_y);

pPlayImage->Draw(dc, m_rcPlayImage.left, m_rcPlayImage.top);

pBuyImage->Draw(dc, m_rcBuyImage.left, m_rcBuyImage.top);

pOthesImage->Draw(dc, m_rcOthesImage.left, m_rcOthesImage.top);

CDialog::OnPaint();

}
}

// The system calls this function to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CFleDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}

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

void CFle2Dlg::InitShell()
{

SetCurrentDirectory(AppRootDir);

pBigImage = new CImage();
pBigImage->Load(L"Media\\shell_window\\fle.jpg");

pPlayImage = new CImage();
pPlayImage->Load(L"Media\\shell_window\\fle_play.jpg");

pBuyImage = new CImage();
pBuyImage->Load(L"Media\\shell_window\\fle_buy.jpg");

pOthesImage = new CImage();
pOthesImage->Load(L"Media\\shell_window\\fle_other_games.jpg");

GetClientRect(&m_rcClientBounds); //получаем размеры рабочей области окна

int y = m_rcClientBounds.bottom - pPlayImage->GetHeight(); //координата y кнопки <Играть>
int x = 0;//координата x
m_rcPlayImage.left = x;
m_rcPlayImage.top = y;
m_rcPlayImage.right = x + pPlayImage->GetWidth();
m_rcPlayImage.bottom = y + pPlayImage->GetHeight();


x = x + pPlayImage->GetWidth(); //координата x для кнопки <Купить>
m_rcBuyImage.left = x;
m_rcBuyImage.top = y;
m_rcBuyImage.right = x + pBuyImage->GetWidth();
m_rcBuyImage.bottom = y + pBuyImage->GetHeight();

x = x + pPlayImage->GetWidth(); //координата x для кнопки <Еще игр>
m_rcOthesImage.left = x;
m_rcOthesImage.top = y;
m_rcOthesImage.right = x + pOthesImage->GetWidth();
m_rcOthesImage.bottom = y + pOthesImage->GetHeight();

}

//данный метод проверяет попадание указателя мыши в область указанной параметром aBtnArea кнопки


bool CFle2Dlg::TargetBtnArea(CPoint* CursorPos, RECT* aBtnArea)
{
if ( CursorPos->x >= aBtnArea->left &&
CursorPos->x <= aBtnArea->right &&
CursorPos->y >= aBtnArea->top &&
CursorPos->y <= aBtnArea->bottom )
return true;
else
return false;
}

//данный метод при нажатии и отпускании левой кнопки мыши проверяет попадание указателя в область одной из кнопок игровой оболочки и если это имело место - выполнение соответствующего действия - запуск игры или отображение веб-странички

void CFle2Dlg::OnLButtonUp(UINT nFlags, CPoint point)
{

CPoint pt = point;

bPlayBtnUp = TargetBtnArea(&pt, &m_rcPlayImage);
bBuyBtnUp = TargetBtnArea(&pt, &m_rcBuyImage);
bOthesBtnUp = TargetBtnArea(&pt, &m_rcOthesImage);

 

if ( bPlayBtnUp | bBuyBtnUp | bOthesBtnUp )
{
if ( bBuyBtnUp )
OpenSite(m_hWnd, BuyGameUrl);

if ( bOthesBtnUp )
OpenSite(m_hWnd, OthesGamesUrl);

if ( bPlayBtnUp )
{
EndDialog(IDOK);
StartD3DApp();
}
}

CDialog::OnLButtonUp(nFlags, point);
}

 


 
     
 

Несколько Важных нюансов:

1) Чтобы указанный код правильно работал нужно включить файлы openwebpage.h и openwebpage.cpp в состав Вашего проекта -

в окне Solution Explorer щелкаем правой кнопкой мыши пункт с названием проекта Fle2 и выбираем Add > New Filter

 
     
  включить файлы openwebpage.h и openwebpage.cpp в состав Вашего проекта  
     
 

Созданную группу именуем common, щелкаем по названию правой кнопкой мыши и выбираем Add > Existing Item, указываем на файлы openwebpage.h и openwebpage.cpp

Для этого удобнее в папке с проектом создать подпапку common и поместить оба эти файла туда.

 
     
  2) Будет не очень удобно, если exe файл Вашего проекта будет создаваться среди кучи других файлов. Рекомендую создать внутри папки проекта отдельную подпапку, а сам проект настроить таким образом, чтобы exe-файл попадал туда, т. е.  
     
 

В окне Solution Explorer выбираем пункт с названием нашего проекта - Fle2

выбираем пункты главного меню Project > Properties и в открывшемся окне настроек свойств выбранного проекта (не случайно я указал вначале выбрать Fle2 иначе откроются совсем другие свойства) выбираем пункт

Configuration Properties > General

а в окне справа в поле Output Directory указываем нужную нам подпапку для размещения exe-файла

 
     
  в окне справа в поле Output Directory указываем нужную нам подпапку для размещения exe-файла  
     
  На показанном рисунке настройка выполнена для конфигурации Debug, эту же настройку нужно сделать для конфигурации Release. И не забывайте сохранить изменения в проект - File > Save All либо используя аналогичную кнопку на панели инструментов.  
     
 

3) Откройте файл stdafx.h и добавьте в его конец строку кода -

#include <atlimage.h>

 
     
 

4) Откройте файл Fle2.h (если Ваш проект назывался не Fle2, а например, MyProj, то данный файл будет называться MyProj.h)

добавьте в его конец строки

__declspec(selectany) TCHAR AppRootDir[MAX_PATH] = L""; //рабочая папка приложения
__declspec(selectany) DWORD AppRootDirSize = MAX_PATH;

5) Откройте окно настроек проекта - нужно сначала выбрать в окне Solution Explorer пункт с названием проекта, а затем главное меню - Projects > Properties и

Configuration Properties > C++ > General

в поле Additional Include Directories

добавьте ссылку на папку common, размещенную внутри папки проекта -

common; Аналогичную настройку нужно выполнить для конфигурации Release.

 
     
  добавьте ссылку на папку common, размещенную внутри папки проекта  
     
 

6) При написании кода приведенного выше обратите внимание на имя класса, которое Вы используете

т. к. класс окна диалога в этом примере называется CFle2Dlg, то везде, где требуется указание этого имени - объявлении класса, в прототитах методов и т.д. нужно указывать его, если Вы назвали класс окна диалога по-другому - то Вам нужно везде слово CFle2Dlg заменить на имя класса, которое Вы используете в своем примере - в противном случае при компиляции (сборке) получите ошибки несоответствия.

 
     
 

7) Метод

void CFle2Dlg::OnLButtonUp(UINT nFlags, CPoint point)

нужно сформировать в форме обработчика события WM_LBUTTONUP для класса CFle2Dlg -

то что Вы написали ранее для этого метода нужно закомментировать, код еще нам пригодится!

Далее В окне Solution Explorer выбираем вкладку Class View, в списке классов находим CFle2Dlg, щелкаем правой кнопкой мыши и выбираем пункт Properties, с правого края откроется новое окно, в котором нужно нажать кнопку Messages, в списке найти событие WM_LBUTTONUP и сформировать для него обработчик выбрав пункт <Add> OnLButtonUp

 
     
  В окне Solution Explorer выбираем вкладку Class View, в списке классов находим CFle2Dlg, щелкаем правой кнопкой мыши и выбираем пункт Properties, с правого края откроется новое окно, в котором нужно нажать кнопку Messages, в списке найти событие WM_LBUTTONUP и сформировать для него обработчик выбрав пункт <Add> OnLButtonUp  
     
  Теперь осталось вставить в обработчик тот самый код, который мы закомментировали.  
     
  8) При компиляции возникнет ошибка из-за отсутствия реализации функции StartD3DApp(); - просто закомментируйте эту строку кода, т. к. мы реализуем эту функцию в дальнейшем - она будет запускать игру.  
     
 

9) Для правильного функционирования кнопок <Купить> и <Еще игр> внутри папки Fle, где создается exe-файл, нужно создать подпапку WebLinks и разместить в ней два файла -

index.htm

buy_fle.htm

 
     
 

Пробуем выполнить сборку - [F7], а exe-файл ищем теперь уже внутри созданной подпапки !!!

При запуске запускается созданная нами оболочка. При нажатии мышью кнопки <Играть> приложение просто завершает работу - мы пока не реализовали запуск игры - будем это делать в дальнейшем. При нажатии на кнопки <Купить> и <Еще игр> должны открываться соответствующие веб-странички из папки WebLinks.

Работа по созданию игровой оболочки завершена! В следующем нашем уроке Мы реализуем в первом приближении работу кнопки <Играть> - будет запускаться начальное простейшее DirectX-приложение. В последующих уроках будем постепенно наращивать возможности создаваемой игры.

 
     
     
     
  Если у Вас еще остались неразрешенные вопросы - обращайтесь на наш Форум, либо на e-mail автора.  
     
     
     
     
  [содержание] [назад] [страница 2] [далее]  
     
подробнее

     
 

Музыкальное чудо - Fruity Loops Studio

Уроки Fruity Loops Studio

 
     
 

В данной серии уроков Вы узнаете как писать свою профессиональную музыку в музыкальной студии Fruity Loops Studio умещающейся на вашем ПК.

Да ! Действительно. Вам нужен только компьютер, программа Fruity Loops Studio и всё :)

Вы становитесь владельцем собственной музыкальной звукозаписывающей студии.

Программу Fruity Loops Studio написал Дидье Дамбрин (aka gol). Он работал над ней непокладая рук более 10 лет !!!

Сейчас широко распространены версии 8, 9 и 10. Среди пользователей программу называют ласково-уважительно как Фрутик :)

 
     
  СОДЕРЖАНИЕ

1) Урок 1 Быстрый старт - краткий обзорный урок, описывающий как пишется музыка с нуля в FL Studio 8, 9, 10 или еще выше :). Показаны Основные элементы рабочей среды FL Studio.

2) Пишем свой трек - Морозное утро (на примере этого трека Вы научитесь созданию собственной музыки с нуля)

3) Готовые композиции - Морозное утро и другие.

4) Урок 2 пишем свою композицию COLD - рассматривается как

- переключаться между режимами SONG и PAT;
- манипулировать нотами и блоками нот в PIANO ROLL;
- выставлять шаг нот;
- как включать play list;

5) Урок 3 экспериментируем с композицией COLD

6) Урок 4 пишем первый вариант композиции COLD

 
     
     
  fl studio - kick  
     
     
     
  Приятной работы ! :))))  
     
     
     
     
     
     
     
     
подробнее

ria pc game

литературная основа.


Все что вы прочитаете далее - посвящено развитию сюжета
игры ria pc game.


Вы наверное понимаете, что он не окончательный и не завершенный.
И в игре наверняка он будет немного другим или совершенно другим.

Но пока эта история в моем понимании, выглядит именно так.
Поэтому, если вам это будет интересным.

Можете ознакомиться.

Спасибо за внимание и вашу поддержку.


Итак, начинаю.



Пролог


Я никогда не думал, что все так просто и одновременно все так сложно.
Вопросы которые кажутся нерешаемыми имеют ответ и находятся совсем рядом с нами как тонкая пленка.
Достаточно протянуть руку.

Упрямство и зазнайство это беды - которые мешают в любом хорошем начинании. Все хорошо в меру.
Однако уяснить это самому себе бывает нелегко.

Когда дело идет уже не можешь остановиться. Но делать передышки тоже надо и их надо уметь делать.

Не все целесообразно и спланировано. Спонтанность и нецелесообразность - неотъемлемые атрибуты
всего и вся. Нельзя все заранее спланировать и упорядочить все вокруг. Но нам увы, хочется.

И последнее - нельзя объять необъятное. Хотя порой хочется больше всего. Да кто я такой ?
И хоть душа великого живет в каждом, нужно уметь остановить зазнайство. Вообщем-то не так
ты и велик.

И для кого-то вообще совершенно не сказал ничего существенного. Увы.



1 глава


Приезд


Мне было тяжело на новом месте. Трудно. Мерзопакостно. Уныло. Одиноко.
Но я это проходил. Я помню. Хотя казалось, что нет.

И ты пройдешь. И уже прошла. Все у всех бывает по-своему. У тебя это было
иначе, чем у других. Но и ты не уникальна. Не венец всего.

Просто ты немного особенная. Да. Именно поэтому я и обратил на тебя внимание.
Наверное.


Я по природе человек замкнутый. Малообщительный. Но если уж начну говорить,
то не могу остановиться. Наверное это свойство такого типа людей.

Сначала держать все в себе, а потом ...

Ну а ты ?

Ты тоже не идеал. Хотя мне казалось иначе. Мы сами создаем идеалы. Да.
А потом поклоняемся им.

Ладно. Пожалуй пора начинать.



Итак, ты приехала в чужой город. Он был когда-то твоим. Но стал чужим.
И теперь нужно привыкать заново.

Тебя зовут Риа (или Рия). Ты собираешься поступать (продолжить учебу)
на факультете Робототехники в местном ВУЗе.

Тебе предстоит встретиться с трудностями каких не бывало доселе.

Да что все я в будущем. Они уже начались. Эти трудности. Но ты их уже
преодолеваешь.

Незнакомая обстановка. Чужие люди. Эти взгляды. Вообще все.

Чувствуешь себя пришельцем, который высадился не мало ни много - на луну.

А вокруг только неизвестность !

Даже воздух - он пропитан опасностью. Может быть даже опасен для использования.

Но выбора нет.

И вот она эта самая привокзальная кафешка - с которой все началось.

Как она там называлась ? Да неважно.

Ты заказала здесь свою первую чашку чая. На новом месте.

И наверное помнишь о ней во всех подробностях не меньше, как то, когда
тебя принимали в пионеры или что-то еще похлеще.

Все это тебя озадачивает, ошарашивает и топит. И Ты впадаешь в уныние.

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

Но увы. Дьявол или бог. Какая уже разница. Главное это страх. Неизвестность.
И ты уже сама не своя. Ты просто теряешь голову.

От всего этого. И готова броситься в любой омут.

Нет никакого плана. Нет быстрого решения. И это не игра.

У тебя есть телефон. Но что из этого.

Она не отвечает !

А ведь она твоя тетя и она обещала.

Остается только запастись терпением. Просто адским терпением (или ангельским ?)

И ждать.

Кстати, знаешь в чем разница между адом и раем ?

Они одинаковы. Смешно правда.

Что может быть также похоже друг на друга как черное и белое ?

Но они похожи. Яркий свет или непроглядная тьма - они оба для нас непонятны.
Даже губительны.

Мы где-то посередине. Всегда. Ну или. Стремимся быть.

Иначе - смерть.

Ну или может быть просто что-то непонятное. Но ничего хорошего.


И тот странный молодой человек, который к тебе подошел. И начал что-то смущенно
доказывать и объяснять.

Но ты его не поняла. Ты его просто не слушала. Не слышала. Отвечала как робот.

И вот наконец пришла тетя Кейси.

Наконец-то она забрала тебя из этих адовых мук.

Вы едете вперед, навстречу неизвестности.

Но с ней рядом тебе уже ничего не страшно. Ведь правда ?




2 глава - дом тети Кейси


В телефоне я обнаружила у себя какое-то новое приложение. Блокнот.

Я начала что-то писать в нем и сразу же начали происходить какие-то странные
вещи.

Но об этом чуть позже.

Сейчас такая суматоха, что просто нет времени обдумывать и объяснять.

Я готовлюсь к экзамену. Да да. Надо досдавать академическую разницу.

Ведь я перевелась из другого ВУЗа. Я ведь не поступаю вновь, а лишь перевожусь.

Так прибавь к этому еще все что происходит вокруг: привыкание к новому месту,
отсутствие четкого плана, волнение. Вообщем я чувствую себя как на необитаемом острове.

Да да.

Вокруг вода. Бездна. Именно БЕЗ ДНА.

Я упаду туда и невынырну уже никогда.

Потому и боюсь.

Но даже бояться уже нет времени. Поэтому я просто читаю и отгоняю себя
от мысли что просто гляжу в книгу и думаю о чем-то совершенно другом.


А здесь красиво. Уютно. Легко. Но не мне конечно и не сейчас. В теперешнем
состоянии, но я надеюсь все это пройдет. И я забуду все как страшный сон.

Сейчас трудные времена. Но они пройдут.

Все наладится.

А какой здесь бассейн ! Ты бы видел. Ой.

Ну вообщем не могу больше отвлекаться.


И забегая немного вперед, потом, немного позже Ты узнаешь, что и у тети
Кейси, это великой и могущественной моей личной опоры. Тоже в жизни были
свои перемены. Что она что-то меняла. Добивалась чего-то.

Хотя со стороны могло показаться: да чего ж ей нужно то ? У ней же все
есть.

Она тоже налаживала жизнь. И мою в том числе. Только я пока не знала об
этом. Просто мне было некогда. Да и незачем.

Я просто шла вперед.

Тетя Кейси - это вообще отдельная история. Заслуживает целого романа
или многотомника. Не меньше.

Кто она ? Для меня до сих пор загадка.

Как она умеет делать все так, что, ну вообщем Ты понимаешь. Да да.
Я немного завидую ей. Она такая ! Ну просто блеск и ВАУ !

Другими словами просто не описать.

Но вот что странно - это все только видимость. На самом деле и ей
бывает нелегко. И трудностей и проблем у ней хватает дай боже.

Просто она не подает виду. И все это как-то пропускает через себя.

Она волшебница !

Я хочу быть похожей на неё. Хотя.

Вряд ли смогу. Да и я понимаю, я другая, в чем-то мы родственные души,
но я не тетя Кейси.

Но я люблю её.

Да. Нелюбить её невозможно. Она идеал. Пример для подражания. И много чего 
еще.

Занавес.

Аплодисменты.

Одним словом прекрасная пьеса под названием Моя тетя Кейси.





3 глава Университет

Мне предстоит учиться в этом огромном заведении. Учебном. Несколько учебных корпусов
разнесенных на значительной территории.

Правда мне в основном надо будет бывать в 2-3. Иногда еще в 1 или 2.

Всего их более 10. А именно - 12.

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

А еще несколько, да какой там несколько ! Вообщем еще много других прилегающих
территорий и удаленных офисов.


Робототехника.

С этого начинается все и этим все заканчивается.

Нанотехнологии.

Информатика.

Я просто впадаю в транс, когда понимаю чем мне предстоит заниматься.

Мои профессора - не меньше чем черные маги. Они выглядят серьезно и ... недоступно.

И лекции лекции лекции. Бесконечные лекции.

Потом лабораторные. Практики. Зачеты экзамены.

Учусь как робот, которого предстоит научиться делать.

Робототехника.

Как же человечество продвинулось вперед.

То что было раньше и что я знала раньше - это все лишь малая толика, почти ничего.

То что мы изучали в школе. На уроках и факультативах. Это кажется просто смешным.

А здесь.

Здесь ты окунешься в такой водоворот, от которого просто дух захватывает. Да да. Не удивляйся !

Захватывает дух. Именно так.

Ой как нелегко, но сил мне придает именно то, чем я занимаюсь и даже больше.

Когда я думаю кем я стану - я просто как бы переношусь уже мысленно в будущее.

Ну вообщем ты понимаешь. Мечты мечты.

Да. 

Забыла тебе рассказать.

Вообщем я конечно зря боялась. Все прошло на ура.

Я сдала эти все зачеты и экзамены. Было нелегко. Но все получилось.
И это прекрасно. Я верила, что так и будет, хотя конечно боялась
и очень, очень переживала.

Но все нормально теперь.


Вообщем потом было с каждым днем все легче и легче, а сейчас я и вправду
вспоминаю все это как дурной сон.

Даже не верится. Потянулись дни. Обычная рутина. Они стали один на другой
похожи и проходят не успеешь как оглянуться. Вот понедельник, а вот уже
пятница.

Про выходные я вообще что-либо сказать затрудняюсь. Побежали сюда.
Поехали туда.

Ну тетю Кейси ты знаешь.

Она мне отдыха не дает. В прямом смысле слова. И когда я уже засыпаю буквально
над книгой где-нибудь, она тогда только успокаивается. Да.

Смеется.

Ладно. Утомила я тебя своими этими рассуждениями и рассказами.

Вообщем все идет нормально. Как и должно идти. Все налаживается.

Целую тебя крепко крепко и обнимаю. Надеюсь и ты тоже !

Я понемногу стала привыкать к новому ритму жизни.

То как я жила раньше, и то как живу сейчас - огромная разница.

Обычный человек вряд ли это выдержит. Но я это ни на что не променяю.

Виной тому наверное, я сама, ну и тетя Кейси конечно тоже.

Видел бы ты её !

Ну да впрочем, вряд ли со стороны это так очевидно.

В ней горит огонь. Внутренний. Причем постоянно.

Хотелось бы посмотреть как она этого всего добилась.

Вот например, какой она была в детстве. Так же плакала иногда,
как и я, от нескончаемых трудностей, но потом все равно все
преодолевала.

Скажу тебе - она просто супер.

Рядом с ней любой становится каким-то другим. Ну а уж я - я тем
более.

Да конечно, она не обладает какой-то уж прям сногсшибательной внешностью,
ведь она не какая-нибудь топ модель.

Но и обычной её тоже не назовешь. Она выделяется всегда и везде.
При любом окружении.

Вот это меня больше всего и поражает !

Как ?

Это тетя Кейси. Больше тут добавить нечего.

Моя тетя Кейси.



4 глава Новый друг

Старый друг лучше новых двух.

Но новому тоже надо давать шанс. Оставаясь постоянно при старом
мы обрекаем себя на конверватизм, однообразие и так далее.

Тем более если старые друзья где-то далеко. 

Где лучше всего искать новых и верных друзей ?

Ну искать их не придется. Ты будешь встречать их каждый день.
Там где ты чаще всего и бываешь - а именно на учебе.

И кто-то из этой общей массы возможно выделится больше остальных.

И у вас завяжутся дружеские отношения. Но конечно не сразу.

Поначалу я была довольно холодна. Сурова и привередлива.
Я была сосредоточена целиком и полностью только на наиболее
важных для меня делах.

Все остальное полагалось как само собой разумеющееся.

Так появился и он.

Каган.

Он учился на параллельном курсе. Но случалось так,
что наши занятия проходили вместе.

Что тебе еще сказать ?

С виду он был самым обычным парнем. Носил кстати очки.
Учился хорошо. Даже более чем.

У него были большие перспективы. Словом он подавал большие
надежды.

Не был выскочкой. Что многие не любят. Но не был и лидером.

Что-то среднее. Но вполне ответственный, успешный и главное -
самодостаточный.


Я не сразу обратила на него внимание как ни странно.

Он ни чем таким не выделялся.

Просто случилось так, что нам обоим поручили работать вместе.

Поэтому волей неволей, нам пришлось соприкасаться.

Мы стали общаться больше и однажды, я пригласила его к себе.

Нет, не домой конечно, здесь в общежитии, у подруги.

Подруги как ты понимаешь у меня были. С этим все проще.

А вот что касается парней. Да конечно, они табунами за
мной ходили, когда-то. Но не теперь. Теперь я была более
чем недоступна.

Да и табуны тоже очень поредели. Хотя, если честно, никто
был не прочь и они всегда были готовы.

Но это все-таки университет.

Одним словом - Каган.

Я сосредоточилась на нем одном и совсем забыла про того странного
парня, Грега.

И вот однажды я получила письмо.



Глава 5 Странное письмо

Сейчас принятно отправлять письма по электронной почте.
А чаще просто смс. Но тут я получаю по почте увесистый пакет,
почти бандероль.

Я была в шоке, мягко говоря.

Открываю.

Там кассета. Да да. Обычная аудио кассета. Это в наше то время !
Не какая-нибудь флешка или что-то еще, а кассета. Прислал бы
хоть диск - cd или dvd но нет. Кассета.

И сразу вопрос возник - где её прослушать.

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

Она его кажется брала куда-то. Ах да ! На занятия по шейпингу.
Я кстати тоже одно время этим занималась.

Но потом увы забросила.

Чаще мы с тетей Кейси играли в теннис по выходным.

Она ведь нашла мне специально даже тренера !

Но об этом после. Как-нибудь расскажу. Так вот.

Приехала я домой. (Домой к тете Кейси где я и живу большую часть
свободного времени, если мы с ней не где-нибудь в разъездах) взяла
этот самый бум бокс и вставила туда кассету.

И вот что я там услышала: что Грег можно сказать признался мне
в любви и еще сообщил нечто важное и странное. Не совсем конечно
поняла что он там имел в виду, но он назначил мне встречу.

И я конечно не знала что делать.

Во-первых, у меня как всегда не было времени. Но он меня сам
нашел.

Приехал прямо в универ.

Встретил в корридоре после лекций и я обомлела.

Ты знаешь меня очень хорошо. Ну или. Я думаю, что знаешь.

А удивил он меня потому, что во всем его облике, во взгляде,
движениях, жестах, читалось только одно: он ко мне неравнодушен.

Явно.

Я это сразу поняла и не знала что делать. Не знаю и теперь.

Грег.

Да он вообще хороший парень. Но не то чтобы странный. Он другой.

Каган мне конечно больше по душе. И ближе по духу.

Но Грега тоже нельзя сбрасывать со счетов.

Так что решай сам кто из них новый друг - Грег или Каган.
Или оба.

Вот такие дела.

Твоя, Риа.



6 глава Сказка.


А сказка началась когда я была совсем еще маленькой.

Да я уже про это точно и не помню. Кажется под новый год это было.
Или в канун нового года. Ну то есть когда он уже завершался.

Я правильно выразилась ? Ну вроде бы да.

Так вот.

Папа мне подарил ключи от машины.

Нет. Не от обычного автомобиля.

Это был беспилотник.

Робот.

Но без ключа он не активизировался.

Зная мои увлечения ты не представляешь какой ! !!! Это был
для меня тогда подарок. А мне, кажется, было лет 10 или 11.
Что-то вроде этого.

Беспилотник. По тем временам неслыханное дело. Да еще портативный.

Он сказал что распространяться об этом особо нежелательно и это вообще-то опытный
образец. Дрон.

Но он конечно приукрасил немного. Это был настоящий робот.

Живой и автономный.

А еще его можно было обучать. А не программировать.

И он обучался очень активно.

Он наверное и сейчас, спустя много лет, еще в рабочем состоянии,
и что-то там помогает маме по хозяйству, но тогда !

Тогда это было просто как ... ммм ... как сон наяву. Да да.

Именно так можно назвать. СОН НАЯВУ.

Ведь еще нигде об этом не знали. Не слышали и не видели. Разве
что в фантастических фильмах.

А тут ! 

Это была просто сказка.

Я могла делать с ним все что угодно и он был мне предан и послушен.

При помощи него я много чего узнала тогда. Он мог летать. Вести
наблюдение.

Одним словом был бесценной и немыслимой по тем временам штуковиной.

Но он был !

Я узнала некоторые тайны и секреты, о которых не знал никто. И могла
это использовать по своему усмотрению.

Мне это даже чем-то помогло в школьных делах.

Я, ты ведь знаешь, когда-то была совсем обычной девочкой. Ничем таким
не выделялась. И только немного позднее, уже ближе к старшим классам.

Ну там ты уже все знаешь и сам.

Кстати знаешь как его звали ?

Карлсон !

Ха ха.

Читал такую книжку ? И еще такой старинный престаринный мультик есть.


Про карлсона. Сорванца и выдумщика.

Вообщем карлсоном он и был. Почти.

Одним словом - сказка.

Детство.

Куда уходит детство ?
В какие города ?
И где найти нам средство,
чтобы попасть сюда ?

...




7 глава

А я уже теперь совсем другая. Ты меня не узнаешь.

Крупная корпорация. Крупные заказы. Тетя Кейси совладелица.
Наш лайнер несется вперед - к новым далям и горизонтам !

Наверное успех и эта звездная болезнь должны были испортить меня.
Спустя много лет.

Но к счастью я это как-то пережила. Да.

Теперь ты знаешь о моих успехах.

Но ничего не знаешь о провалах.

А хотел бы узнать ?

Ну тогда я так уж и быть. Расскажу.

А главным моим провалом было то, что я вышла замуж за Грега.
Да.

Спрашивается зачем ? Пошла на поводу у своих амбиций. Поверила ему.

Нет. Что ты. Мы не развелись. Живем душа в душу. У нас уже
двое детей.

Слава богу все хорошо.

Но это был провал.

Провалы ведь тоже нужны к сожалению.

Или к счастью ?

На мое счастье их не бывало слишком уж много, и этот был одним из таких,
который оказал на меня самое лучшее воздействие в самом лучшем смысле
этого слова.

!!!

Мимимишки.

Знаешь как они подпрыгивают и дрыгают ногами ?

Вот и я также. Мне бывает порой очень нелегко. Но я вот так же как и они
подпрыгиваю и дрыгаю ногами в воздухе и бегу вперед, к новой цели !

Кто может разжечь во мне такой огонь ?

Не знаю.

Виной тому наверное или я сама или тетя Кейси или обе мы вместе,
особенно когда мы рядом.

Ну или. Может быть еще что-то.

Но все именно так. Так и не иначе.

И сейчас ты читаешь эти строки.

И думаешь наверное.

Какая странная все же я !

Да. Но это не финал и не точка.

И это не единственный правильный и окончательный мой взгляд на реальность.

Все еще движется, но уже в других потоках и в других реальностях.


8 глава Магия 8

Магия 8 - это все что связано с программированием.
А еще наверное магия 2, т. е. 8 это 2 * 2 * 2.

И можно заметить то, чего никогда не замечал.

Например, что символ 8 - это все равно, что знак бесконечности -
если положить его на бок.

Взгляд на себя. Взгляд в сторону.

Поиск того, чего нам не хватает.


Как ты появился в моей жизни ?

Однажды Ты мне позвонил. И с этого все началось.

Это было так давно, что я уже и не помню.

Иногда телефон снова звонит. Но я уже не испытываю
того состояния, что было тогда.

Конечно с тех пор прошло много лет. Все изменилось.

Но память осталась. Иногда я также вздрагиваю при
звонке телефона. И спрашиваю себя: почему ?


Как же все случилось ?

У меня тогда были очень сложные экзамены. Вступительные.

Один я даже провалила.

И вот тогда (почему-то) я для себя выбрала магическую цифру восемь.

С тех пор я часто вижу её. Как впрочем и все другие возможные
числа и цифры.

Но 8 это что-то особенное.

Рядом с ним и со мной начинают происходить немного странные вещи.
Или мне просто так кажется ?

Может быть.

А может быть и нет.

Начну с того, что все роботоподобные системы так или иначе 
связаны с использованием числа 8.

Например объемы памяти кратны числу 8.

Неудобно делать их кратными 10 или другим числам. Потому что основа
всех систем - двоичная. А 8 - это ближайшая группа для объединения
нескольких двоичных - или попросту 1 байт информации.

Байты это те самые 8 бит и они так или иначе присутствуют везде, а
не только внутри информационных систем.

Поэтому что бы мы не делали, мы всегда соприкасаемся с этим магическим
числом.




глава 9 Это нереально !

Да. Так часто мы говорим, когда видим перед собой что-то большое. Даже огромное.
Что сделано руками людей и кажется, что сделать такое не просто невозможно,
а НЕРЕАЛЬНО !

Но оно есть и кем-то сделано.

Диву даешься: как ?



Риа посмотрела на себя в зеркало.

Видимо не все сделано руками людей, кое-что сделано и не руками
или совсем не людьми.


Зеркало в зеркале. Подумала она. Или сказала. Мысленно.






глава 10 знак


Можно увидеть какое-то предзнаменование. Знак. Символ.

А может быть это просто случайность и все это нам лишь кажется.


Вы знаете, что все что нас сильно волнует, за что мы боремся
и даже готовы отдать жизнь - со стороны выглядит: никак.

То есть попросту посторонний человек совершенно не так оценивает
то, что он видит перед собой и знает о нас.

Для него мы загадка. 

Поэтому знак - это лишь наша вера. Помимо неё нет ничего.

Хотя совпадения явно неслучаны. Но опять же лично для нас.
Для посторонних - это ничего более как просто совпадения.

Поэтому чужим людям или тем кто не в курсе сложно доказать
что-либо. Они это все видят совершенно по-другому. И не так
как видим мы сами.

И с этим ничего не поделать.

Задача успеха, вероятно, заключается в том, чтобы угадать
и предугадать чужое мнение.



И еще я понял некоторые вещи: неважно хорошо ли ты учился или нет
в школе - свой дальнейший путь ты выбираешь сам.

И самое главное - никогда нельзя иметь окончательное мнение и ставить
точку.

Когда ставишь точку и подводишь черту - Ты заведомо ставишь себя
на неправильный путь.

Настоящий путь - это движение, изменчивость, постоянная адаптация.

Важен процесс, а не конечный результат, потому что движение к результату
происходит намного дольше.

Хотя даже и все это тоже и также не являются чем-то правильным, правдивым
и окончательным.


У каждого в жизни есть свои трудности и легкости.

Есть вопросы и ответы.

Есть дорога и повороты. И предстоит выбирать нам самим. И главное - мы
не знаем что будет дальше.

И если Вы думаете, что есть везунчики или те кто добр или правилен - им
всегда везет больше - отнюдь не так.

Это всего лишь совпадения.


Итак, Ты думаешь, что люди, живущие в какой-то другой, чужой тебе стране,
в чужом городе - какие-то другие.

Ты ошибаешься.

Они другие, но не совсем. Все люди везде и всегда в чем-то похожи между собой.

Ты думаешь, что не знаешь ничего о своем будущем.

Ты ошибаешься.

Знаешь, но не все. Всего знать нельзя. Но что-то знать важно и нужно.
Главное не бойся спрашивать самого себя. Саму себя, Риа.

Ты слышишь ?



Ты думаешь, что это непреодолимо. Преодолимо !

Ты снова ошибаешься.

Поверь.

И сделай еще один шаг.

Так начинается мой путь в большом городе.



Глава 11 Большой город


Зазвенел будильник и она проснулась. 

Еще лежа в кровати, не открывая глаз, потянулась и мысленно улыбнулась.


Начинался новый день.


В чем ошибка отличника или того, кто успешен ?

Он думает он успешен и все придет как бы само собой.

Нет. Нужно также прилагать усилия.



В чем ошибка двоечника или того, кто неуспешен ?

Он думает, что у отличников и успешных все получается
благодаря их везению.

Нет. Нужно прилагать усилия.


В чем отличие между успехом и неудачей ?

Успех предполагает вложение усилий с получением успешного результата.
Неудача предполагает вложение усилий с получением провального результата.

Но в чем разница между успехом и провалом ? Где эта тонкая грань ?

Ведь в глазах большинства людей она совершенна разная.

Кто-то меряет успех популярностью. Кто-то количеством полученной прибыли.

Но это все обманчивые меры.

Успех или неудача живет лишь в вере тех, кто их оценивает.

По настоящему он совершенно неочевиден и совсем неоднозначен.

То что сегодня успех - завтра может обернуться провалом.

Неудача сегодня - может привести к взлету завтра.

Это непредопределено.

Но это возможно.



Риа. Именно сегодня в твоей жизни все начнет меняться.

В лучшую сторону. Трудности постепенно будут отступать. Точнее
ты сможешь их преодолевать.

Станет легче.

Именно это она говорила сама себе, допивая свой утренний чай.

Тетя Кейси уже уехала по делам. Она вставала еще раньше, чем Риа.

И оставляла её одну.

В доме конечно еще оставались люди, но с ними Риа уже не могла
общаться так открыто как с Кейси.

Кейси была совершенно другим человеком.

Женщиной большого города, а в прошлом и девушкой.

Вот интересно, размышляла Риа, а когда она была совсем юной, 
как Я, ей тоже приходилось испытывать именно такие же сложности
и трудности, как и мне сейчас ?

* * *

- Да конечно ! - прервала тетя раздумья Риа, - Я знаю о чем ты сейчас думаешь:
что мне было легче, а тебе конечно труднее. Но все не так. Нужно преодолеть себя.
Понимаешь. Отбросить все эти рамки, что стесняют тебя. Ты многого еще не понимаешь.
Не представляешь даже всей сложности !

- О да. Не представляю.

- Да что там говорить. Я была совсем как Ты. Теперяшняя ты. И никто не открывал
передо мной двери. И опереться было совершенно не на кого. Да.
Но я справлялась. Я понимала, что все это не только благодаря моей репутации. 
Хотя и её создать нелегко. Все это лишь благодаря мне самой. Я всегда делаю
то, что считаю нужным, невзирая ни на что.

- И кто-то считает тебя отменной стервой.

- И пусть. Что с того ? Хотя я стараюсь не делать таких поступков, чтобы
оправдывать такой статус. Но пойми милая, все это лишь в чужих головах.
На самом деле все знают, что я совершенно не такая. Определенная жесткость -
это необходимость. Иначе ничего не достигнешь.

- Пусть с виду ты совсем мягкая.

- Да. Но не внутри. Мы остаемся неизменны напротяжении всей нашей жизни.
Свои поступки мы совершаем преследуя какую-то цель. Ну да ладно. Не время
сейчас. Давай-ка приступим к делу. Итак, что у нас есть ?

- У нас есть партия новых роботов и их нужно продать.

- Правильно.

- Я видела их и они прекрасны ! В то же время технические их характеристики оставляют желать лучшего !

Падди:
- Нельзя так говорить !

Риа: 
- Почему ?

Кейси:
- Потому что нет такой продукции, которая бы напрочь была бы лишена недостатков. И это не
потому что нам надо продать их любой ценой. Хотя и правда надо. 

Падди:
- Давайте посмотрим на это с другой стороны: роботы вам нравятся, это уже хорошо. А чем именно ?
Чисто внешне, или ... ?

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

Падди:
- Заметьте, что они не полностью автономны.

Кейси:
- А в чем же их недостаток ?

Риа:
- В программном обеспечении. Оно нуждается в доработке.

Падди:
- Конечно. Насколько я понял - главный недостаток - это именно время на адаптацию.

Риа:
- Правильно.

Кейси:
- Почти. 

Риа: 
- А что еще ?

Падди:
- Да.

Кейси:
- Эта партия роботов самая первая, которая приходит к нам с такой калибровкой. Начальные настройки
требуют тщательной работы технических специалистов нашего отдела. Малейшие сбой или недопонимание
в важности работы ... Ну вы понимаете.

Падди:
- Как всегда, слабое звено всегда с лихвой перекрывает все остальное. Я согласен с вами.


Риа:
- Я об этом как-то не подумала.

Кейси:
- Ну что ж, с кем не бывает. Для этого мы собственно и проводим совещание. Причем внеплановое.
Ну да ладно. Что еще у нас на повестке дня ?

* * *

И вот когда ты уже все вроде бы закончил. Возникает вопрос: А все ли ты сделал правильно ?

И этот страх - самый пугающий. Страх неизвестности.

Но со мной всегда была Пегги. Я могла доверять ей свои самые сокровенные тайны.

А теперь её нет. И мне приходится туго.

- А кто такая эта Пегги ?




12 глава Мечты

Мы мечаем стать большими. БОЛЬШИМИ И СИЛЬНЫМИ.

Мечты это то, что всегда двигало мной. Явно и неявно.

У кого-то они розовые. У меня - вполне обыденные.

Я просто хочу добиться успехов в своей работе. Я понимаю, что это не так просто.

Ведь все что нам видится, на самом деле всегда оказывается чем-то большим, чем
мы предполагали.

Мы многого не знаем. И всегда делая что-то открываем для себя новое.

Всегда и везде.

Так происходило и со мной.

Мне как-то говорили, что мое имя созвучно с Р И А - т. е. масс медиа
и рекламными агентствами.

А еще кто-то сказал, что даже есть машина - Киа Рио, и конечно все знают
про город. Рио-де-Жанейро.


Почему мама назвала меня Риа ? И часто называла Рия, и увеличительно-ласкательно: Рийка ?

И тетя тоже.

Моя тетя Кейси.

Она по-моему любит меня даже больше, чем родная мать.

Так мне кажется.

Потому что у неё нет детей ?

Но она очень успешна. И я всегда мечтала хоть капельку стать похожей на неё.

Она стальная леди. В душе. А с виду мягкая и бархатная.

Но и в её личной жизни не все так радужно. Поэтому я решила ей помочь.

Все-таки в личных делах я разбираюсь немного лучше, чем в том, что принято
называть бизнесом. Или большой игрой, которую ведет тетя Кейси.

Каждый день и каждую минуту.

В погоне за своей розовой мечтой.

Если она конечно у неё есть.

Но я уверена, что есть.


Так что значили для меня мечты ?

Это как приход рождества или нового года.

Что-то печальное немного и одновременно прекрасное.

Что будоражит душу и воскрешает.

Даже если ты сейчас в глубокой депрессии. Но лучше конечно поскорее
выйти из этого состояния. Чего и себе желаю.

А вообще лучше не думать так.

Всегда и везде человек испытывает трудности. Когда-то больше когда-то
меньше. Но они есть.

Всегда и везде.

Просто кто-то с улыбкой их преодолевает и пытается не замечать.

А кто-то считает - что это депрессия.

Все зависит от того, как это воспринимать и во что верить.

Вам виднее.

Тогда нужно срочно провести в своей душе нечто похожее на операцию "Ы".



13 глава Сон


У меня есть тайна.

Я хотела бы поделиться ей. Но никто никогда об этом не должен знать.

И вы не узнаете.

Хотя кое-что я все же расскажу.

Это сон.

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

Думаю не стоит о ней рассказывать, возможно эта тайна так и умрет вместе
со мной.

Но есть то, о чем рассказать можно.

То что было после.

Сама история по большому счету вам ничего не объяснит и ничего не расскажет.
Тем более каждый воспринимает все по-своему.

Поэтому о ней и стоит умолчать.

Я уже говорила, во-первых, потому что я считаю её своим личным секретом,
а во-вторых, как я уже и объяснила, потому что считаю бессмысленным вдаваться
в подробности.


Но вот что я точно знаю наверняка, это то, что будет третьим.

Мой сон начинался в далекой и неизвестной стране. Это был большой город.

Яркие неоновые вывески. Огни. Вечер. Поздний. Или уже почти ночь.

Но жизнь продолжает кипеть в нем. Более того, она течет даже активнее,
чем днем.

И вот, я вынуждена войти в эту кипящую жизнь, в этот водоворот. И изменить все.

Что самое странное - я вижу себя как бы со стороны. И я вторгаюсь в него, в этот
поток, чтобы изменить самое главное - город поглощен темными силами,
они стремятся во тьму.

Но этого никто не видит. А я вижу. Вокруг только тьма.

Я понимаю, что так нельзя и это нужно остановить. Любой ценой. Но зачем ?

Разве я так люблю свет и добро ? Разве они обязательно должны победить зло ?

Я не уверена, но я буду пытаться. И я пытаюсь.

Сила света и сила тьмы никогда не уничтожат друг друга. До конца. Как только одна
начинает вдруг немного одолевать другую, то другая вдруг получает новые преимущества
и снова берет свое. Так они постоянно балансируют на грани возможного. Но существуют.

Этот странный сон и эта его трактовка мне близки именно сейчас.

Хотя наверное стоило бы рассказать обо всех деталях.

Но придет время и Вы все узнаете. Сами.

И это будет намного интереснее, потому что будет происходить на примере вашей личной
жизни. А не моей.

Хотя и о своей я поведаю вам немного.

В этой истории.



И если бы я была сейчас на каком-то ток шоу то, я бы наверное сказала:

И с вами была Риа и это игра ria pc game.

Но это не шутка. Все происходящее здесь правда. Потому я ничего такого
не буду говорить. Вы все поймете сами.





14 глава Пески перемен


Почему-то всегда считается, что все перемены к лучшему.

Если верить в это, то да. Так что давайте продолжать верить.

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

И я не исключение.

Да. Мне тоже сейчас трудно. И я помню, когда бывали в жизни моменты,
когда как-то было гораздо легче и проще.

Но страх прошел.

Я уже абсолютно спокойна. Если это можно так назвать.

Я может быть опасаюсь чего-то. Но я внимательна и осторожна.

Я стараюсь видеть опасности и обходить их или преодолевать, если 
они неизбежны.

Иногда прямая дорога все же лучше. Даже если трудна.

Но все течет и изменяется. И трудности тоже проходят.

Вот уже наступает новый год. Он принесет только новое, хорошее
и даже интересное.

Я надеюсь что все будет еще лучше. А все трудное пройдет. И мы все
преодолеем.

Я думаю даже те кто с виду успешен, например моя тетя Кейси, о которой
я часто, может всегда к слову, к месту и не к месту о ней упоминаю.

Но она для меня почти кумир.

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

Поэтому Я надеюсь что и у вас тоже все будет хорошо. И все наладится.

А пески перемен текут и изменяются. И все бежит своим чередом.




15 глава Я иду


Итак, Я делаю новый шаг и вступаю в новую эру. Для меня.

Вокруг все еще почти такое же. Но я чувствую приближение нового. Необычного
и интересного.

Каким будет наступающий год ? Что он нам принесет ?

С новым годом !

подробнее

 

Программирование игр на С++ для платформы DirectX 9c

 
     
  Написание приложения DirectX9c + MFC в среде MSVS 2005  
     
 

Данный урок является введением в программирование на C++ в MSVS 2008

Вам нужно иметь установленную среду Microsoft Visual Studio 2005 или 2008 (можно триал),

и DirectX SDK 9 версии, или лучше самой последней - DirectX SDK August 2008.

 
     
  [назад] [далее] [к содержанию]  
     
 

Причины побудившие меня к написанию данной серии статей достаточно просты - поделиться своим опытом в области создания игр на VC++ в среде MSVS 2005 для DirectX 9c

В данном уроке я попытаюсь рассказать о том, как подойти к созданию приложения сочетающего использование интерфейсов DirectX 9c и классов из библиотеки MFC

 
     
 

Начнём с того, что в DirectX SDK August 2008 не представлен ни один из примеров приложения, рассчитанного на совместное использование DirectX и классов MFC.

По видимому предполагается, что тема достаточно тривиальна для тех, кто работает с DirectX

Однако мне это представляется не совсем так.

Зачем Вам в приложении DirectX могут понадобится классы MFC?

Во-первых, MFC содержит целый ряд просто необходимых классов, а значит и решения тех стандартных задач, которые трудно решить на голом WinAPI.

В частности если Ваше приложение DirectX подразумевает работу в стандартном окне и является какой-либо утилитой используемой в разработке Вашей игры (например редактор карт), то без использования MFC Вам просто не обойтись.

Во-вторых, даже если Ваша игра будет большую часть времени работать в полноэкранном режиме, классы MFC Вам всё равно понадобятся для решение многих типовых задач.

Именно базируясь на этих двух причинах следует рассмотреть как подойти к совместному использованию DirectX и MFC в своём приложении.

 
     
 

Для простоты мы разберем некий базис - шаблон приложения, рассчитанного на DirectX9c + MFC

Последовательность создания приложения D3D9 (DirectX 9c) + MFC
в MSVS 2005

File > New > Project > MFC > MFC Application

опции
Dialog based
язык - Английский (США) - потом поменяем на русский (при создании диалогов и изменении
их свойств)
MFC standard
Use MFC in a static library
Use Unicode libraries
остальные опции на своё усмотрение или по-умолчанию

После генерации приложения нужно настроить проект для использования заголовочных
файлов и библиотек DirectX 9c как это показано в уроке Первый старт

Добавить исходный код из DXUT - это набор вспомогательного кода, который Вы найдете внутри [DirectXSDK]\Samples\C++\DXUT\

Код данной папки ориентирован на использование в WinAPI-приложении без использования MFC

Для использования в MFC-проекте код потребует небольших модификаций во всех файлах *.cpp из папок Core и Optional нужно добавить строку #include "stdafx.h" перед строкой #include "DXUT.h" в самом начале каждого файла. Для простоты создайте копию содержимого папки DXUT, назвав например DXUT_mfc и смело вносите эти изменения. После этих изменений в качестве заголовочного файла управляющего прекомпилированными модулями будет задан stdafx.h что и имеет место в созданном Вами MFC-приложении, в противном случае Вы получите ошибки во время компиляции.

Код папки DXUT_mfc нужно добавить к коду проекта - в окне Solution Explorer щелкните правой кнопкой по названию проекта, выберите Add > New Filter, который назовите DXUT_mfc.

 
     
   
     
 

и добавьте все файлы из папки DXUT_mfc кроме DXUTguiIME.* и ImeUi.*

Данные файлы относятся к использованию национальных языков и Вам пока не потребуются.

 
     
 

Добавить шаблонный код для начальной инициализации типового D3D9 - приложения

Рассмотрим что нужно добавить на примере проекта D3DAppTemplate

В модуле D3DAppTemplate.h нужно внести следующие изменения и дополнения -

#include <d3d9.h>
#include <d3dx9.h>

#include "D3DAppTemplateDlg.h"

внутри описания класса class CD3DAppTemplateApp

~CD3DAppTemplateApp();

в конце описания класса

public:
CD3DAppTemplateDlg* pMainWindow;

В модуле D3DAppTemplate.cpp

#include "DXUT.h"
#include "DXUTcamera.h"
#include "DXUTsettingsdlg.h"
#include "SDKmisc.h"
#include "SDKsound.h"

 

 

//--------------------------------------------------------------------------------------
// Global variables
//--------------------------------------------------------------------------------------

ID3DXFont* g_pFont = NULL; // Font for drawing text
ID3DXSprite* g_pTextSprite = NULL; // Sprite for batching draw text calls
CFirstPersonCamera g_Camera; // A model viewing camera
CSoundManager g_DSound; // DirectSound class

bool g_bShowHelp = true; // If true, it renders the UI control text
bool g_bPlaySounds = true; // whether to play sounds
double g_fLastAnimTime = 0.0; // Time for the animations


//--------------------------------------------------------------------------------------
// Forward declarations
//--------------------------------------------------------------------------------------
bool CALLBACK IsDeviceAcceptable( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed,
void* pUserContext );
bool CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings, void* pUserContext );
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext );
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext );
void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext );
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext );
LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing,
void* pUserContext );
void CALLBACK KeyboardProc( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext );
void CALLBACK OnGUIEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext );
void CALLBACK OnLostDevice( void* pUserContext );
void CALLBACK OnDestroyDevice( void* pUserContext );
void RenderText();

void InitApp();

void InitialD3DAppSettings();

 

CD3DAppTemplateApp::CD3DAppTemplateApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
pMainWindow = NULL;
}

 

 

BOOL CD3DAppTemplateApp::InitInstance()
{
// InitCommonControlsEx() is required on Windows XP if an application
// manifest specifies use of ComCtl32.dll version 6 or later to enable
// visual styles. Otherwise, any window creation will fail.
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// Set this to include all the common control classes you want to use
// in your application.
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);

CWinApp::InitInstance();

AfxEnableControlContainer();

// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need
// Change the registry key under which our settings are stored
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization
SetRegistryKey(_T("Local AppWizard-Generated Applications"));

 

pMainWindow = new CD3DAppTemplateDlg();
pMainWindow->Create(CD3DAppTemplateDlg::IDD);
pMainWindow->ShowWindow(SW_SHOW);
pMainWindow->ShowWindow(SW_HIDE);

m_pMainWnd = pMainWindow;

InitialD3DAppSettings();

//g_d3dApp.Cleanup3DEnvironment();

delete pMainWindow;

pMainWindow = NULL;

// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}

 

void InitialD3DAppSettings()
{
// Enable run-time memory check for debug builds.
#if defined(DEBUG) | defined(_DEBUG)
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif

// Set the callback functions. These functions allow DXUT to notify
// the application about device changes, user input, and windows messages. The
// callbacks are optional so you need only set callbacks for events you're interested
// in. However, if you don't handle the device reset/lost callbacks then the sample
// framework won't be able to reset your device since the application must first
// release all device resources before resetting. Likewise, if you don't handle the
// device created/destroyed callbacks then DXUT won't be able to
// recreate your device resources.
DXUTSetCallbackD3D9DeviceAcceptable( IsDeviceAcceptable );
DXUTSetCallbackD3D9DeviceCreated( OnCreateDevice );
DXUTSetCallbackD3D9DeviceReset( OnResetDevice );
DXUTSetCallbackD3D9FrameRender( OnFrameRender );
DXUTSetCallbackD3D9DeviceLost( OnLostDevice );
DXUTSetCallbackD3D9DeviceDestroyed( OnDestroyDevice );

DXUTSetCallbackMsgProc( MsgProc );

DXUTSetCallbackKeyboard( KeyboardProc );
DXUTSetCallbackFrameMove( OnFrameMove );
DXUTSetCallbackDeviceChanging( ModifyDeviceSettings );

// Show the cursor and clip it when in full screen
DXUTSetCursorSettings( true, true );

InitApp();

// Initialize DXUT and create the desired Win32 window and Direct3D
// device for the application. Calling each of these functions is optional, but they
// allow you to set several options which control the behavior of the framework.
DXUTInit( true, true ); // Parse the command line and show msgboxes
DXUTSetHotkeyHandling( true, true, true ); // handle the defaul hotkeys

/*DXUTCreateWindow( L"D3D9 App Template", 0, 0, LoadMenu(0,
MAKEINTRESOURCE(IDR_MAINMENU)) );*/
DXUTCreateWindow( L"D3D9 App Template", 0, 0, 0);

SetWindowLong( DXUTGetHWND(), GWL_STYLE,
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX);

// We need to set up DirectSound after we have a window.
g_DSound.Initialize( DXUTGetHWND(), DSSCL_PRIORITY );


DXUTCreateDevice( true, 631, 380 );

//InitD3DApp();

// Pass control to DXUT for handling the message pump and
// dispatching render calls. DXUT will call your FrameMove
// and FrameRender callback when there is idle time between handling window messages.
DXUTMainLoop();

// Perform any application-level cleanup here. Direct3D device resources are released within the
// appropriate callback functions and therefore don't require any cleanup code here.

//return DXUTGetExitCode();
}

//--------------------------------------------------------------------------------------
// Initialize the app
//--------------------------------------------------------------------------------------
void InitApp()
{
// Add mixed vp to the available vp choices in device settings dialog.
DXUTGetD3D9Enumeration()->SetPossibleVertexProcessingList( true, false, false, true );

// Setup the camera with view matrix
D3DXVECTOR3 vEye( .5f, .55f, -.2f );
D3DXVECTOR3 vAt( .5f, .125f, .5f );
g_Camera.SetViewParams( &vEye, &vAt );
g_Camera.SetScalers( 0.01f, 1.0f ); // Camera movement parameters

}


//--------------------------------------------------------------------------------------
// Called during device initialization, this code checks the device for some
// minimum set of capabilities, and rejects those that don't pass by returning false.
//--------------------------------------------------------------------------------------
bool CALLBACK IsDeviceAcceptable( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat,
D3DFORMAT BackBufferFormat, bool bWindowed, void* pUserContext )
{
// Skip backbuffer formats that don't support alpha blending
IDirect3D9* pD3D = DXUTGetD3D9Object();
if( FAILED( pD3D->CheckDeviceFormat( pCaps->AdapterOrdinal, pCaps->DeviceType,
AdapterFormat, D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING,
D3DRTYPE_TEXTURE, BackBufferFormat ) ) )
return false;

// Need to support ps 2.0
if( pCaps->PixelShaderVersion < D3DPS_VERSION( 2, 0 ) )
return false;

// Need to support A8R8G8B8 textures
if( FAILED( pD3D->CheckDeviceFormat( pCaps->AdapterOrdinal, pCaps->DeviceType,
AdapterFormat, 0,
D3DRTYPE_TEXTURE, D3DFMT_A8R8G8B8 ) ) )
return false;

return true;
}

//--------------------------------------------------------------------------------------
// This callback function is called immediately before a device is created to allow the
// application to modify the device settings. The supplied pDeviceSettings parameter
// contains the settings that the framework has selected for the new device, and the
// application can make any desired changes directly to this structure. Note however that
// DXUT will not correct invalid device settings so care must be taken
// to return valid device settings, otherwise IDirect3D9::CreateDevice() will fail.
//--------------------------------------------------------------------------------------
bool CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings, void* pUserContext )
{
assert( DXUT_D3D9_DEVICE == pDeviceSettings->ver );

HRESULT hr;
IDirect3D9* pD3D = DXUTGetD3D9Object();
D3DCAPS9 caps;

V( pD3D->GetDeviceCaps( pDeviceSettings->d3d9.AdapterOrdinal,
pDeviceSettings->d3d9.DeviceType,
&caps ) );

// If device doesn't support HW T&L or doesn't support 1.1 vertex shaders in HW
// then switch to SWVP.
if( ( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) == 0 ||
caps.VertexShaderVersion < D3DVS_VERSION( 1, 1 ) )
{
pDeviceSettings->d3d9.BehaviorFlags = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
}

// If the hardware cannot do vertex blending, use software vertex processing.
if( caps.MaxVertexBlendMatrices < 2 )
pDeviceSettings->d3d9.BehaviorFlags = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

// If using hardware vertex processing, change to mixed vertex processing
// so there is a fallback.
if( pDeviceSettings->d3d9.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING )
pDeviceSettings->d3d9.BehaviorFlags = D3DCREATE_MIXED_VERTEXPROCESSING;

// Debugging vertex shaders requires either REF or software vertex processing
// and debugging pixel shaders requires REF.
#ifdef DEBUG_VS
if( pDeviceSettings->d3d9.DeviceType != D3DDEVTYPE_REF )
{
pDeviceSettings->d3d9.BehaviorFlags &= ~D3DCREATE_HARDWARE_VERTEXPROCESSING;
pDeviceSettings->d3d9.BehaviorFlags &= ~D3DCREATE_PUREDEVICE;
pDeviceSettings->d3d9.BehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
}
#endif
#ifdef DEBUG_PS
pDeviceSettings->d3d9.DeviceType = D3DDEVTYPE_REF;
#endif
// For the first device created if its a REF device, optionally display a warning dialog box
static bool s_bFirstTime = true;
if( s_bFirstTime )
{
s_bFirstTime = false;
if( pDeviceSettings->d3d9.DeviceType == D3DDEVTYPE_REF )
DXUTDisplaySwitchingToREFWarning( pDeviceSettings->ver );
}

return true;
}


//--------------------------------------------------------------------------------------
// This callback function will be called immediately after the Direct3D device has been
// created, which will happen during application initialization and windowed/full screen
// toggles. This is the best location to create D3DPOOL_MANAGED resources since these
// resources need to be reloaded whenever the device is destroyed. Resources created
// here should be released in the OnDestroyDevice callback.
//--------------------------------------------------------------------------------------
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext )
{
HRESULT hr;



// Initialize the font

V_RETURN( D3DXCreateFont( pd3dDevice, 10, 0, 0, 1, FALSE, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
L"MS Sans Serif ", &g_pFont ) );



// Define DEBUG_VS and/or DEBUG_PS to debug vertex and/or pixel shaders with the
// shader debugger. Debugging vertex shaders requires either REF or software vertex
// processing, and debugging pixel shaders requires REF. The
// D3DXSHADER_FORCE_*_SOFTWARE_NOOPT flag improves the debug experience in the
// shader debugger. It enables source level debugging, prevents instruction
// reordering, prevents dead code elimination, and forces the compiler to compile
// against the next higher available software target, which ensures that the
// unoptimized shaders do not exceed the shader model limitations. Setting these
// flags will cause slower rendering since the shaders will be unoptimized and
// forced into software. See the DirectX documentation for more information about
// using the shader debugger.
DWORD dwShaderFlags = D3DXFX_NOT_CLONEABLE;

#if defined( DEBUG ) || defined( _DEBUG )
// Set the D3DXSHADER_DEBUG flag to embed debug information in the shaders.
// Setting this flag improves the shader debugging experience, but still allows
// the shaders to be optimized and to run exactly the way they will run in
// the release configuration of this program.
dwShaderFlags |= D3DXSHADER_DEBUG;
#endif

#ifdef DEBUG_VS
dwShaderFlags |= D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT;
#endif
#ifdef DEBUG_PS
dwShaderFlags |= D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT;
#endif

return S_OK;
}


//--------------------------------------------------------------------------------------
// This callback function will be called immediately after the Direct3D device has been
// reset, which will happen after a lost device scenario. This is the best location to
// create D3DPOOL_DEFAULT resources since these resources need to be reloaded whenever
// the device is lost. Resources created here should be released in the OnLostDevice
// callback.
//--------------------------------------------------------------------------------------
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice,
const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext )
{
HRESULT hr;


// get device caps
D3DCAPS9 caps;
pd3dDevice->GetDeviceCaps( &caps );


if( g_pFont )
V_RETURN( g_pFont->OnResetDevice() );


// Create a sprite to help batch calls when drawing many lines of text
V_RETURN( D3DXCreateSprite( pd3dDevice, &g_pTextSprite ) );

// Setup the camera's projection parameters
float fAspectRatio = pBackBufferSurfaceDesc->Width / ( FLOAT )pBackBufferSurfaceDesc->Height;
g_Camera.SetProjParams( D3DX_PI / 3, fAspectRatio, 0.001f, 100.0f );

// set lighting
pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
pd3dDevice->SetRenderState( D3DRS_AMBIENT, D3DCOLOR_ARGB( 255, 255, 255, 255 ) );
pd3dDevice->LightEnable( 0, TRUE );
pd3dDevice->SetRenderState( D3DRS_NORMALIZENORMALS, TRUE );


// reset the timer
g_fLastAnimTime = DXUTGetGlobalTimer()->GetTime();

return S_OK;
}

//--------------------------------------------------------------------------------------
// This callback function will be called once at the beginning of every frame. This is the
// best location for your application to handle updates to the scene, but is not
// intended to contain actual rendering calls, which should instead be placed in the
// OnFrameRender callback.
//--------------------------------------------------------------------------------------
void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext )
{

g_fLastAnimTime = fTime;

// Update the camera's position based on user input
g_Camera.FrameMove( fElapsedTime );


}


//--------------------------------------------------------------------------------------
// This callback function will be called at the end of every frame to perform all the
// rendering calls for the scene, and it will also be called if the window needs to be
// repainted. After this function has returned, DXUT will call
// IDirect3DDevice9::Present to display the contents of the next buffer in the swap chain
//--------------------------------------------------------------------------------------
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
{

pd3dDevice->Clear( 0L, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
0xFFA1E1FF, 1.0f, 0L );

if( SUCCEEDED( pd3dDevice->BeginScene() ) )
{

//
// Output text information
//
RenderText();

pd3dDevice->EndScene();
}
}


//--------------------------------------------------------------------------------------
// Render the help and statistics text. This function uses the ID3DXFont interface for
// efficient text rendering.
//--------------------------------------------------------------------------------------
void RenderText()
{
// The helper object simply helps keep track of text position, and color
// and then it calls pFont->DrawText( m_pSprite, strMsg, -1, &rc, DT_NOCLIP, m_clr );
// If NULL is passed in as the sprite object, then it will work however the
// pFont->DrawText() will not be batched together. Batching calls will improves performance.
CDXUTTextHelper txtHelper( g_pFont, g_pTextSprite, 10 );
const D3DSURFACE_DESC* pd3dsdBackBuffer = DXUTGetD3D9BackBufferSurfaceDesc();

// Output statistics
txtHelper.Begin();
txtHelper.SetInsertionPos( 5, 5 );
txtHelper.SetForegroundColor( 0xFF0000FF );


txtHelper.DrawTextLine( DXUTGetFrameStats( true ) );

txtHelper.End();
}


//--------------------------------------------------------------------------------------
// As a convenience, DXUT inspects the incoming windows messages for
// keystroke messages and decodes the message parameters to pass relevant keyboard
// messages to the application. The framework does not remove the underlying keystroke
// messages, which are still passed to the application's MsgProc callback.
//--------------------------------------------------------------------------------------
void CALLBACK KeyboardProc( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext )
{
if( bKeyDown )
{
switch( nChar )
{
case VK_F1:
g_bShowHelp = !g_bShowHelp; break;
}
}
}


//--------------------------------------------------------------------------------------
// Before handling window messages, DXUT passes incoming windows
// messages to the application through this callback function. If the application sets
// *pbNoFurtherProcessing to TRUE, then DXUT will not process this message.
//--------------------------------------------------------------------------------------
LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing,
void* pUserContext )
{


g_Camera.HandleMessages( hWnd, uMsg, wParam, lParam );

return 0;
}


//--------------------------------------------------------------------------------------
// This callback function will be called immediately after the Direct3D device has
// been destroyed, which generally happens as a result of application termination or
// windowed/full screen toggles. Resources created in the OnCreateDevice callback
// should be released here, which generally includes all D3DPOOL_MANAGED resources.
//--------------------------------------------------------------------------------------
void CALLBACK OnDestroyDevice( void* pUserContext )
{

SAFE_RELEASE( g_pFont );

//g_d3dApp.Cleanup3DEnvironment(); //методы освобождения ресурсов нужно вызывать именно

//здесь. В данном примере g_d3dApp - объект игрового приложения не используется, поэтому он здесь закомментирован. В приложении с игрой освобождение ресурсов происходит именно так.
}

//--------------------------------------------------------------------------------------
// This callback function will be called immediately after the Direct3D device has
// entered a lost state and before IDirect3DDevice9::Reset is called. Resources created
// in the OnResetDevice callback should be released here, which generally includes all
// D3DPOOL_DEFAULT resources. See the "Lost Devices" section of the documentation for
// information about lost devices.
//--------------------------------------------------------------------------------------
void CALLBACK OnLostDevice( void* pUserContext )
{

if( g_pFont )
g_pFont->OnLostDevice();

SAFE_RELEASE( g_pTextSprite );




}

 
     
  Этот же код вы найдете внутри модулей D3DAppTemplate.h и D3DAppTemplate.cpp в проекте D3DAppTemplate -  
     
  Исходный код приложения D3DAppTemplate - 269 Кб, архив WinRaR 3.3 - Исходный код приложения D3DAppTemplate - 270 Кб, архив WinRaR 3.3  
     
  Особенностью работы данного приложения является то, что в качестве первоначального (главного) окна используется стандартное окно диалога. Это окно создается как немодальное (modeless), затем оно отображается и тут же скрывается, уступая очередь созданному окну DirectX-приложения  
     
  Схема функционирования выглядит следующим образом -  
     
   
     
 

В начале создается объект класса CD3DAppTemplateApp путём вызова его конструктора

CD3DAppTemplateApз();

Затем вызывается метод InitInstance() внутри которого и осуществляется вся ицициализация, касающаяся mfc и directx.

Вместо созданного модального диалога, содержащего кнопки OK и Cancel создается немодальное окно, которое отображается и тут же скрывается, а далее вызывается функция InitialD3DAppSettings() которая отвечает за всё дальнейшее связанное с directx.

Для настройки directx вызывается функция InitialD3DAppSettings(); Внутри неё происходит настройка directx, создание окна directx-приложения и запуск цикла очереди сообщений вызовом функции DXUTMainLoop(); Как это реализовано в деталях - смотри выше или в исходном коде проекта D3DAppTemplate

Далее все необходимые сообщения системы можно обрабатывать внутри функции MsgProc, а собственно игровую логику и отрисовку игровой сцены производить внутри функций OnFrameMove и OnFrameRender

При выходе из приложения вызовом exit() или PostQuitMessage DXUTMainLoop завершается, управление возвращается внутрь метода InitInstance, метод возвращает FALSE, что свидетельстует о ненужности запуска цикла очереди сообщений и приложение закрывается. При уничтожении вызывается метод деструктора ~CD3DAppTemplateApp() внутри которого удаляется созданный объект немодального главного окна приложения.

 
     
 

Особенность данного решения поставленной задачи: mfc + directx9c в простоте реализации.

Недостаток состоит в том, что требуется использование вспомогательного окна, которое в целом никак не используется - лишь отображается, а затем скрывается. Но использование его требуется по той причине, что класс CWinApp в своём свойстве m_pMainWnd обязательно требует окна производного от CWnd, каковым окно приложения, создаваемое для directx-приложения средствами WinAPI не является.

Можно конечно предложить более сложный способ - использовать главное окно для целей directx, однако это значительно усложнит задачу, потребуя сильных изменений в реализации функции InitialD3DAppSettings() главным образом для использования готового окна, а не его создания, переделки DXUTMainLoop для работы исходя из очереди сообщений прокачиваемых через методы CWinApp и некоторые другие.

 
     
 

Моей целью было предложить Вам достаточно простой способ совместного использования directx9c и mfc и я считаю, что таковой и предложил Вам. По мере накопления Вами опыта в программирования на directx + mfc Вы, возможно, найдете для себя более оптимальные решения, еще более подходящие для Ваших нужд.

Так что желаю Вам всяческих успехов на этом поприще.

Сам же я, являясь по-сути Delphi DirectX - программистом вот уже начиная с далекого 2002 года, могу сказать, что использование для этих целей VC++ не намного сложнее, а в чём-то даже проще. Но то, что Вы выберете для использования с DirectX - C++ или Delphi будет всецело зависеть от Ваших возможностей в настоящем времени, главным образом касающихся наличия у Вас под рукой той или иной среды программирования BDS (Borland Developer Studio) или MSVS (Microsoft Visual Studio) и опыта в работе с ними.

При желании Вам всегда можно будет перейти с C++ на Delphi и наоборот, как это имело место в моём случае.

 
     
 

Так что же лучше Delphi или C++ ???

- Решать Вам!

 
     
     
     
     
     
     
  [назад] [далее] [к содержанию]  
Содержимое данной страницы доступно только зарегистрированным пользователям.



Пожалуйста войдите на сайт - Вход

или пройдите процедуру регистрации - Регистрация

megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 0,1564