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


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

megainformatic - КАК СОЗДАТЬ СВОЮ ИГРУ - Веселый Буквоежка Ваше Визуальное Шоу / Fun Letter Eater You Visual Show
             
подробнее...

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

megainformatic - Построение ирерархических связей между объектами и основы 3d анимирования

megainformatic - Особенности экспорта моделей и анимации экспортером kWXPort080719 из 3ds max 2009 

megainformatic - Создание модели броневика (Хэд)

megainformatic cms e-mailer

megainformatic cms e-mailer

megainformatic cms e-mailer

Бесплатная Система Управления Вашим Сайтом - megainformatic cms free

megainformatic - Путешествие в мир 3d

megainformatic - Путешествие в мир 3d - страница 2

megainformatic - Путешествие в мир 3d - страница 3

megainformatic - Путешествие в мир 3d - страница 4

megainformatic - Путешествие в мир 3d - страница 5

megainformatic - Путешествие в мир 3d - страница 6

megainformatic - Создание модели броневика (Хэд) - Анимация вращения колес

megainformatic cms express files

megainformatic cms express files

megainformatic cms express files

megainformatic - Уроки Photoshop - Чудеса

megainformatic cms express files - Развертывание сайта на Вашем хостинге

megainformatic - Настольная игра "Веселый Буквоежка"

megainformatic - Уроки delphi directx 8.1

megainformatic - Уроки delphi directx 8.1 - Урок 1 - Введение в Delphi DirectX 8.1. Создание шаблона стартового приложения.

megainformatic - Уроки delphi directx 8.1 - Урок 1 - Введение в Delphi DirectX 8.1. Создание шаблона стартового приложения. Страница 2

megainformatic - Урок 2 Создаем и обрабатываем команды меню.

megainformatic - Урок 2 Создаем и обрабатываем команды меню. Страница 2

megainformatic - Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8

megainformatic - Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8 - Страница 2

megainformatic - Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8 - Страница 3

megainformatic - Урок 4 Построение класса приложения

megainformatic - Урок 4 Построение класса приложения - Страница 2

megainformatic - Урок 5 Построение классов игровых объектов и других необходимых классов

megainformatic - Урок 5 Построение классов игровых объектов и других необходимых классов - Страница 2

megainformatic - Урок 6 Игровая логика

megainformatic - Заметки по joomla - JFolder::create: Path not in open_basedir paths. Что это?

megainformatic cms express files - Добавление статей на сайт под управлением megainfromatic cms express files

megainformatic - Урок 7 2D-анимация

megainformatic - Урок 8 Загрузка/Сохранение текущей игры, режим паузы, режимы часов/будильника, запуск браузера Internet Explorer для показа сайта разработчика и других интернет-ресурсов

megainformatic - Урок 9 Тестирование и отладка приложения

megainformatic - Мои Музыкальные Миры

megainformatic - уроки Photoshop free

megainformatic cms express

megainformatic cms express

megainformatic cms express

megainformatic cms express files

megainformatic - Методы создания растровых изображений в Adobe Photoshop

megainformatic - Создание фотореалистичной текстуры травы

megainformatic - Рабочее пространство Adobe Photoshop

megainformatic - Бесшовные (тайловые) текстуры

megainformatic - Создание изображений огня, воды, неба

megainformatic - Создание текстур горных пород и суши (урок 5)

megainformatic - Рисование персонажей (урок 6)

megainformatic - Рисование фона (урок 6 часть 2)

megainformatic - Рельефные изображения

Добавление статей на сайт под управлением megainformatic cms express

megainformatic - Воспроизведение файлов в форматах it, xm, s3m, mod

подробнее

Как создать игру ? - Пишем игровой движок с нуля - Общая структура будущего игрового движка

[Содержание]  [Далее]

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

Большинство ваших первых проектов обречены на забвение.

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

Ну как, еще не пропал оптимизм ?

Тогда я с вами :))))

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

И я искренне надеюсь, что Вы уже ознакомились со всеми другими материалами на сайте Мега Информатик, посвященными созданию игр под directx 9c на c++.

Начальная точка выполнения приложения

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

Давайте познакомимся с общей схемой работы игрового движка написанного на c++ для directx 9c

общая схема работы игрового движка написанного на c++ для directx 9c

Теперь поясню приведенные на схеме обозначения.

BOOL CFleApp::InitInstance()

