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


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

megainformatic - Нужна ли валидация вашему сайту ?
Нужна ли валидация вашему сайту ? Очень часто можно услышать такой вопрос: Добрый день http://validator.w3.org/check?uri=http%3A%2F%2Fdonnapizza.ru можете дать комментарии? до переделки было 89 ошибок http://validator.w3.org/check?uri=http%3A%2F%2Fwww.1c-bitrix.ru%2F&charset=%28detect+automatically%29&doctype=Inline&group=0 для интереса http:/
подробнее...

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

Коллекция php скриптов

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 15

megainformatic - Приключения Кости Коробкина - В гостях у тёти Светы часть 1 - интерактивный комикс

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

fle game generator - fle генератор игр - fly snow 3d падающий снег - расширяемый генератор визуальных образов, с музыкой mp3, ogg и генерацией игр

fle game generator - fle генератор игр - fly snow 3d падающий снег - расширяемый генератор визуальных образов, с музыкой mp3, ogg и генерацией игр

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 16

megainformatic Создание и размещение видео баннера mp4

megainformatic Использование баннер-ротатора

megainformatic fle game engine Simple game / Пример простой игры

megainformatic fle game engine Simple game / Пример простой игры - страница 1 - Спрайты

Creating game on fle game engine - Draw Line - This can be helpful/ Создание игры на fle game engine - Рисование линий - Это может пригодиться.

Платная подписка на fle game engine

megainformatic Создание игры на fle game engine - Simple game - страница 2 - Объекты / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 3 - Объекты / Пример простой игры

Платная подписка на fle game engine

megainformatic Создание игры на fle game engine - Simple game - страница 4 - Код - Настройка параметров Scene Editor fge и написание кода для вывода спрайта шарика в вашем первом игровом приложении / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 5 - Отображаем прыгающий шарик, узнаем как задается для спрайта его центр и знакомимся с векторной системой координат / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 6 - Загрузка игровой сцены / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 7 - Перемещения игровой сцены / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 8 - Закрываем часть сцены от пустот при помощи черной текстуры с прорезью, ограничиваем перемещение сцены / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 9 - Реализуем корректное попадание в ямы и около ям - определяем границы спрайтов ям и спрайта прыгаюшего шарика / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 10 - Проверка столкновений / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game - страница 11 - Игровой счёт, звуки, музыка / Пример простой игры

megainformatic Создание игры на fle game engine - Simple game extended - страница 1 - Создание новой сцены (уровня, комнаты), добавление новых возможностей / Пример простой игры - расширенная версия

Платная подписка на simple game fle game engine версия 1.0.7 от 05.01.2017

Платная подписка на simple game fle game engine версия 1.0.7 от 05.01.2017

Советы копирайтеру - как не обмануть и не быть обманутым

Balls and Holes игра скачать + как создать игру на fle game engine

Balls and Holes игра скачать + как создать игру на fle game engine

Something: Unexplained 2 captive of desires

KKK Коллекционное издание: Веселый Буквоежка Комикс + Костя Коробкин Комикс + Нечто: Необъяснимое в плену желаний 2 начало

KKK Коллекционное издание: Веселый Буквоежка Комикс + Костя Коробкин Комикс + Нечто: Необъяснимое в плену желаний 2 начало

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 17

megainformatic - Игродельня

megainformatic - Новости страница 542

megainformatic - С днём защитника отечества !

megainformatic fle game engine fle / Пример простой игры fle - Скроллинг больших локаций

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 18

megainformatic - Шарики и Ямки игра PC

megainformatic - Шарики и Ямки игра PC

megainformatic fle game engine fle / Изучаем основы c++ - переменные на примере реального игрового проекта Balls and Holes

megainformatic - Реферальная ссылка

megainformatic - Изменение постоянных свойств в зависимости от контекста

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

megainformatic - Искатели приключений Зеленый Шарик

megainformatic - Без названия

megainformatic - Мульти анимация

Pencil, Paper and the Ball PC game

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

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

megainformatic - fle game engine - создание 3d игры - simple game 3d

Pencil, Paper and the Ball PC game

I Free lancer - tale, story Я фрилансер повесть, история

Шарики и Ямки игра, Эмулятор игры Ну Погоди, Balls and Holes, Веселый Буквоежка Комикс, Костя Коробкин Комикс, Нечто: Необъяснимое в плену желаний 2 начало, simple game, с новым годом

подробнее

 

