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


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Today
18 февраля 2019 5:10
Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
Написание приложения DirectX9c + MFC в среде MSVS 2005

megainformatic - Создание компьютерных игр на основе DirectX в среде Delphi 6, 7

megainformatic - Создание компьютерных игр на основе DirectX в среде Delphi 6, 7 - Почему избраны DX8 и Delphi ?

megainformatic - Основы IDirectMusic8 в среде Delphi6-7

megainformatic - Основы DirectInput8 в среде Delphi 7

megainformatic - Основы DirectSound8 в среде Delphi6-7

megainformatic - Плагин для 3DS MAX из DX9 SDK

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2)

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 2

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 3

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 4

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 5

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 6

Система управления сайтом - megainformatic cms e-shop

Система управления сайтом - megainformatic cms e-shop

Система управления сайтом - megainformatic cms e-shop

megainformatic - Уроки 3ds max - Введение в 3ds max

megainformatic - ГАЛЕРЕЯ 3D-моделей

megainformatic - СОЗДАНИЕ МАКЕТА ПОМЕЩЕНИЯ

megainformatic - Создание макета помещения - этап 2

megainformatic - МОДЕЛИРОВАНИЕ НА УРОВНЕ МНОГОУГОЛЬНИКОВ

megainformatic - СОЗДАНИЕ ПРЕДМЕТОВ ОБСТАНОВКИ ПОМЕЩЕНИЯ

megainformatic - Моделирование обстановки помещения

megainformatic - Создание модели автомобиля

megainformatic - Создание текстурной развертки для модели автомобиля

megainformatic - Создание анимации вращающихся колес автомобиля

megainformatic - игра Нечто: Необъяснимое и в плену желаний

megainformatic - Основы 3D-анимации, экспорт скелетной анимации

megainformatic - Подготовка модели к использованию скелетной анимации

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 cms e-shop

Позволит вам создать сайт + электронный магазин, с подключением к платежным системам WebMoney, Robokassa, Единый кошелек, Qiwi, а также возможностью принимать yandex.деньги, оплату по квитаниции и банковской карте.

Также включает в себя Систему рассылки e-mailer и систему партнерских программ e-pro. Система компактна, надежна и проверена временем. Сайт megainformatic.ru работает на этой же системе, так что наблюдая работу сайта megainformatic.ru Вы можете судить о возможностях megainformatic cms e-shop

 
     
 
megainformatic cms e-shop
>Стоимость: 1000 руб.


 
     
 

Демонстрация работы системы - megainformatic.ru/eshop

Документация по работе системы - megainformatic.ru/eshop

 
     
 

ОСОБЕННОСТИ СИСТЕМЫ

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

- Написана на языке php. Для работы сайта использует базы данных mysql и файлы.

- Подробное документирование возможностей;

- Прозрачность использования и открытый исходный код;

 
     
 

megainformatic cms e-shop - это -

- простой код для быстрого создания работающего сайта и интернет-магазина 2 в 1;

- поддержка различных шаблонов;

- поддержка различных модулей;

- открытость для дополнений и расширений;

- готовые скрипты подключения к платежным системам;

- встроенные модули: e-pro, случайная новость, система рассылки и импорта списков пользователей, счётчик, карта сайта, поиск по сайту, административный раздел по управлению системой, сменные шаблоны;

 
     
 

Как устанавливается система ?

1) Выгружаете на хостинг все файлы из дистрибутива;

2) Создаете на хостинге базу данных my sql с содержимым из дистрибутива;

3) Редактируете файл конфигурации;

4) Система готова к работе.

 
     
 

Как работает система ?

1) Вы добавляете на сайт нужные страницы с описанием товаров и статьи;

2) Добавляете на сайт нужные товары;

3) Настраиваете приём оплаты;

4) Ваш сайт готов к продажам товаров.

 
     
     
     
 

Приобретая megainformatic cms e-shop Вы получаете:

- Полноценную CMS для создания и управления вашим сайтом.

- Система позволит вам построить информационный сайт + интернет-магазин и запустить его в работу.

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

 
     
 

 

Спасибо за внимание и желаю Вам успехов !!!

 
     
подробнее

Как работают антивирусы ?

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

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

Попробуем всё-таки разобраться как можно подойти к созданию антивируса.

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