Более полно записывается именно так.
Это метод класса CFleApp, с которого начинается выполнение приложения.

Разумеется класс Вашего приложения может называться как-то иначе, к примеру CGameApp или CGameProgApp

Данный метод является стандартным для Win32 приложений, основанных на диалоговых окнах.

Если Вы возьмете за основу примеры представленные в DirectX SDK Aug 2008 или более поздних верий, то там Вы также найдете нечто похожее.

Можете использовать мои собственные наработки - Полный исходный код игры ВЕБ - Веселый Единственный Буквоежка

void InitD3DApp()

Данная процедура, как понятно из схемы, вызывается внутри CFleApp::InitInstance и выполняет собственно начальную инициализацию.

Приведу реальный пример кода, который там записан

void InitD3DApp()
{

GetModuleFileName(NULL, AppRootDir, AppRootDirSize);
/* получаем полный путь к файлу исполняемого приложения */
PathRemoveFileSpec(AppRootDir);/* удаляем из пути имя файла, оставляя только путь к рабочей папке, в которой происходит выполнение - и как видим значение будет храниться в переменной AppRootDir. Забегая вперед скажу, что многие функции движка будут использовать данную переменную чтобы находить файлы ресурсов игры (картинки, звуки, списки), чтобы загружать из них нужную информацию. */


LoadConfigurationSettings();
/* данная процедура выполняет загрузку настроек игрового приложения */


InitGUI();
/* и наконец эта процедура - инициализирует элементы GUI для окна настроек игры */


}
Следует отметить, что сама эта процедура описана в модуле Fle.cpp

2) CFleDlg::OnLButtonUp

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

Более подробно об игровой оболочке рассказано в статье - игровая оболочка

3) StartD3DApp();

Процедура StartD3DApp может вызываться по нажатию кнопки ИГРАТЬ в игровой оболочке, либо если оболочка не используется в вашем проекте, то вызывается непосредственно внутри InitD3DApp()

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

4) FreeD3DApp();

При выборе пункта меню ВЫХОД в игре или нажатии определенной клавиши (или комбинации клавиш) - обычно [Esc], [F10], [Ctrl] + X, [Alt] + [F4] или еще что-то приложение останавливает игровой процесс и освобождает все выделенные ему ресуры памяти. Это и есть всё то, что происходит внутри FreeD3DApp.

3.1) DXUTMainLoop();

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

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

[Содержание]  [Далее]
подробнее

Как я осваивал Flash - шаг 2 - Основы создания простейших flash - игр

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

В данной статье я расскажу о том, как заставить наш Шарик (из предыдущего урока)

перемещаться по нажатию клавиш стрелок ВВЕРХ, ВНИЗ, ВЛЕВО и ВПРАВО.

1. Создаем новый документ Файл Flash (Action Script 2.0).

2. Рисуем шарик (как в предыдущем уроке)

3. Преобразуем шарик в символ - прежде надо выделить весь шарик - инструментом СТРЕЛКА обвести вокруг него, чтобы выделились и заливка и обводка, затем выбрать в меню пункты ВСТАВКА > СОЗДАТЬ СИМВОЛ

4. В открывшемся диалоговом окне задать имя символа - ball_symbol и выбрать тип ФРАГМЕНТ РОЛИКА (MovieClip). Нажать ОК.

5. После того, как откроется окно редактирования ball_symbol нужно вставить в него еще один шарик.

6. Перейти к Монтажному кадру (кликнуть фразу Монтажный кадр 1 расположенную в левом верхнем углу рабочего пространства, сразу под вкладкой текущего проекта).

7. Правой кнопкой кликнуть созданный ball_symbol и выбрать пункт ДЕЙСТВИЯ.

8. В окно действий action script вставить следующий код -

  onClipEvent (enterFrame) {

    if (Key.isDown(Key.LEFT)) {

      this._x += -1;

    } else if (Key.isDown(Key.RIGHT)) {

      this._x += 1;

    } else if (Key.isDown(Key.UP)) {

      this._y += -1;

    } else if (Key.isDown(Key.DOWN)) {

      this._y += 1;

    }

  }

9. Нажимаем ctrl+enter и смотрим что у нас получилось - шарик должен двигаться по нажатию клавиш стрелок ВЛЕВО, ВПРАВО, ВВЕРХ, ВНИЗ.