Разбираем конструкции языка 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-приложений  
     
     
     
     
     
  [назад] [далее] [к содержанию]  
подробнее

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



[уроки php]  [регулярные выражения] 



Что такое парсинг сайтов и для чего он нужен ?

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

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

Типичный пример парсера - это парсер какого-либо форума или интернет-магазина.

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



Как выполнить парсинг сайта используя php ?

Кликнув по ссылке -

Пример 1

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

Вот какой php код при этом используется -

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Simple site parser by megainformatic</title>
</head>
<body>

<?php


/* на данной странице используются и некоторые html-теги чтобы не было нарушений кодировки */

/* для начала нужно определить сайт, который мы будем парсить - сайт донор */

$site_donor_url = 'http://doska.obninsk.ru/'; /* данный сайт взят без какой-либо цели практически наугад просто для примера */

/* далее выполняем загрузку страницы с этого сайта в переменную скрипта */

/* сделать это можно самыми различными способами, самый простой - через открытие файла */

$site_page_strings_array = file($site_donor_url);

/* получив данные с сайта пока просто выведем их */

echo '<pre>';
var_dump($site_page_strings_array);
echo '</pre>';

?>
</body>
</html>



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

И сразу же обратим внимание на 2 нюанса, которые очень часто сбивают с толку, особенно если Вы впервые осваиваете php и технологию парсинга сайтов.



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

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

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

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

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

2) Сайт-донор не открывается через скрипт парсера.

Это может быть связано с 1 причиной, а может быть так, что на сайте доноре включены программы фильтрации IP адресов - обычно это делается для защиты от DDoS атак, но могут быть и другие причины (например защита от злобных спаммеров :)))) )

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

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

Чтобы ваш скрипт смог дождаться отклика сайта-донора в течение хотя бы разумного времени - порядка нескольких десятков секунд - можно в файле php.ini задать лимит на время выполнения скриптов равным более 30 секунд.

max_execution_time = 60

В самом скрипте для этого можно использовать функцию - set_time_limit()

Но следует учесть что скрипт не должен работать в БЕЗОПАСНОМ РЕЖИМЕ safe_mode. Есть и другой момент - в php начиная с версии 5.4.0 возможность использования БЕЗОПАСНОГО РЕЖИМА признана устаревшей.

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

Чтобы выполнение скрипта не зависело от времени обращения и ожиданию отклика от сайта донора можно использовать сокеты. Для этого в php есть функция fsockopen. И я уже рассматривал работу с ней в статье - Работа с сокетами fsockopen из php

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

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

Для работы php через proxy нужно:

Для Unix систем необходимо собрать PHP с опцией --with-curl[=DIR], где DIR - имя директории, содержащей поддиректории lib и include. Директория "include" должна содержать поддиректорию "curl" с файлами easy.h и curl.h. Директория "lib" должна содержать файл libcurl.a.

Для Windows систем необходимо установить PHP с поддержкой данного модуля, а потом скопировать файлы libeay32.dll и ssleay32.dll из директории DLL Win32 дистрибутива PHP в директорию SYSTEM (Нпример C:\WINNT\SYSTEM32 или C:\WINDOWS\SYSTEM).

Что такое libcurl Libcurl – это библиотека функций, которая позволяет взаимодействовать движок php с удалёнными серверами, по различным протоколам. Пример получения контента с удалённой страницы через PROXY:

<?php
//создаём функцию
function get_proxy($url, $proxy) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
curl_setopt($ch, CURLOPT_PROXY, "$proxy");
$ss=curl_exec($ch);
curl_close($ch);
return $ss;
}

//вызываем функцию
$proxy = '112.25.12.37:80';
$content = get_proxy('http://300kbit.ru/',$proxy);
echo $content;
?>

Идём дальше.

Обработка данных полученных с сайта-донора т. е. непосредственно парсинг сайта на php.

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

подробнее

     
  [статьи] [как создать игру ну, погоди!] [к содержанию] [scene2game] [donuts3d]  
     
 

Погружение в глубины DirectX 8, 9 на Delphi 6,7