Основные типы вирусов

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

        - файловые вирусы делятся по механизму заражения: паразитирующие, которые добавляют себя в исполнимый файл и перезаписывающие, которые невосстановимо портят зараженный файл, "спутники", которые идут отдельным файлом.

- по поражаемым операционным системам и платформам - DOS, Windows, Unix, Linux;

- технологии, применяемые вирусом (полиморфные, стеллс, руткит);

- по языку, на котором написан вирус ( ассемблер, высокоуровневый язык программирования, скриптовый язык );

- по дополнительной вредоносной функциональности ( бэкдор, кейлоггер, шпион, ботнет);

Как распространяются вирусы ?

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

Вирусом или его носителем могут быть не только программы, содержащие машинный код, но и любая информация, содержащая автоматически исполняемые команды - например, пакетные файлы и документы MS Word, Excel, содержащие макросы. Кроме того, для проникновения на компьютер вирус может использовать уязвимости в популярном программном обеспечении ( например, Adobe Flash, Internet Explorer, Outlook ). При этом распространители внедряют его в обычные данные (картинки, тексты и т. д.) вместе с эксплоитом, использующим уязвимость.

Каналы распространения компьютерных вирусов

ДИСКЕТЫ. Самый распространенный канал заражения в 1980 - 1990-е годы. Сейчас практически отсутствует из-за появления более распространенных и эффективных каналов и отсутствия флоппи-дисководов на многих современных компьютерах.

ФЛЕШ-НАКОПИТЕЛИ. В настоящее время USB-флешки заменяют дискеты и повторяют их судьбу - большое количество вирусов распространяется через съёмные накопители, включая цифровые фотоаппараты, цифровые видеокамеры, портативные цифровые плееры, а с 2000-х годов всё большую роль играют и мобильные телефоны, особенно смартфоны (появились мобильные вирусы). Использование этого канала ранее было преимущественно обусловлено возможностью создания на накопителе специального файла autorun.inf, в котором можно указать программу, запускаемую Проводником Windows при открытии такого накопителя. В Windows 7 возможность автозапуска файлов с переносных носителей была отключена.

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

СИСТЕМЫ ОБМЕНА МНГНОВЕННЫМИ СООБЩЕНИЯМИ. Здесь также распространена рассылка ссылок на якобы фото, музыку, либо программы, в действительности являющиеся вирусами, по ICQ и через другие программы мнгновенного обмена сообщениями.

ВЕБ-СТРАНИЦЫ. Возможно также заражение через страницы Интернета, ввиду наличия на страницах всемирной паутины различного "активного" содержимого: скриптов javascript, flash, Active-X компонентов.

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

ИНТЕРНЕТ и ЛОКАЛЬНЫЕ СЕТИ (черви). Черви - вид вирусов, которые проникают на компьютер-жертву без участия пользователя. Черви используют так называемые "дыры" (уязвимости) в программном обеспечении операционных систем, чтобы проникнуть на компьютер. Уязвимости - это ошибки и недоработки в программном обеспечении, которые позволяют удаленно загрузить и выполнить машинный код, в результате чего вирус-червь попадает в операционную систему и, как правило, начинает действия по заражению других компьютеров через локальную сеть или Интернет. Злоумышленники используют зараженные компьютеры для рассылки спама или для DDos-атак.

Противодействие обнаружению

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

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

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

Профилактика и лечение

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

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

2. Не запускать незнакомые программы из сомнительных источников.

3. Стараться блокировать возможность несанкционированного изменения системных файлов.

4. Отключать потенциально опасный функционал системы (например, autorun-носителей в MS Windows, сокрытие файлов, их расширений и пр.).

5. Не заходить на подозрительные сайты, обращать внимание на адрес в адресной строке обозревателя.

6. Пользоваться только доверенными дистрибутивами.

7. Постоянно делать резервные копии важных данных и иметь образ системы со всеми настройками для быстрого развёртывания.

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

Итак, Мы познакомились с основными типами компьютерных вирусов и методам профилактики, теперь рассмотрим какие бывают антивирусные программы.

Классификация антивирусных программ

По используемым технологиям антивирусной защиты:

Классические антивирусные продукты (продукты, применяющие только сигнатурный метод детектирования)