На флешке ниже показано то, что должно получиться у вас - кликаете флешку (чтобы окно браузера не "съезжало") и нажимаете клавиши стрелки ВЛЕВО, ВПРАВО, ВВЕРХ, ВНИЗ.

Лично у меня, когда я учился это делать возникло 2 вопроса:

1) Почему в сцене нужны 2 шарика, можно ли оставить только один ?

2) Почему описанная последовательность действий справедлива только для проекта ACTION SCRIPT 2.0 ?

Первый вопрос я решил достаточно просто - вынес первый шарик (не ball_symbol) за пределы окна документа.

Получилось не очень удачно - т. к. Вы видите, что его край остается виден.

А вот ответ на второй вопрос еще предстоит найти ;)))

подробнее


[к содержанию] [другие статьи Тимонина Андрея]

Исключения. Создаем класс обработки исключений.

автор: Тимонин Андрей

дата публикации на сайте Мега Информатик: 18.11.2012

Добро пожаловать в цикл моих уроков посвященных программированию.

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


В любом языке, как и в жизни, существуют правила. А если есть правила, значит должны быть и ситуации, которые выбиваются и существуют вне этих правил. Эти ситуации называются исключениями (exceptions). Именно про них и пойдет речь в этой статье.

Обратимся к теории.  Для работы с исключениями используется контролируемый блок try. Чтобы сгенерировать исключение можно воспользоваться оператором trow внутри блока try или функций, вызываемых в этом блоке.  После блока try размещаются один или несколько блоков обработки исключений catch. Смотрим пример.

try{
//фрагмент кода
}
сatch( Type)
{
//действия по обработке исключения типа Type
}
catch(…)
{
//действия по обработке прочих исключений исключения
}

Как все это работает? В блоке try{ } помещаем код, где может возникнуть ошибка. В блоке сatch( Type){ } -  что необходимо сделать в исключительной ситуации, например сообщить пользователю, что в программе произошла ошибка по такому-то поводу.

Для рассмотрения ошибок конкретного типа использется вариант блока   сatch( Type){ }. Вместо  слова Type указываете конкретный тип. Смотрим пример.

сatch( int)
{
//действия по обработке исключения типа int
}
сatch(char *)
{
//действия по обработке исключения типа char
}

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

catch(…)
{
//действия по обработке прочих исключений исключения

}

А теперь поговорим, что происходит, когда вызываем оператор trow.

trow Err();

При обращении к этому оператору создается копия параметра виде статического объекта, которая существует до тех пор, пока не будет обработано исключение. Ищется подходящий обработчик catch, в качестве параметра которого указано необходимое исключение. В данном случае catch (Err& ). Если такого не находится, вызывается catch(…).

Давайте попробуем написать класс исключений.

class ExceptionBase {
private:
         int errorCode; //код ошибки
         wchar_t *errorMessage;//текст сообщения
public: //конструктор по умолчанию
         ExceptionBase() : errorCode(0) {errorMessage = L"no description"}
     //конструктор копирования
         ExceptionBase(ExceptionBase& eb);
    //конструктор с кодом и текстом сообщения
         ExceptionBase(int eC, const wchar_t *eM);
     //деструктор
         virtual ~ExceptionBase();
     //оператор присваивания
         ExceptionBase& operator=(ExceptionBase& eb);
         int getErrorCode(); //получает код ошибки
         const wchar_t* getErrorMessage();
         operator int();
         operator const wchar_t*();
};

Вот такой получился класс. Конструктор копирования и оператор присваивания нужны для передачи объекта в оператор catch. Смотрим на реализацию.
//exception.cpp
#include “exception.h”
//конструктор копирования
ExceptionBase::ExceptionBase(ExceptionBase& eb)
{
         errorCode = eb.getErrorCode();
    //определяем сколько занимает наша строка
         int len = wcslen(eb.getErrorMessage());
    //выделяем необходимый размер памяти пула
         errorMessage = new wchar_t[len + 1];
    //копируем строку сообщения
         wcscpy(errorMessage, eb.getErrorMessage());
}

ExceptionBase::ExceptionBase(int eC, const wchar_t *eM)
{
errorCode = eC;
int len = wcslen(eM);
errorMessage = new wchar_t[len + 1];
wcscpy(errorMessage, eM);
}
//деструктор
ExceptionBase::~ExceptionBase()
{
//освобождаем выделенную память пула
if(errorMessage != NULL)
delete [] errorMessage;
}