Занявшись программированием DirectX запаситесь терпением и будьте упорны в достижении своих целей! Вам потребуются знания не только Delphi, но и C++, т.к. все примеры в DirectX SDK показаны именно на C++ (и на C# тоже!). Кроме того, необходимы хотя бы минимальные теоретические представления (основы векторного исчисления, работа с матрицами 4х4). Всё это есть в документации по DirectX (DX SDK). Однако Мы с Вами вместе попытаемся разобраться в тех проблемах, которые будут возникать по ходу работы. Основная работа автора на данный момент - это реализация проекта "Тайны Морских Глубин: Операция Тайфун". На примере его мы и подойдем к созданию собственной игры на Delphi.

Первая проблема, которая возникает при попытках загружать в примерах из DirectX SDK (естественно переделанных под Delphi) собственные модели.

 
     
     
  Здесь вам будет показано как избавиться от ошибок визуализации.  
     
  Суть проблемы: при попытке загрузить собственную модель замкнутого пространства - в нашем случае обычный box (с "вывернутыми наизнанку" нормалями к граням) нарушено обновление картинки кадра приложения.  
     
  приложение с ошибками визуализации  
     
 

Для демонстрации ошибки скачайте пример, и в методе RenderScene найдите следующую строку кода:

D3DXMatrixScaling(matWorld, 0.25, 0.25, 0.25);

и исправьте на D3DXMatrixScaling(matWorld, 1.0, 1.0, 1.0);. Откомпилируйте и запустите пример. Вы увидите результат ошибки.

 
     
  Причины:какая-то из переменных дает при вычислениях бесконечно малое или бесконечно большое число или попытку деления на нуль. При этом нарушается обновление картинки кадра. Это может быть следствием неправильно заданных начальных значений переменных, выходом за допустимые пределы, большим размером моделей.  
     
  нормально работающее приложение  
     
  Итак, если Ваше приложение DirectX отказывается корректно работать с Вашими моделями, то в Вашем коде логические ошибки, касаемые некорректного предположения о размерах моделей или положения их центра. Необходимо или изменить размеры моделей или модифицировать код!  
     
  Итак, DirectX-машина просто не в состоянии корректно производить обновление кадра. Необходимо изменить размеры моделей или введя модификации в код, производящие необходимую коррекцию.  
     
 

Решение: снова в методе RenderScene найдите ту же строку кода и восстановите:

D3DXMatrixScaling(matWorld, 0.25, 0.25, 0.25);

Тогда всё прекрасно работает!
 
     
 

Важное замечание по поводу x-файлов получаемых при экспорте из 3DS MAX7: все пути к текстурам получаются абсолютные. Это необходимо исправить! Иначе Ваш пример не будет корректно работать на любом другом компьютере. Для этого откройте x-файл при помощи любой простой программы для редактирования текста (Блокнот, WordPad), найдите в нём все строки с наименованием TextureFilename, содержащие абсолютный путь к текстуре, например:

TextureFilename {
"D:/MyComp/Example/media/textures/box_tex.bmp";

и переделайте следующим образом:

TextureFilename {
"media/textures/box_tex.bmp";

т.е. использовав относительный путь!

 
     
  Скачав данный пример и распаковав архив в папке media\maxmodels вы найдете модель redbox.max - она пригодится Вам для изучения - т.к. 3ds max не позволяет загружать модели в формате x.  
     
  [статьи] [как создать игру ну, погоди!] [к содержанию] [scene2game] [donuts3d]  
     
подробнее


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

Хронология работы программы. Создаем Лог

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

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

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

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


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

Что из-себя представляет лог? Обычный текстовый файл с расширением log (оно может быть любое). Каждая строчка такого файла содержит штамп времени и некий текст. Это может быть строка ошибки или сообщение о том, что некий ресурс успешно загрузился. Смотрим пример лога:


08:43:32: Creating resource group General
08:43:32: Creating resource group Internal
08:43:32: Creating resource group Autodetect
08:43:32: SceneManagerFactory for type 'DefaultSceneManager' registered.
08:43:32: Registering ResourceManager for type Material
08:43:32: Registering ResourceManager for type Mesh

А теперь ближе к делу. Создадим простейший класс лога:

//log.h

#pragma once
#include <string>
#include <fstream>

class Log
{
protected:
std::ofstream mfpLog; //файловый поток
std::string mName;
public:
Log( const std::string& name); //Конструктор
~Log(); //деструктор
void logMessage(const std::string& message); ///для записи строки
};

А вот так будет выглядеть реализация класса

//log.cpp
#pragma once
#include "Log.h"
#include <time.h>
#include <iomanip>
Log::Log( const string& name )//конструктор
: mName(name)
{
mfpLog.open(name.c_str(),ios::out); //откроем файл лога
}
//-----------------------------------------------------------------------
Log::~Log()//деструктор
{
mfpLog.close(); //закроем файл лога
}
//-----------------------------------------------------------------------
void Log::logMessage( const string& message )
{ struct tm *pTime;
time_t ctTime;
//берем системное время
time(&ctTime);
//получим указатель на структуру времени
pTime = localtime( &ctTime );
//выведем в строку ширина 2 позиции заполнитель 0
mfpLog << std::setw(2) << std::setfill('0') << pTime->tm_hour
<< ":" << std::setw(2) << std::setfill('0') << pTime->tm_min
<< ":" << std::setw(2) << std::setfill('0') << pTime->tm_sec
<< ": " << message << std::endl;
}

Пример использования класса:

//где-то в недрах программы :)
Log mLog ("game.log");
//так пишем сообщения
mLog.logMessage("Ваше сообщение");

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

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

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

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



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

This is the most exciting moment - because your future game is born !





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 - 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







On the previous pages you have read the plan on which we will make our educational game, the fundamentals of its preparation - creating sprites and placement of game objects in the game scene.

But all this would not be if the code does not revive them.

In addition, in the preceding pages I have formulated some questions that promised to answer later.

Now the time has come. Let's start in order.

As I said, for the grid cells in our game the size of 100x100 pixels has been set.

This setting, and as well as a whole series of others can be set in a special file of parameters.

If you open a directory

SceneEditor\Media\params\

you will find there a file

params.txt

in it every parameter is accompanied by a comment, that's an example of the contents of this file.

grid_cell_width=100.0f; //the width of the grid cell in pixels
grid_cell_height=100.0f; //the height of the grid cell in pixels
grid_mode=7.0f; //0.0f - dont show grid, 1.0f - not used, >2.0f && <= 7.0f segment grid, >7.0f - normal grid
grid_color=0xFFA445D5; //the color of the grid lines first pair of numbers FF - from 00 to FF sets the translucency, the other set RGB color
snap_to_grid=1; //0 - not bind the object to the reference grid point by clicking, 1 - bind
info_text_color=0xFFFFFFFF; //color information labels, the first pair of numbers FF - from 00 to FF sets the translucency, the other set RGB color
grid_scroll_speed=50.0f; //speed of scrolling grid and game scene
bg_fill_color=0xFFAEAEAE; //color to fill the background of the empty scene
scene_width_in_cells=20; //width dimension of scene - the number of blocks in width
scene_height_in_cells=16; //height dimension of scene - the number of blocks in height


I think now everything is clear. You can select a file in any of the settings for the size of the cells in your scene, you can also set the color of the grid, view its display - normal or segment, scrolling speed and other.

It should be noted that the settings should be set and save your changes before running Scene Editor fge.

If you want to change them when the editor Scene Editor fge is already running - then you need to save the results of current work and close the program. When to make changes to a file params.txt and run Scene Editor again.

Only after that the new settings take effect.

Creating new scene in fle game engine - in editor of scenes Scene Editor 1.0.2 - scene ready - ball in hole

In our educational game, the ball will have to dodge the holes, the floor should be a move of the mouse movements. Somewhere must be taken into game score and displayed for successful attempts to catch the ball in the hole. Picture the scene, and all game resources must be uploaded to your game app. In the game we will also add 2 sounds - the sound of the ball in the hole successfully catching and unsuccessful, and even the background music mp3.

I will not torment you more waiting, let's start !

The first thing that starts any game programming - is the foundation - starting the initial code that must be taken to leaning on it, to create your new game.

Such a code already present in the distributive of fle game engine and we just take it "AS IS".

Code of my project, I will provisionally call simple game.

You certainly can name your project as you wish.

All we need at an early stage, namely the including of the necessary libraries and header files, configuration files in the project, writing a start-up code - everything is already there and does not need to add anything.

If desired, in the future you will be able to examine what is and what is done to be able to expand without limit your own project. But now we will have to worry at the basis of the following questions:

1) We need to load a scene into our app and show on screen.

2) Load and display the sprite of the ball - because it is not part of the scene and will work on it separately.

3) Learning to control the movement of the scene - so it moved with mouse movements.