Продукты проактивной антивирусной защиты (продукты, применяющие только проактивные технологии антивирусной защиты);

Комбинированные продукты (продукты, применяющие как классические, сигнатурные методы защиты, так и проактивные)



По функционалу продуктов:

Антивирусные продукты (продукты, обеспечивающие только антивирусную защиту)

Комбинированные продукты (продукты, обеспечивающие не только защиту от вредоносных программ, но и фильтрацию спама, шифрование и резервное копирование данных и другие функции)



По целевым платформам:

Антивирусные продукты для ОС семейства Windows

Антивирусные продукты для ОС семейства *NIX (к данному семейству относятся ОС BSD, Linux, Mac OS X и др.)

Антивирусные продукты для мобильных платформ (Windows Mobile, Symbian, iOS, BlackBerry, Android, Windows Phone 7 и др.)



Антивирусные продукты для корпоративных пользователей можно также классифицировать по объектам защиты:

Антивирусные продукты для защиты рабочих станций

Антивирусные продукты для защиты файловых и терминальных серверов

Антивирусные продукты для защиты почтовых и Интернет-шлюзов

Антивирусные продукты для защиты серверов виртуализации



Лжеантивирусы

В 2009 началось активное распространение т.н. лжеантивирусов — программного обеспечения, не являющегося антивирусным (то есть не имеющего реального функционала для противодействия вредоносным программам), но выдающим себя за таковое. По сути, лжеантивирусы могут являться как программами для обмана пользователей и получения прибыли в виде платежей за «лечение системы от вирусов», так и обычным вредоносным программным обеспечением. В настоящий момент это распространение приостановлено.

Работа антивируса

Говоря о системах Майкрософт, следует знать, что обычно антивирус действует по схеме:

поиск в базе данных антивирусного ПО сигнатур вирусов

если найден инфицированный код в памяти (оперативной и/или постоянной), запускается процесс карантина, и процесс блокируется

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

Базы антивирусов

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

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

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

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

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

ПОДВОДИМ ИТОГ

Написать свой собственный антивирус - сложно, по многим причинам. Кроме того, у нового антивируса не будет своей собственной антивирусной базы - её надо будет составлять, а на это потребуется время.

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

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

Удачи Вам !

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

далее - Разработка программ на c++, в том числе антивирусов

подробнее

     
 
Урок 4 Построение класса приложения
 
О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1
 
Далее у читателя подразумевается наличие базовых знаний языка Delphi.
 
[назад] [страница 2] [далее] [к содержанию]
 
Познакомившись с кодом класса CD3DApplication описанным в модуле D3DApp.pas библиотеки delphi directx 8.1 мы переходим к рассмотрению класса TD3DGameApp являющегося базовым классом D3D-приложения, используемым в игре "Ну, Погоди!". По большому счету ничего нового о функционировании D3D-приложения Вы здесь не узнаете, однако в качестве примера того, как строится конкретный базовый класс на примере конкретной законченной игры дальнейшее повествование будет Вам все же небезынтиресно.
 

Начнём с того, что модуль D3DApp.pas и CD3DApplication в игре "Ну, Погоди!" не применяется вообще. Вместо этого был создан самостоятельный базовый класс ориентированный именно на потребности конкретной игры, а не на те особенности, которые необходимо было рассмотреть в качестве примера во всех приложениях из DirectX SDK. Иными словами назначение класса CD3DApplication именно демонстративное.

Класс TD3DGameApp, который мы рассмотрим ниже, ориентирован на определенную конкретику, связанную с особенностями проекта игры "Ну, Погоди!"

 
Функционирование приложения строится на тех же принципах, которые мы рассматривали начиная с 1 урока.
 

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

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

 

Что потребуется при написании собственной игры?

Сначала я перечислю то, что потребуется обязательно при реализации абсолютно любой игры -

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

Остальные поля и методы, дополнительные классы и классы необходимых игровых объектов зависят от конкретной специфики Вашей игры, а также фантазии и опыта разработки.

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

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

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

 
Теперь рассмотрим конкретные примеры того, что имеет место в коде игры "Ну, Погоди!". Замечу, что всё описанное ни в коем случае не является и не должно являться для Вас догмой. Поработав с примером и над созданием собственной игры Вы обязательно уясните для себя что-то свое и будете делать то, что Вам потребуется по-своему, а не так как описано здесь один в один. Другими словами по мере приобретения Вами опыта Вы сами решите что и как должно происходить в Вашем коде.
 