ExceptionBase& ExceptionBase::operator=(ExceptionBase& eb)
{
//защитимся от самоприсваивания
if(this == &eb)
return *this;
delete [] errorMessage;
//занесем новое значение кода
errorCode = eb.getErrorCode();
//сформируем новую строку сообщения
int len = wcslen(eb.getErrorMessage());
errorMessage = new wchar_t[len + 1];
wcscpy(errorMessage, eb.getErrorMessage());
return *this;
}
//получим код ошибки
int ExceptionBase::getErrorCode()
{
return errorCode;
}
//получим текст сообщения
const wchar_t* ExceptionBase::getErrorMessage()
{
return errorMessage;
}
//приводя к типу int получаем код ошибки
ExceptionBase::operator int()
{
return errorCode;
}
//приводя к типу wchar_t* получаем строку сообщения
ExceptionBase::operator const wchar_t*()
{
return errorMessage;
}
};

Вот такой код получился. Его можно использовать как базовый класс в иерархии, но мы не будем усложнять.А лучше посмотрим как его следует использовать.
//гдето в коде
ExceptionBase err(GETDISPLAYMODEERROR,L"Не могу определить параметры дисплея");
throw err;

 

И дисплей тоже  может не определяться :). Таким образом мы создали объект и вызвали исключение оператором throw.

А так будет выглядеть блок try
try
{
...

         }
//ловим исключения, и выводим сообщения об ошибках
catch(ExceptionBase err)
{
MessageBox(NULL, (const wchar_t*)err, L"Ошибка", MB_ICONERROR);
}
catch(...)
{
MessageBox(NULL, L"Неизвестная ошибка", L"Ошибка", MB_ICONERROR);
}

На этом статью заканчиваю. Надеюсь, эта информация была вам интересна.
C уважением, Андрей.

[к содержанию] [другие статьи Тимонина Андрея]

подробнее

Creating game on fle game engine - Simple game / Создание игры на fle game engine - Simple game

Урок # 16 - simple game 3d



read paper in english

На предыдущих страницах урока 1 simple game мы подробно ознакомились со всеми вопросами, которые могут возникнуть при создании самой минимально необходимой функциональности, которая присутствует в любой игре: использование спрайтов, игровых объектов, создание игровой сцены (уровня, комнаты), управление перемещением, системы координат экранная и векторная, загрузка и перемещение (скроллинг) для сцены (уровня, комнаты), декорирование внешнего вида, проверка столкновений (коллизий), простейший AI (искуственный интеллект) управляющий NPC (игровыми объектами, которыми управляет программа, а не игрок), начисление игрового счёта, и наконец воспроизведение в игре звуков и музыки.

Однако все, что мы рассматривали, относилось в основном к созданию 2d игр. Игра также была 2d. Несомненно, что 2d игры создавать проще, поскольку не нужно знать особенности программирования 3d графики и прочих нюансов, касающихся плотной работы с 3d. Кто-то останавливается на 2d играх и дальше уже не двигается. Если же Вам интересно продолжить свой путь и узнать основы на которых строится создание 3d игр - тогда дальнейшее повествование Вас заинтересует.

Creating game on fle game engine - Simple game 3d / Создание игры на fle game engine - Simple game 3d





Содержание

страница 1 - Спрайты

страница 2 - Объекты

страница 3 - Наложение объектов

страница 4 - Код - Настройка параметров Scene Editor fge и написание кода для вывода спрайта шарика в вашем первом игровом приложении

страница 5 - Отображаем прыгающий шарик

страница 6 - Загрузка игровой сцены

страница 7 - Перемещения игровой сцены

страница 8 - Закрываем часть сцены от пустот при помощи черной текстуры с прорезью, ограничиваем перемещение сцены

страница 9 - Реализуем корректное попадание в ямы и около ям - определяем границы спрайтов ям и спрайта прыгаюшего шарика

страница 10 - Проверка столкновений

страница 11 - Игровой счёт, звуки, музыка

урок #2 страница 1 - Создание новых сцен для игры simple game, расширенная версия simple game extended

13. Скроллинг больших локаций

14. использование переменных в игре на c++ directx 9c

15. Мульти анимация







Чем же так отличается 2d от 3d, что его гораздо сложнее программировать ?