4) Implement the occurrence of game situations: that the ball started to move and dodge the holes, as well as check and output them from falling into the hole and accounting game score.

5) It will also be necessary to display the dialed player game score for successful hitting the ball in the hole.

6) Add the sound - the sound of a successful hit the ball in the hole and the sound of a miss.

7) Add background music mp3.

8) Did you have any more additional questions that will have to decide.





To create our application we will use a development environment Microsoft Visual Studio 2005.

For normal compilation and assembly of examples you will also need to DirectX SDK Aug 2008.



To have the opportunity to create you 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.





Let's start with a simple questions.

2) Load and display the sprite of the ball - because it is not part of the scene and will work on it separately

and display it on the screen.

Let us assume that our project is located in the folder

simple_game\

Then, inside the folder

simple_game\Media\textures\



Create subfolder simple_game, and inside it - ball -

simple_game\Media\textures\simple_game\ball\

And place inside it the file

simple_game\Media\textures\simple_game\ball\jump.tga

I.e our jumped ball

jumped ball



To the application simple game could load the sprite, and his animated show - jumping, you need to create a file inside folder

simple_game\Media\textures\simple_game\ball\



the file

simple_game\Media\textures\simple_game\ball\tex_list.txt



And enter the following line in it -

ball\jump.tga; -0.7f; 0.1f; 0.909f; 0.5f; 0.5f; 64; 128; 0; 0; 4; 8.0f; 14.0f;