Опустим описание реализации кода методов TD3DGameApp.Create, Create_ и Destroy, так как оно за небольшими исключениями полностью похоже на то, что мы рассматривали на протяжении предыдущих 3х уроков.

Рассмотрим метод TD3DGameApp.OneTimeSceneInit

Внутри данного метода я обычно создаю объекты DirectInput и DirectSound, выполняю первоначальную инициализацию D3D-приложения, вызываю функцию рандомизации рандомизатора и перевожу приложение в состояние начальной инициализации ресурсов.

 

Далее действие происходит уже внутри FrameMove и Render. В зависимости от состояния приложения происходит загрузка необходимого минимума ресурсов, начинается опрос действий со стороны пользователя посредством DirectInput. Реакция на события выбора меню TMainMenu реализована вызовом обработчиков пунктов данных меню.

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

 
Как происходит осуществление игрового процесса? Основные составляющие его это - анимация, вывод графики и рассчет игровой логики. Пользователь реагирует на те или иные игровые ситуации выполняя игровые действия, в соответствии с этим меняется и игровой процесс.
 

Приложение построено таким образом, что после выполнения OneTimeSceneInit запускается непрерывный процесс выполнения метода TMainForm.ApplicationEventsIdle. Этот метод вызывается всегда, когда приложение находится в состоянии бездействия, а поскольку кроме данного метода приложение больше не выполняет никакую работу (помимо отрисовки и рассчетов игровой логики, выполняемых именно внутри данного метода), то всё процессорное время выделенное приложению уходит именно на выполнение данного метода.

Внутри данного метода исполняется g_d3dApp.Render3DEnvironment; в котором и реализовано выполнение упомянутых выше методов FrameMove и Render.

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

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

После успешного выполнения данной операции состояние переходит в asInit. Это необходимо, чтобы обеспечить лишь однократную загрузку текстур (вспомним, что метод Render3DEnvironment вызывается периодически).

В состоянии asInit происходит лишь смена состояния на новое asEndInit, которое сразу же переключит приложение в состояние готовности - asReady

Такие сложности связаны именно с периодической природой Render3DEnvironment, поэтому ОБЯЗАТЕЛЬНО! учитывайте этот момент, иначе будете получать всевозможные ошибки времени выполнения.

В состоянии asReady начинается ожидание действий со стороны пользователя (UpdateInput).

Назначение клавиш каждому из действий происходит в процедуре DefineDefaultKeys.

Обработка этих действий происходит в режимах готовности (asReady) и игры (asGame).

Режим паузы в ответ на действие GamePause переключает индикатор паузы m_bPaused на противоположное значение. В коде формирования игровой ситуации FrameMoveGameSituation учитывается состояние данного индикатора.

Также проверяется нажатие клавишы выхода из игры - действие GameExit.

Нажатие нарисованных на игровой панели клавиш при помощи мыши обрабатывается здесь следующим образом. Если выполняется действие PressButton, то определяются в каком месте находится при этом указатель мыши. Попадание его в определенную область вызывает срабатывание нужной кнопки на игровой панели. GameButtonDownUp применяется для корректной отработки нажатий/отпусканий клавиш игровой панели. В момент отпускания клавиши игровой панели срабатывает привязанное к ней действие. Кроме того, красным клавишам управления волком сопоставлены действия от клавиатуры LeftUpCatch, LeftDownCatch, RightUpCatch, RightDownCatch, т. к. по мере нарастания скорости игры требуется более высокая реакция игрока.

 

 

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

gmRestart, gmGameA, gmGameB, gmTimer, gmSetAlarm, gmEndSetAlarm, gmStartGameOver, gmGameOver, gmStartLoadWinMultic, gmShowWinText, gmWinMultic, gmShowGameAMaxScore,
gmShowGameBMaxScore

 

Перечислим их назначение.

gmRestart - этот режим выполняет перезапуск игры независимо от текущего режима и переход в состояние готовности. Этот режим эмулирует поведение электронной игры "Ну, Погоди!" сразу же после ее включения.