Ответ прост: работа с 3d требует гораздо более качественной математической подготовки, нежели знания по 2d. Аспекты 3d достаточно обширны и могут сбить с толку или попросту отпугнуть большим объемом информации, который надо сразу же знать уже на начальном этапе работы.

Конечно Вы можете возразить на это, что есть же готовые движки. Да, они есть, но если знаний по 3d у вас нет, то движок вам ничем не поможет. Движок не сможет сделать игру за Вас. Поэтому знать то, как работает 3d и как его программируют нужно в любом случае. К тому же чужой движок может быть частично или полностью закрыт от изучения его исходников, что таит в себе скрытые подводные камни и может оказаться барьером на пути к вашей цели.

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

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

Что умеет делать это приложение: можно управлять 3d камерой - перемещаться по осям x, y, z. Вращать камеру в любом направлении. Ну и конечно есть код, который отвечает за создание и перемещение кубиков, вывод плоского пола и наконец туман, который реализуется средствами directx 9c ну совсем просто. В качестве бонуса есть проигрывание mp3 музыкальных треков. :)

Туман время от времени меняет свой цвет. Кубики падают, достигнув определенных пределов исчезают и создаются снова. Ну а Вам, нужно будет узнать следующие аспекты, чтобы понять как работает простое 3d приложение:

a) Инициализация для работы с 3d;

b) трансформации 3d объектов: перемещения, вращения, масштаб;

c) Собственно чем отличается управление камерой от управления любыми другими игровыми объектами (кубиками, полом);



На перспективу:

d) Как создать 3d загружаемую сцену, создаваемую в редакторе 3d сцен (SceneEditor);

e) Простейший игровой процесс похожий на simple game, но уже в 3d.



Итак, приложение наше будет называться game craft, а туман я использовал, потому что хотел имитировать некую подводную сцену. Давным давно я начинал изучение directx именно с того, что создавал подводные сцены для будущего проекта Тайны Морских глубин.

Ответ на вопросы a и c можно получить из цикла статей game craft - Game craft - игровая камера в d3d9 - приложении

Теоретические и практические основы создания 3d игр

Новый сон Зеленого.


Предвкушение.

Когда Зеленый погрузился в сон, он увидел странные вещи.

Сначала себя, но почему-то красного, потом себя же - но уже зеленого.

Еще были какие-то непонятные существа на двух ногах. Они говорили.

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

Еще он увидел другое незнакомое существо. Оно стреляло.
Сначала Зелеными шарами, затем почему-то черными.

А потом ... из него вылетел самый большой зеленый шар и превратился
в ... Зеленого.

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

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

И то что кажется одним, на самом деле может таить в себе
совсем другое.

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

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

Мешать.

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

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

Почему ?

Да потому что никогда до конца не знаешь к чему приведет.
В этом вся соль.

Когда ты идешь вперед по заранее заданному плану, ты думаешь:
да, вот будет так. Сейчас одно, затем другое и т. д. и т. п.
Но нет. План есть план, а реальность всегда вносит свои
коррективы.

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

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

И твои мечты постепенно становятся реальностью.
Помогают тебе.

Когда Зеленый был одинок и грустен. Когда у него не было
друзей. Ему было плохо. Но вот все изменилось. Он сам изменился.

На его планете все не так привычно как на Земле. Местные жители
способны пользоваться не только физическими энергиями, но и
нематериальными.

Например силой своей мысли они способны перемещать предметы
и даже перемещаться сами.

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

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

Все происходило лишь силой мысли ...

Холодный ветер подул из окна и он шагнул навстречу другой реальности.
Упал в этот новый мир.

Дверь была открыта. Он вошел в неё и пошел вперед не оглядываясь.

Впереди была неизвестность.

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



     
  Игра: Дорога в Город (freeware)  
  игра Дорога в Город  
  Жанр: автоаркада  
     
  Версия: 18.10.2006  
     
  игра Дорога в Город - заставка  
  игра Дорога в Город - игровой процесс  
  игра Дорога в Город - таблица рекордов  
     
 

Новое время, идет продвижение энергоресурса нового поколения КОР, Вы - в центре событий, выступаете в роли Андреаса - сборщика и распространителя КОРа. Вам придется собирать ресурс - АЙТ, накапливать средства и выполнять различные задания: скоростная езда с лавированием в потоке машин со сбором айта на время, перевозка сотрудников лабораторий, поиск секретных лабораторий противника, покупка технологий и многое другое.