If you've watched utility Coords2D, and tried to run from it any sprites, familiar with the included readme.txt file - it can easily guess that we just define the parameters to load our sprite ball.

If you still do not know anything about the utility Coords2D, I advise you to immediately fill this gap, as the sprites are the foundation of any game, and you need to understand how to work with them.

On this occasion I have written lessons - How animate spider, Animate the wolf from the cartoon.

After reading, you will learn how to create sprites and itself as animated, that is beginning to display their animation in the game.





After the file is created

simple_game\Media\textures\simple_game\ball\tex_list.txt

with the animation of the ball, mentioned above, and save the changes, and now we write the code that will make load our ball, display it on the screen, and not static and animated.



In unit

simple_game\start\start.cpp



After line

#include "DXUTsettingsdlg.h"



Adding new code

#include "game_sprite.h"



And after line

double g_fLastAnimTime = 0.0;





This code

CGameSprite g_AI_Ball_Sprite; //the variable that will store the object to work with our sprite ball



Next, you need to do a search on the code module start.cpp and find the line containing

g_Splash



After each found line to insert a - a similar line of code -

1)
g_Splash.Restore(); //this is what you find
g_AI_Ball_Sprite.Restore(); //this is what you need to add


2)
g_Splash.Free(); //this is what you find
g_AI_Ball_Sprite.Free(); //this is what you need to add


3)
g_Splash.Invalidate(); //this is what you find
g_AI_Ball_Sprite.Invalidate(); //this is what you need to add


4)
g_Splash.Anim(); //this is what you find
g_AI_Ball_Sprite.Anim(); //this is what you need to add


5)
g_Splash.Draw(); //this is what you find
g_AI_Ball_Sprite.Draw(); //this is what you need to add


6)
g_Splash.Load(); //this is what you find
g_AI_Ball_Sprite.Load(); //this is what you need to add


7)
g_Splash.NextSplash(); //this is what you find
g_AI_Ball_Sprite.NextSprite(); //this is what you need to add


The task is simple, but requires care. Do not miss out and do not add anything extra, otherwise there will be errors.



Next, compile the application.

If no errors, good. If there is - we read it for mistakes, understand and correct.



We launch our application - this is an executable file -

simple_game\simple_game\start.exe



If you did everything correctly, then after a normal run the application to see on a screen image -

The first start your future game created on fle game engine - we try to bring game sprite for jumping ball

The application runs, no errors. But there is no and no ball on the screen.

There is no mistake, but if you were careful and well understood as the withdrawal of sprites using a utility Coords2D, it can easily fix the problem. This is the same question we touched on page 2 - Objects, when we created our gaming scene. It also dealt with the ball disappearance from view.

If you have any ideas on this occasion you have not, then again I urged to read the utility Coords2D and especially to read the file readme.txt attached to it, run utility and find out how it can help the sprites are displayed on the screen, based on the set for them in the file tex_list.txt parameters.

You must learn to overcome difficulties on their own, without help. Without explicit hints. That's when you can find information, understand it, and actually create games. Creating a game requires a lot of work and effort.

Sometimes simple, it would seem, at first glance, the decision turns out to be useless if you do not know the subject matter thoroughly.

And the fact that it may take to clarify the many, many hours of time. Therefore, what you see is only the tip of the iceberg.

But very few of you will find the strength, and most importantly, the desire to reach the end.

[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,0806