gmGameA - запускает игру А, при этом яйца скатываются одновременно только с 3х лотков, прервать игру можно путем рестарта, паузы или закрытия приложения

gmGameB - аналогично, но яйца катятся с 4х лотков

gmTimer - эмуляция поведения электронной игры "Ну, Погоди!" в режиме отсчета времени. Отображается реальное время системных часов аналогичное тому, что имеется в правом нижнем углу экрана Windwows (в трее).

gmSetAlarm, gmEndSetAlarm - эмуляция режима установки времени подачи сигнала будильника, при этом если игра запущена, то в режимах "игра А", "игра Б" или отсчет времени в заданное время будет подан сигнал будильника

gmStartGameOver, gmGameOver - проигрыш, игра находится в состоянии ожидания дальнейших действий пользователя

gmStartLoadWinMultic, gmShowWinText, gmWinMultic - победа! игрок набрал трижды 999 очков. при этом будет показан поздравительный текст, а затем небольшой анимированный мультфильм с участием волка, зайца и других персонажей

gmShowGameAMaxScore, gmShowGameBMaxScore - режим показа максимального набранного в данном режиме количества очков - срабатывает в момент нажатия и удержания клавиш "игра А" или "игра Б" на игровой панели

 

Вам наверное интересно как осуществляется отображение графики в игре?

Начнём с того, что заглянем внутрь методов LoadGameTextures, RestoreGameTextures, InvalidateGameTextures, FreeGameTextures. В этих методах показано, как имена текстур из текстового файла загружаются сначала в список имен, а затем по этому списку производится загрузка и построение списка текстур (объектов класса TD3DImage2D). Из списка имен также считываются параметры размещения и масштабирования изображений.

В режиме игры А или Б сначала происходит вызов FrameMoveGameSituation;

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

1) Если индикатор паузы переключен в True, то DXTimer сбрасывается, а метод завершает работу;

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

3) Определяется текущее положение волка

4) Генерируются новые яйца на лотках, анимируется их качение по лоткам, анимируется выглядывание зайца из окошка, постепенно наращивается темп игры

5) Проверяется и анимируется разбивание яиц

6) Осуществляется мерцание и сброс (если требуется) штрафных очков

Вывод графики происходит внутри метода Render также в зависимости от состояния приложения.

DrawGameView > DrawGameScene осуществляет собственно рисование в зависимости от режима игры.

Внутри DrawGameScene вы увидите, что проблема вывода каждого игрового изображения сводится к вызову метода DrawGameElement с указанием в качестве параметра индекса отображаемого элемента (игровой панели, волка, зайца, яйца и т.д.). Лишь для игрового счета, счета штрафных очков и показаний времени используются отдельные методы, но и они построены на использовании метода DrawGameElement

В реализации метода DrawGameElement нет ничего сложного. В зависимости от индекса вызывается нужный объект TD3DImage2D с вызовом его метода Draw2. Параметры вывода (координаты и масштабные коэффициенты извлекаются из параметров объекта PGamePanelElement).

 

Вот собственно и весь вывод графики.

Вывод звука осуществляется еще проще. Достаточно Вам посмотреть методы

function CreateSoundObjects(h_Wnd: HWND): HRESULT;
procedure DestroySoundObjects;
function LoadSoundList: HResult;
procedure FreeSoundList;
procedure PlaySound(Index: Integer);
procedure PlayEggRun;

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

 
Конечно простота реализации данной игры обусловлена в большой степени ее особенностями. Большинство объектов статичны, анимация сводится лишь к скрытию одних и показу других картинок. Логика игры также достаточно проста.
 
Возможно чуть более сложным Вам покажется использование 2D-анимации, которая применяется в призовом мультфильме. Этот процесс также основан на использовании класса TD3DImage2D. Более подробно о нём мы поговорим в 7 уроке.
 
Вот кажется и всё вкратце, о создании базового класса игрового приложения, который применялся в игре "Ну, Погоди!". Если есть вопросы - милости просим на форум или пишите на мой e-mail.
 
Но думаю, что особых трудностей не будет. Нужно лишь поэкспериментировать над созданием собственного, пусть пока небольшого, но уже полноценного игрового проекта. Удачи Вам!!!
 