Основа игры - движение на автомобиле. (На скриншоте желтая машина - игрок). Но не все так просто - нужно следить за уровнем повреждений и запасом топлива, вовремя ремонтироваться и заправляться. На все это нужны средства - КОР-КРЕДИТЫ. АЙТ, который Вы будете собирать и сдавать и принесет Вам искомые средства. Будте осторожны на дороге, не сбивайте пешеходов!

 
     
 

В игре 10 игровых миссий. Суть игры: двигайтесь вперед быстро или медленно, лавируйте уворачиваясь от препятствий или вовремя останавливайтесь - возможна резкая остановка (клавиша - СТРЕЛКА ВВЕРХ).

Действие развивается по нарастающей - сначала простой сбор АЙТА и сдача в лаборатории с получением КОР-КРЕДИТОВ, затем скоростной сбор АЙТА (на время), перевозка сотрудников (СОИСКАТЕЛЕЙ) и многое другое. По ходу игры Ваш автомобиль постепенно улучшает свои характеристики в плане сбора АЙТА и увеличения максимальной скорости движения...

 
     
 

Дистрибутив игры содержит встроенную справочную систему, где можно подробно узнать о том, как играть. В комплекте несколько музыкальных саундтреков. Для проигрывания имеется аудио-плеер (автор -Оливье Лаписку). Музыкальные файлы можно также прослушивать через известный аудиоплеер WinAmp (он поддерживает формат IT)..

Для запуска плеера используется специальный пункт меню программы: Options > RunModPlug

 
     
  СИСТЕМНЫЕ ТРЕБОВАНИЯ: DirectX 7 и выше; Pentium 100MHz и выше; 32Mb RAM; 2Mb Video RAM; DirectX-совместимая звуковая карта, 21 Mb пространства на жестком диске.  
     
 

скачать игру - самораспаковывающийся архив 8,7 Mb

Скачиваний : 4

скачать игру - самораспаковывающийся архив 8,7 Mb

пароль к архиву: bj4r-vn35-guhj-gv85-4jfg

 
     
 
Скачиваний : 3
открытый полный исходный код игры - архив WinRar 3.3 - 237Kb
 
     
  игра Дорога в Город - описание игры  
  игра Дорога в Город - Mod Plug Player  
     
 

Открытый проект Дорога в Город (Road To City)

===============================================
Открытый код игры Дорога В Город (версия 18.10.2006)
===============================================
автор: Синицин А.С.
дата публикации: 30.03.2007

Введение

Вашему вниманию предлагается исходный код игры на Delphi 7 с использованием библиотек DelphiX 1.07 (by Jaro Benes) или UnDelphiX под Delphi 7. О том где взять эти библиотеки см. ниже!

Игра создавалась около года, это первый игровой (пока некоммерческий) проект автора.
Для компиляции требуется библиотека DelphiX или UnDelphiX c кодом, адаптированным для среды Delphi7.
Исходный код игры также написан в Delphi7, в других версиях не тестировалось,
так что будьте готовы к модификациям кода, если используете другую версию
Delphi.

Особенности примера

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

- пример создания 2D-игры на Delphi в DelphiX для DirectX7;

- игра содержит 10 уровней.

- показано движение спрайтов, анимация, скроллинг экрана (сверху-вниз), проверка столкновений для эффекта аварий, сбора ресурсов, остановки возле зданий;

- воспроизведение звуков; для музыки используется внешний плеер ModPlug Player;

- при помощи инструментов редактирования DelphiX можно посмотреть графическую реализацию графики и анимации - содержимое файлов *.dxg;

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

Планы развития проекта:

- Создание редактора карт;

- Разумное поведение других авто на дороге;

- Миди-музыка;

- Реализация начальной заставки, игрового меню;

- Развитие игры;

- Учет времени shareware-версии.

 
     
 

Путеводитель по исходному коду

Основной код приложения реализован в классе TMainForm, остальные типы - производные от TImageSprite и служат для управления игровыми спрайтами - в игре они статичные и анимированные. Тип TGamePaused служит для вывода картинки "Game Paused" во время паузы в игре (по F3); Тип TScrollBackground представляет прокручиваемый фон (трава). Дорога выводится динамически. Класс игрока - TPlayerSprite.

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