[назад] [страница 2] [далее] [к содержанию]
 
     
     
     
     
подробнее

 

Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008

 
     
  Урок 1 Основные операторы языка C++ (часть 2)  
     
 

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

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

 
     
  [назад] [далее] [к содержанию]  
     
  Мы рассматриваем основные конструкции языка C++ на примере работы в Microsoft Visual Studio 2008  
     
  В предыдущем уроке мы создали небольшой калькулятор. Этот урок позволил нам бегло познакомиться с некоторыми из конструкций языка C++ и некоторыми функциями.  
     
 

в этом уроке нам осталось рассмотреть

- операторы объявления переменных;

- операторы обработки исключений;

 
     
 

- операторы объявления переменных;

объявление (declaration) переменной сообщает компилятору, что элемент программы или имя существуют. Определения (definitions) определяют какой код или данные описывает имя. Имя должно быть объявлено до того, как оно будет использовано!

Примеры объявлений

// Declare and define int variables i and j. объявление переменных и присвоение начального значения
int i;
int j = 10;

// Declare enumeration suits. объявление перечисления
enum suits { Spades = 1, Clubs, Hearts, Diamonds };

// Declare class CheckBox. объявление класса
class CheckBox : public Control
{
public:
Boolean IsChecked();
virtual int ChangeState() = 0;
};

 
     
 

Объявление (declaration) привносит в программу одно или более имен. Объявления могут производиться в программе многократно. Поэтому классы (classes), структуры (structures), перечисляемые типы (enumerated types) и другие определяемые пользователем типы могут быть объявлены в каждом требующем компиляции модуле. Ограничением такого множественного объявления является необходимость полной идентичности всех объявлений. Объявления могут служить также в качестве определений (definitions) исключая следующее:

- это прототип функции (объявление функции без ее реализации (тела));

- содержит спецификатор extern, но не имеет инициализатора (объекты и переменные) или тела функции (функции). Это означает, что определение не нужно в текущем модуле и применяет к имени внешнее связывание;

- это статичный член данных внутри объявления класса; Поскольку статичные члены данных класса представляют самостоятельные переменные, используемые совместно всеми объектами класса, они должны быть определены и инициализированы внутри объявления класса.

- это объявление имени класса без последующего определения;

- это оператор typedef;

Примеры объявлений, которые не имеют последующих определений

extern int i;
char *strchr( const char *Str, const char Target );

 
     
 

Несколько слов об определениях (definitions)

Определения являются уникальными описаниями (спецификациями) объектов или переменных, функций, классов или перечислителей (enumerator). Поскольку определения должны быть уникальными, программа может содержать только одно определение для данного программного элемента.

 
     
 

Соответствие между объявлениями и определениями сводятся к одному. Существуют два случая в которых программный элемент может быть объявлен и не определен:

- функция объявлена, но ни разу не вызывается или не используется выражений требующих адреса данной функции;

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

Вот пример демонстрирующий указанный случай:

// definitions.cpp
class WindowCounter; // Forward reference; no definition

class Window
{
// Definition of WindowCounter not required
static WindowCounter windowCounter;
};

int main()
{
}

 
     
  Также советую Вам прочесть раздел документации MSVS 2008 посвященный авто-создаваемым и статичным объектам - MSVS 2008 Documentation (далее просто Help) - Development Tools and Languages > Visual Studio > Visual C++ > Reference > C/C++ Languages > C++ Language Reference > Statements > Declaration Statements  
     
 

- операторы обработки исключений;

информацию по ним вы найдете в Help - Development Tools and Languages > Visual Studio > Visual C++ > Reference > C/C++ Languages > C++ Language Reference > Statements > Exception Handling

Тема достаточно обширна, поэтому я сразу отправляю Вас к первоисточнику. В кратце могу лишь отметить, что исключения являются ошибками времени выполнения, связанными с делением на ноль, защитой памяти (Access Violation) и т. п.

Базовыми операторами для этих целей являются try, catch и throw

 
     
  try {
// code that could throw an exception
}
[ catch (exception-declaration) {
// code that executes when exception-declaration is thrown
// in the try block
}
[catch (exception-declaration) {
// code that handles another exception type
} ] . . . ]
// The following syntax shows a throw expression:
throw [expression]
 
     
 