{методы design time} - при помещении новых компонентов DelphiX на форму приложения добавляется соотвествующий код (автоматически). Однако для нормальной работы компонентов во время runtime необходимо правильно их настроить. Главный компонент вашего приложения, занимающий всю площадь формы - это TDXDraw. Он отвечает за отрисовку графики и инкапсулирует соотвествующие методы DirectX 7. Что значит инкапсулирует? Это значит, что в его составе есть соотвествующие описания методов, а мы их вызываем и используем для своих целей. Некоторые из них вызываются автоматически за счет компонентной природы (TDXDraw происходит от TComponent).

Для любой игры на DelphiX Вам потребуются следующие компоненты на форме -

TDXDraw, TDXTimer, TDXSpriteEngine, TDXImageList, TDXInput, TDXSound, TDXWaveList и , возможно, некоторые другие (которые Вы найдете в обновленных библиотеках DelphiX).

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

TDXTimer - используется для периодического вызова определенных методов, главным образом метода TDXDraw.Flip без которого просто ничего не появится на экране. TDXDraw.Flip вызывает показ сформированного в буферной памяти кадра игры в предоставленной ему области (окне приложения или на всем экране - в полноэкранном режиме). Установите необходимый интервал времени (свойство Interval), лучше просто - 0 (самый быстрый интервал !)

TDXSpriteEngine - отвечает за анимацию, т.е. последовательный вызов метода Move для каждого из принадлежащих ему спрайтов. Свойство TDXSpriteEngine.DXDraw должно содержать ссылку на компонент TDXDraw, иначе не будет анимации!

TDXImageList - загрузка списка изображений, их отрисовка. Для свойства DXDraw также укажите ссылку на TDXDraw иначе не будет отрисовки или даже ошибки будут!!

TDXInput - ввод от клавиатуры, мышки, джойстика и других устройств ввода. Здесь ничего указывать не требуется, можете только изменить значения клавиш для виртуальных IsButton1-32. Это делается двойным щелчком по компоненту.

TDXSound, TDXWaveList - используются для вывода звуков. TDXSound - интерфейс IDirectSound7, а TDXWaveList, то же, что и TDXImageList, но для списка звуков. Следовательно свойство TDXImageList.DXSound должно содержать ссылку на TDXSound.

{методы runtime} - рассмотрим что происходит при исполнении нашего приложения.

методы TMainForm.FormCreate, FormDestroy, FormClose содержат весь код инициализации, вызываемый при создании/уничтожении формы, закрытии окна приложения. Посмотрев код внутри этих методов Вы увидите что примерно требуется делать при создании/уничтожении окна формы вашей игры.

После того, как форма успешно создана/уничтожена происходит дальнейшая работа/завершение работы приложения. Обратите внимание! Я не случайно указал эти методы в паре Создание/Разрушение. Всегда создавая новый объект сразу же прописывайте и соответствующий код разрушения (Destroy, к-ый вызывается ч/з Free). Большинство ошибок начинающих писателей игр связано именно с тем, что забываем создать/уничтожить требуемые объекты!!!

Итак, если приложение все-таки заработало, что происходит дальше? Т.к. у нас на форме установлен TDXTimer, то дальше всё основывается на периодически вызываемых методах внутри метода TDXTimer.OnTimer

Загляните внутрь него и сами всё увидите!!!

Ладно, вообщем в кратце этого достаточно. Остальное я думаю, сможете постигнуть сами! Если Вы настоящие писатели игр или желаете стать таковыми. В этом Вам помогут всевозможные Help'ы по DelphiX и желательно раздобыть по DirectX SDK!!!, исходники и много много терпения и упорства!

 
     
 

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

http://www.torry.ru/pages.php?id=169

по этим ссылкам вы найдете стартовые странички, с которых можно скачать последние версии компонентов DelphiX и UnDelphiX.

 
     
 

Некоторые замечания по поводу работы с DelphiX (и UnDelphiX, далее просто DelphiX, подразумевая все последние обновления и модификации).

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

Однако вот Вам первое полезное замечание - Если Вы хотите изменить содержимое одного из файлов данных с графикой или звуками - *.dxg или *.dxw поступайте следующим образом:

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

- щелкните по нему правой кнопкой мыши и выберите Open для открытия файла данных, найдите и откройте требуемый файл;

- произведите необходимые изменения файла - т.е. загрузку/удаление новых пунктов/файлов в список;

- сохраните изменения в файл правым щелчком по компоненту DXImageList или DXSoundList на форме и выбором Save, указав требуемые имя и путь в соответствующем окне диалога;

- закройте проект вашего приложения БЕЗ СОХРАНЕНИЯ ИЗМЕНЕНИЙ!!! Это очень важно! В противном случае будут наблюдаться некие негативные последствия: рост объема исполнимого файла и "торможение" среды Delphi при работе с проектом.

Почему?

Потому что, если сделать это, то файл данных остается внутри соответствующего компонента - DXImageList или DXSoundList и тем самым увеличивает объем исполнимого файла, кроме того "затормаживается работа" среды Delphi при открытии такого проекта, что будет вызывать у Вас искреннее удивление!

Вместо этого сохраняйте содержимое измененного файла *.dxg или *.dxw правым щелчком по компоненту DXImageList или DXSoundList и выбором Save, а измененный проект закрывайте БЕЗ ИЗМЕНЕНИЙ!!! (т.е. не сохраняя).

Таким образом, Вы оставите компонент пустым, это не будет приводить к указанным выше последствиям (росту исполнимого файла и "торможению" Delphi при открытии проекта).

Обновленные версии DelphiX к тому же содержат специальные инструменты (DXGEdit, DXWEdit) для изменения содержимого файлов *.dxg или *.dxw, поэтому также можете использовать и их!

Загрузка файлов данных *.dxg или *.dxw в соответствующие компоненты будет производиться Вами на стадии runtime (т.е. во время нормальной работы приложения). Как это делается показано в исходном коде!

Желаю Вам приятной работы по освоению DelphiX !!!

 
     
 

Как работать с исходным кодом?
===============================================

Внимание!!! Здесь описано как использовать исходный код игры с библиотеками
UnDelphiX и DelphiX 1.07a (by Jaro Benes).

Для использования кода и нормальной компиляции необходима установка
одной из этих библиотек!!!

Содержание -

Как заставить код работать под DelphiX (by Jaro Benes).
Как заставить код работать под UnDelphiX;


***********************************************
Как заставить код работать под DelphiX (by Jaro Benes).
===============================================

- установить библиотеку;

- в опциях среды Delphi указать путь к DelphiX\Source:
Tools -> Environment Options -> Library -> Library path -> ... -> используя диалог найти Delphix\Source ->
Add
Теперь в проекте ссылку на DelphiX\Source можно не указывать.

- открыть проект Road2City.dpr
попробовать откомпилировать.

> Если сообщения об отсутствии *.dcu, то
добавить в путь поиска проекта ссылку на Source DelphiX

> Сообщение об отсутствии DirectDraw.dcu
в разделе interface секции uses вместо DirectDraw задать DirectX

uses
..., DirectX;


компилируем.


Как заставить код работать под UnDelphiX;
===============================================

Установить библиотеку -

пример установки UnDelphiX:

запустить соответствующий вашей версии Delphi файл с расширением dpk -
например для Delphi 7 это файл (из папки Source) - DelphiX_for7.dpk

нажать кнопки Compile, затем Install

сохранить изменения в проект.

в пути поиска используемого проекта или среды Delphi добавить ссылки на папку Source
с кодом DelphiX -
Project > Options > Directories/Conditionals > ... > ... Add > [DelphiXpath]\Source > OK
, где [DelphiXpath] - путь к папке, куда вы скопировали библиотеку DelphiX

библиотека установлена!

=================================================

Теперь как работать с исходным кодом проекта Road2City :


- Запускаем файл проекта - двойным щелчком по Road2City.dpr

получаем сообщение об ошибке -
Error reading SpriteEngine.Items: Property Items does not exist.
Ignore the error and continue? ...

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

Метод устранения - нажимаем кнопочку Ignore и ничего страшного не произойдет!


------------------------------
Замечания:

22/03/2007
Как настроить среду Delphi, чтобы при использовании
комбинации Ctrl + LMouseButton (команда Find Declaration контекстного меню редактора кода)
осуществлялся переход на описания методов и типов, по которым производился щелчек?

30/03/2007

ответ:
Если на названии какого-либо типа или модуля не срабатывает команда Find Declaration,
то в этом модуле имеются ошибки (Errors), предупреждения (Warnings).

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

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



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


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