Язык C++ обеспечивает встроенную поддержку обработки аварийных ситуаций, известных как исключения (exceptions), которые могут происходить во время выполнения Вашей программы. Операторы try, throw и catch реализуют обработку исключений. При использовании обработки C++ исключений Ваша программа может взаимодействовать с непредвиденными событиями при высокоуровневом исполнимом контексте, который способен лучше реагировать на такие аварийные события. Такие исключения обрабатываются кодом находящимся вне основного потока выполнения программы.

Рассмотрим как работает тройка операторов try, catch, throw

Код после оператора try представляет защищенную секцию кода. Выражение появления исключения (throw expression) вызывает исключение (raises exception). Блок кода после catch это обработчик исключения захватывающий (обрабатывающий) исключение появившееся в выражении появления исключения. Оператор объявления исключения (exception-declaration) указывает на тип исключения обрабатываемого оператором catch. Таким типом может быть любой действительный тип данных, включая класс C++. Если оператор объявления исключения содержит многоточие (...), оператор catch обрабатывает любые типы исключений, включая исключения на C и сгенерированные системой и приложениями, такие как защита прав доступа к памяти, деление на ноль, переполнение числа с плавающей точкой. Такой обработчик должен быть последним из всех обработчиков блока try.

Операнд при операторе throw синтаксически подобен операнду оператора return.

Исполнение происходит в следующей последовательности:

1. Управление достигает оператора try при нормальном последовательном выполнении. Защищенная секция внутри блока try исполняется.

2. Если исключений во время выполнения защищенной секции кода не произойдет, оператор catch, следующий за блоком try не будет выполнен. Исполнение продолжается начиная с оператора следующего за последним оператором catch в том блоке try в котором отслеживается (thrown) исключение.

3. Если исключение произошло (thrown) во время выполнения защищенной секции кода или в любой процедуре защищенной секции (при прямом или косвенном вызове), будет создан объект исключения из объекта представленного операндом при операторе throw. (Это подразумевает, что будет вовлечена копия конструктора). Начиная с этого места компилятор отыскивает оператор catch в высокоуровневом контексте исполнения, который способен обработать исключение с произошедшим (thrown) типом (или обработчик catch, который способен обрабатывать любые типы исключений). Обработчики catch проверяются в порядке представления в блоке try. Если требуемый обработчик отсутствует проверяется следующий динамически замкнутый try - блок. Этот процесс продолжается до тех пор, пока не закончится внешний замкнутый try - блок.

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

5. Если требуемый обработчик catch найден, и он захвачен по значению, его формальный параметр инициализируется копированием объекта исключения. Если он захвачен по ссылке, параметр инициализируется ссылкой на объект исключения. После инициализации формального параметра начинается процесс развертывания стека. Это вызывает разрушение всех автоматических объектов, созданных (но еще не уничтоженных), между началом блока try соответствующего обработчику catch и местом срабатывания (throw) исключения. Разрушение происходит в порядке обратном порядку создания. Обработчик catch исполняется и программа продолжает выполнение со следующей за последним обработчиком строки (т.е. с первого оператора или конструктора не являющегося обработчиком catch). Управление может передаваться на обработчик catch только для сработавших (thrown) исключений и никогда посредством операторов goto или метки case оператора switch.

 
     
 

Следующий пример из документации по MSVS показывает использование блока try и соответствующего ему обработчика catch. Пример определяет ошибку выделения памяти при использовании оператора new. Если new прошел успешно catch обработчик не будет исполнен:

// exceptions_trycatchandthrowstatements.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main() {
char *buf;
try {
buf = new char[512];
if( buf == 0 )
throw "Memory allocation failure!";
}
catch( char * str ) {
cout << "Exception raised: " << str << '\n';
}
}

 
     
  в следующем уроке мы познакомимся с особенностями создания оконных Win32-приложений  
     
     
     
     
     
  [назад] [далее] [к содержанию]  
Creating game on fle game engine - Simple game

11 - Game score, sounds, music



читать данную статью на русском

We have come to the final part of our lesson. Here I will briefly explain how to display the dialed gaming score hit the ball in the hole, as well as the play of the game sounds in wav and mp3 music format.





Content

page 1 - Sprites

page 2 - Objects

page 3 - Overlay objects

page 4 - Coding - Setting parameters for the Scene Editor fge and write code to display the sprite ball in your first gaming application

page 5 - Show jumped ball

page 6 - Loading game scene

page 7 - Moving game scene

page 8 - Foreground - Closing of the scene from the cavities by means of a black texture with a slot, restricts the movement of the scene

page 9 - We realize getting into the correct hole and around the holes - holes define the boundaries of sprites and sprite jumped ball

page 10 - Testing collisions

page 11 - Game score, sounds, music



lesson #2 page 1 - Create new scenes for the simple game, extended version - simple game extended







If you get the ball in the hole runs the following code -

if ( m_bContactWithHoleDetected )
{
if ( o_so != NULL )
{
o_so->Show = true; //we note that it is necessary to display the plate holes
}
PlayGameSound(hole_hit_snd); //we play the sound of falling into the hole

m_bInHole = true; //note the condition that the ball fell into the hole - it is necessary to
//secure re falling into the same hole
//new hits are recorded in only a few seconds
m_iHoleHits++; //add the counter hits the holes

m_iScore = m_iHoleHits; //skid hits counter variable to display the game score

}


When the ball spontaneously changes its direction a sound is played -

CD3DGameApp::change_moved_ball_TimePause

//...

PlayGameSound(change_direction_snd);



Here we have turned the game -



Display of score points implemented in the method - CD3DGameApp::RenderTextIndicators

Music playback is implemented in the method -

CD3DGameApp::FrameMove

in the form of code line -

g_MusicThemes.PlayNextTrack();

For the load of sounds, music, adjust the volume and other necessary actions are carried out special methods. Details here they will not consider all of them you can see for yourself in the source code of the game simple game.

In conclusion, it is possible to set the value in the parameter file to change the music volume

simple_game\Media\base\params.txt

With regard to the volume of sounds, and other possible questions that you may have - look for the answer in the source code.

Of course there are still many questions that you can consider. I will try to discover them in later lessons on how to create simple game, and other examples of games (which will soon be made).

Questions that were not considered:

The mechanism of the balance of the complexity of the game - for example, you can make to the ball gradually began jumping faster and faster (with growth of the gaming score) to the game gradually became more complicated.

You can realize that the ball hitting the hole briefly stuck in it.

There were ideas alternately control the movement of the ball, the landscape scenes or mixed control, when for example, the scene we can move left and right and up and down, it moves itself, and the ball can only move up and down and side to side, he moved himself. And to these control options are changed spontaneously in the game (depending on the complexity with its gradual increase, or just randomly).

You can also add more variety to the game - any variety of gaming units, objects and some additional mini-tasks, and so on.

There would be a fantasy.

I think that from the submitted soon to write something in the next lessons, but something maybe you implement and independently !





By studying the source code of the project simple_game, and experimenting with it, you can extend or modify the game and create on its basis some own.

It was the first lesson on creating games simple game on the engine fle game engine.

The new tutorials on creating other examples of games soon the topic will be continued and will be available soon different genre focus and implement these or other interesting features of the game - - 2d and 3d graphics, platformers, shooters (shooting), action, strategy, logic, jigsaw puzzles, quests, hidden object, and many many more.

All of them will not be a full-fledged complete games, as they are realized only the basics, but will serve as a good basis for their own games in a particular genre. Allow to gain the necessary knowledge and experience.

If you have any interesting ideas, suggestions, personal development or you have already made your game on the basis of this example, and want to share - write to us !





Download the game finished simple game version 1.0.0 4.01.2017 (without sourse code).

Source code and other useful materials and tools you get with a paid subscription order !


Size: 51,8 Mb



To have the opportunity to create their own game on the basis of an example simple_game with unlimited possibilities of further expansion! - Subscribe to fle game engine -


Price: 10 usd.

Subscribing to fle game engine You get an example of the game simple game with source code, and you can not just read everything that will be described below, but do yourself in your own application with the possibility of unlimited expansion. Also, you get

for the latest version Scene Editor fge 1.0.2 (on current moment) with support for more features: grid settings, scrolling, and more. In the free version, these features are not supported. more details about the distibutive of a paid subscription.



Good luck to you in creating your own games !

[previous] [next]



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

Registered comments



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


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