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


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

megainformatic - Моделируем девушку в 3d используя 3ds max
        [все уроки 3ds max] [далее]        
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Как создать игру ? - Программируем сами - Самый первый шаг - страница 3

megainformatic - Как создать игру ? - Программируем сами - Изучаем и модифицируем пример CreateDevice

megainformatic - Как создать игру ? - Программируем сами - пример CreateDevice страница 2

megainformatic - Как создать игру ? - Программируем сами - пример CreateDevice страница 3

megainformatic - Как создать игру - Vertices - Вершины - страница 1

megainformatic - Как создать игру - пример Matrices

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

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 2

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 3

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 4

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Уроки Photoshop

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 2

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 3

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 4

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 2

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 3

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 4

megainformatic - Эмулятор игры Ну, Погоди!

megainformatic - Оплата заказа через Сбербанк

megainformatic - Пример игры с исходным кодом Donuts3D

megainformatic - Как создать игру ВЕСЕЛЫЙ БУКВОЕЖКА - программируем сами

megainformatic - Как создать игру ВЕСЕЛЫЙ БУКВОЕЖКА - создаем игровую оболочку

megainformatic - Открытый Полный Исходный код игры Дорога в Город

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

megainformatic - Как создать игру - Веселый Единственный Буквоежка - выводим заставку

megainformatic - Как создать игру - Веселый Единственный Буквоежка - игровое меню

megainformatic - Как создать игру - Веселый Единственный Буквоежка - движение и анимация героя

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

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

megainformatic - Примеры моих работ

megainformatic - Музыкальные темы

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

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Онлайн Обучение, Репетитор

megainformatic - Уроки Photoshop - Рисуем и Анимируем

megainformatic - Уроки Photoshop - Рисуем и Анимируем - Урок 1 - Старт

megainformatic - Уроки Photoshop - Рисуем и Анимируем на AllSoft.ru

megainformatic - DirectX 9c - Изучаем пример MultAnimation

megainformatic - megainformatic cms Система Управления Контентом

megainformatic - Темы для WordPress

megainformatic - Что нужно для создания собственного сайта ?

megainformatic - Макет дизайна Вашего сайта

скачать megainformatic cms

megainformatic - Итоги 2010 года

megainformatic - Что нужно для создания собственного сайта ?

megainformatic - как создать инсталлятор для собственной cms

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

Нововведения в megainformatic cms

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

Уроки Верстки

Система автоматизированной е-майл рассылки

Система автоматизированной е-майл рассылки

подробнее

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

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



read paper in english

Пришло время перейти к самому главному и интересному вопросу - загрузке и отображению созданной вами в Scene Editor fge игровой сцены.





Содержание

страница 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. Мульти анимация







С прыгающим шариком пока всё ясно. Оставим его ненадолго. Теперь пришло время загрузить нашу игровую сцену.

1) Нам нужно загрузить созданную сцену в наше приложение и показать на экране.

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

Прежде нужно подготовить все файлы ресурсов игровой сцены, как это было описано на странице 2 - Объекты

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





simple_game\SceneEditor\Media\textures\environment\desc\scene_editor_types.txt



none; 0;
ai_player; 1;
floor; 2;
test; 3;


simple_game\SceneEditor\Media\textures\environment\desc\scene_editor_texlist.txt



ball; ai_player; ai_player\jump.tga; 64; 128; 0; 0; 4; 8.0f; 14.0f;
floor; floor; floor\floor.jpg; 101; 101; 0; 0; 1; 0.0f; 0.0f;
floor_front; floor; floor\floor_front2.tga; 101; 101; 0; 0; 1; 0.0f; 0.0f;
floor2; floor; floor\floor2.jpg; 101; 101; 0; 0; 1; 0.0f; 0.0f;


Следует иметь в виду, что если Вы меняете файлы типов и ресурсов, то созданные с их использованием файлы сцен уже работать не будут !

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

Создание новой сцены во fle game engine - в редакторе сцен Scene Editor 1.0.2 - сцена готова

Теперь берем всю папку

simple_game\SceneEditor\Media\textures\environment\





и переносим её в папку ресурсов нашей игры simple_game

simple_game\simple_game\Media\textures\





Папку

simple_game\SceneEditor\scenes\simple_game\



и файл созданной вами игровой сцены, у меня он назывался scene_3.SCN,

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

simple_game\SceneEditor\Media\textures\environment\scenes\



Т. е. вот так

simple_game\SceneEditor\Media\textures\environment\scenes\simple_game\scene_1.SCN



Сцену я снова назвал scene_1.SCN, чтобы обозначить, что это будет самая первая (и пока единственная) игровая сцена в нашей игре simple_game.



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

Первое, что Вам потребуется - это модуль GameSceneFile т. е. 2 файла - GameSceneFile.h и GameSceneFile.cpp которые нужно будет добавить в проект.

подключение модуля GameSceneFile в ваш проект

Далее в файл start.h после строки

#include "d_input.h"

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

#include "GameSceneFile.h"



Далее в класс нашего приложения CD3DGameApp После строчки

bool m_bShowScreenOptionsBtn;

добавляем новое поле - CGameSceneDataFile* m_pGameSceneDataFile;



Это объект для управления нашей сценой. Все его методы описаны в модуле GameSceneFile представленном, как Вы уже видели 2 файлами - GameSceneFile.h и GameSceneFile.cpp.

Файл GameSceneFile.h - заголовочный - описывает заголовки функций, полей и методов, а файл GameSceneFile.cpp описывает их реализацию на языке программирования c++.



Теперь нужно добавить в модуль нашего приложения start.cpp следующие строки кода



1)

#include "game_sprite.h" //это строка после которой нужно добавить

#define SimpleGameLocation L"\\Media\\textures\\environment\\scenes\\simple_game\\scenes_list.txt" //это строка которую нужно добавить
#define SimpleGameScenesPath L"\\Media\\textures\\environment\\scenes\\simple_game\\" //это строка которую нужно добавить




Вам потребуется еще создать файл scenes_list.txt в папке

simple_game\simple_game\Media\textures\environment\scenes\simple_game\





И поместить в него следующую запись -

scene_1.scn



И больше ничего, никаких переводов строки и пустых строк !!



Далее, там же, в модуле нашего приложения start.cpp

2)

В методе -

CD3DGameApp::CD3DGameApp



CD3DGameApp::CD3DGameApp()
{
//...

m_pSprite = NULL;

} //это строка после которой нужно добавить



//это строки которые нужно добавить

void CD3DGameApp::LoadGameScene()
{
//создание игровой сцены
m_pGameSceneDataFile = new CGameSceneDataFile();
m_pGameSceneDataFile->PreLoadGameTextures();

m_pGameSceneDataFile->LoadLocation(SimpleGameLocation, SimpleGameScenesPath);

//получение границ локации
ScrollGameSceneLeftLimit = -m_pGameSceneDataFile->m_fLocationHScrollLimit;
ScrollGameSceneRightLimit = m_pGameSceneDataFile->m_fLocationHScrollLimit;
//выставление границ локации, доступных из других модулей
g_fScrollGameSceneLeftLimit = ScrollGameSceneLeftLimit;
g_fScrollGameSceneRightLimit = ScrollGameSceneRightLimit;

//загрузка свойств объектов, границ
//LoadGameObjProperties(GameObjectPropertyValue); //поскольку закомментировано, то здесь пока не используется

}





Этот же метод нужно добавить в start.h

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

class CD3DGameApp

после строки

bool m_bShowScreenOptionsBtn;

добавим -





//игровая сцена

CGameSceneDataFile* m_pGameSceneDataFile;
void LoadGameScene();
//void AfterLoadRestoreLocTextures(); //закомментировано, т. к. пока не требуется
void MovePlayer(int NewMoveState);
void ScrollGameScene();

int m_iOldCurrSceneNum;
int m_iOldCurrSceneInx;

D3DXVECTOR3 m_vFleHeroPos;
void SetHeroLocationPos(DWORD CurrMoveState, LPD3DXVECTOR2 p_v2Pos,
float LocationXOffset);
void AnimGameProcess();
void DrawGameProcess();
bool CanEnterScene();
void LoadGameDataBlock();

}; //вышеуказанные строки надо добавить, а данная уже должна быть - служит для закрытия описания класса CD3DGameApp




Теперь снова возвращаемся к коду модуля start.cpp и добавляем туда

в метод

CD3DGameApp::CreateDeviceObjects

После строки -



g_Snow.Load();



строки -



LoadGameScene();

LoadGameSceneTextures(m_pGameSceneDataFile->m_pTexArray, EnvironmentTexturesPath, TextureFilesList, m_pGameSceneDataFile->m_pSprite);





в методе

CD3DGameApp::RestoreDisplayObjects

добавляем

if ( m_pGameSceneDataFile )
m_pGameSceneDataFile->RestoreGameSceneObjects();

в методе

CD3DGameApp::InvalidateDisplayObjects

добавляем

if ( m_pGameSceneDataFile )
m_pGameSceneDataFile->InvalidateGameSceneObjects();


в методе

CD3DGameApp::DestroyDisplayObjects

добавляем

m_pGameSceneDataFile->FreeGameTextures();
SAFE_DELETE(m_pGameSceneDataFile);



в любом месте, но удобнее в самом конце файла, добавляем -

void CD3DGameApp::MovePlayer(int NewMoveState)
{
/*
Если сцена закрыта - запрет движения
*/

m_pGameSceneDataFile->m_fHeroXPosInLocation = g_fHorizontalScrollOffset;
m_pGameSceneDataFile->CalcCurrentSceneNumber();
//if ( !CanEnterScene() )
//{
//x_step = 0.0f;
//}
}

//=============================================
//
// Скроллинг игровой сцены
//
//=============================================

void CD3DGameApp::ScrollGameScene()
{

//перед выполнением прокрутки локации запоминаем номер текущей сцены,
if ( m_iOldCurrSceneInx != m_pGameSceneDataFile->m_iCurrentSceneIndex )
{
m_iOldCurrSceneInx = m_pGameSceneDataFile->m_iCurrentSceneIndex;
m_iOldCurrSceneNum = m_pGameSceneDataFile->m_iCurrentSceneNumber;

g_iCurrentSceneNumber = m_pGameSceneDataFile->m_iCurrentSceneNumber;
}

m_pGameSceneDataFile->ScrollLocation( &D3DXVECTOR2(
g_fHorizontalScrollOffset + m_vFleHeroPos.x,
g_fVerticalScrollOffset ), g_fHorizontalScrollOffset);

}
//произвольное положение героя в локации
void CD3DGameApp::SetHeroLocationPos(DWORD CurrMoveState, LPD3DXVECTOR2 p_v2Pos,
float LocationXOffset)
{
m_vFleHeroPos = D3DXVECTOR3(p_v2Pos->x, p_v2Pos->y, 0.8f);

g_fHorizontalScrollOffset = LocationXOffset;
m_pGameSceneDataFile->m_SceneScrollPoint.x = g_fHorizontalScrollOffset;

ScrollGameScene();
}

void CD3DGameApp::AnimGameProcess()
{

m_pGameSceneDataFile->AnimateGameScene(g_fElapsedTime);
m_pGameSceneDataFile->AnimLocation();

MovePlayer(0);
}

void CD3DGameApp::DrawGameProcess()
{
m_pGameSceneDataFile->DrawGameSceneView();
m_pGameSceneDataFile->DrawLocation();
}

bool CD3DGameApp::CanEnterScene()
{
return true; //test
}

void CD3DGameApp::LoadGameDataBlock()
{
m_pGameSceneDataFile->m_SceneScrollPoint.x = g_fHorizontalScrollOffset;

if ( g_fHorizontalScrollOffset != 0.0f )
ScrollGameScene();
}





И наконец вызовы методов

AnimGameProcess();

и

DrawGameProcess();

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

метод

CD3DGameApp::FrameMove

g_AI_Ball_Sprite.Anim(); //это строка после которой надо добавить

AnimGameProcess();//это строка которую надо добавить



а в метод

CD3DGameApp::Render

case APPSTATE_READY: //это строка после которой надо добавить

DrawGameProcess();//это строка которую надо добавить



Сохраняем изменения, выполняем сборку проекта в MSVS 2005. Если всё ок, то при запуске приложения Вы увидите на экране созданную Вами в Scene Editor fge игровую сцену и прыгающий в ней шарик.

Отображение созданной игровой сцены приложением simple game

Пример данной будущей игры с полным исходным кодом Вы можете получить в составе платной подписки на fle game engine.

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

Оформить подписку на fle game engine -


Стоимость: 600 руб.

Тогда вы получите более свежую версию Scene Editor fge 1.0.2 (на текущий момент) с поддержкой большего количества возможностей: сетка, настройки, скроллинг и другие. В бесплатной версии эти возможности не поддерживаются. подробнее о составе платной подписки.





Для корректной сборки проекта Вам потребуется Microsoft Visual Studio 2005

DirectX SDK August 2008



https://www.microsoft.com/en-us/download/details.aspx?id=23549
Details
Version:
9.27.1734
File Name:
DXSDK_Aug09.exe
Date Published:
9/8/2009
File Size:
553.3 MB




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

Откройте проект из MSVS 2005

в окне Solution Explorer кликните правой кнопкой по узлу start - обозначающему имя проекта
и выберите пункт меню

Properties

свойства проекта

В открывшемся окне start Property Pages слева откройте узел

Configuration properties > C/C++ > General

свойства проекта Additional Include Directories

затем справа в поле Additional Include Directories

вместо ..\..\..\..\..\..\..\Include

вам нужно прописать корректный путь к папке Include, входящей в состав DirectX SDK August 2008.

Т. е. нужно заменить часть строки ..\..\..\..\..\..\..\Include

на абсолютный путь -

например он может быть таким -

C:\DXSDK9_Aug2008\Include

или относительный -

например он может быть таким -

..\..\..\..\..\..\..\..\..\Include



Аналогичное действие Вы должны проделать для Debug сборки - выберите в поле Слева вверху Configuration вариант Debug.

свойства проекта Additional Include Directories для Debug сборки

На вопрос Do you want to save changes you've made in the property pages ?

Отвечайте утвердительно - Да или Yes.



Далее откройте слева узел

Configuration properties > Linker > General

и в поле

Additional Library Directories

измените значение

..\..\..\..\..\..\..\Lib\x86

свойства проекта Additional Library Directories

на соответствующее вашему пути к установленному DXSDK9_Aug2008

здесь также по-аналогии, можно указать абсолютный

C:\DXSDK9_Aug2008\Lib\x86

или относительный - зависящий от того где на диске расположена папка проекта simple_game.

Например он может быть таким -

..\..\..\..\..\..\..\..\..\Lib\x86

Указанное действие нужно проделать и для Debug конфигурации проекта.

выберите в поле Слева вверху Configuration вариант Debug.

На вопрос Do you want to save changes you've made in the property pages ?

Отвечайте утвердительно - Да или Yes.



Если всё настроено правильно. Нажимаем ОК.

Далее в поле под главным меню выбираем вариант сборки проекта Debug или Release в панели инструментов

чуть правее от кнопки с зеленым треугольником - означающим запуск проекта из среды MSVS 2005 в режиме отладки.

Далее в главном меню выбираем пункт Build > Clean Solution - чтобы очистить все устаревшие объектные файлы.

Затем Build > Rebuild Solution.

Если всё было настроено правильно и в ходе компиляции вы не получили никаких сообщений об ошибках, то в папке

simple_game\simple_game\

вы найдете созданный файл start.exe, который можно запускать на выполнение.



[назад] [далее]



подробнее

Вакансии



megainformatic web job предложения о работе, фриланс заказы

megainformatic.ru/webjob

В нашей команде

- сценарист;

- контент-менеджер;

- менеджер проектов;

- дизайнер - photoshop, corel draw, 3ds max;

- программист c++, delphi, андроид;

- веб программист php/js/html/css/mysql;

- музыкант;

- звукорежиссер;

- генератор вредных идей и советов;

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

Это можно сделать несколькими способами:

Оставьте своё сообщение через форму Комментария ниже.

Напишите по одному из наших Контактов.

Можно также оставить сообщение через форму Возник вопрос Нажми.



Нам будут интересны следующие кандидаты:

Кто Вы и чем хотите заниматься ?

Какой у вас опыт ?

Примеры реализованных вами проектов ?



Что Вы получите работая с нами.

Возможность разрабатывать и продвигать новые, интересные и перспективные проекты.

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

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

Вы серьезны, целеустремленны, полны сил и готовы к покорению новых вершин ? Тогда нам по пути !



Предложить задачу, проект



megainformatic web job предложения о работе, фриланс заказы

megainformatic.ru/webjob

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

Или оставить сообщение через форму комментариев ниже.

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

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

подробнее

роман Eternity Вечность - автор Синицин Андрей megainformatic - страница 4

 

к странице 1 к странице 2 к странице 3 страница 4

 

* * *

в коде есть -

BEGIN_MESSAGE_MAP(CAnimateCtrlPage, CPropertyPage)

//...

ON_BN_CLICKED(IDC_PLAY, OnPlay)






class CAnimateCtrlPage : public CPropertyPage
{

	afx_msg void OnPlay();
	
	
	
//...


void CAnimateCtrlPage::OnPlay()


Нужно записывать код вручную или надо генерировать ? И если генерировать, то как ?


На кнопке кликаем правой кнопкой и генерируем Add Event Handler


Получилось -

void Cwinsock_samp1Dlg::OnBnClickedButtonTest()

Как теперь получить IDC_STATIC и установить его текстовое свойство, чтобы
увидеть результат работы ?


Посмотрел пример тут -
\CmnCtrl1\animctrl.cpp

CWnd* pFrame = GetDlgItem(IDC_ANIMFRAME);
	pFrame->GetClientRect(&m_rectAnimateCtrl);
	
	
Значит по-аналогии


есть что-то более близкое -

вкладка CMonthCalCtrl


\CmnCtrl1\MonthCal.cpp
\CmnCtrl1\MonthCal.h

и там посмотреть как происходит работа с меткой Selection

Как выводится текущая дата в метку Selection ?


\CmnCtrl1\MonthCal.cpp


void CMonthCalPage::HandleSelect


	m_pszSelection.Format(_T("%02d/%02d/%2d"),ct.GetMonth(),ct.GetDay(),ct.GetYear());
	

//...

CMonthCalPage::CMonthCalPage

//...

m_pszSelection = _T("");


//...

void CMonthCalPage::DoDataExchange

//...

	DDX_Text(pDX, IDC_STRSELECTION, m_pszSelection);



Значит делаем по-аналогии

\winsock_samp1\winsock_samp1Dlg.cpp


void Cwinsock_samp1Dlg::DoDataExchange	
	
	DDX_Text(pDX, IDC_STATIC2, m_pszSelection);  //в данной строке возникает ошибка, почему ?


Надо было у добавленного элемента Static Text на форме, прописать в его свойствах этот же ID.


Однако по клику на кнопке Test в элементе Static Text ничего не отображается. Почему ?

внутри
void Cwinsock_samp1Dlg::OnBnClickedButtonTest


Добавил вызов
UpdateData(TRUE);


Но и это не решило вопрос. Что еще не учтено ?


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

void Cwinsock_samp1Dlg::OnBnClickedButtonTest()
{
	// TODO: Add your control notification handler code here
	//m_pszSelection.Format(_T("%02d/%02d/%2d"),ct.GetMonth(),ct.GetDay(),ct.GetYear());

	int i = 1;

	m_pszSelection.Format( _T("test %02d"), i );

	UpdateData(FALSE);  //надо было просто делать FALSE - и это решило проблему !
	//если TRUE - ничего не происходит
	
	
	
Работает !


Для проверки сделал, 


void Cwinsock_samp1Dlg::OnBnClickedButtonTest()
{
	// TODO: Add your control notification handler code here
	//m_pszSelection.Format(_T("%02d/%02d/%2d"),ct.GetMonth(),ct.GetDay(),ct.GetYear());

	//int i = 1;

	time_t osBinaryTime;
	time( &osBinaryTime ) ;

	CTime ct( osBinaryTime );
	//ct.
	m_pszSelection.Format( _T("%02d/%02d/%2d %02d:%02d:%02d"),ct.GetMonth(),
		ct.GetDay(),ct.GetYear(), ct.GetHour(),
		ct.GetMinute(), ct.GetSecond() );

	UpdateData(FALSE);
}


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


	
Переходим к работе с Windows Sockets 2

	
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/winsock/winsock/initializing_winsock.htm



void Cwinsock_samp1Dlg::OnBnClickedButtonTest()
{
	// TODO: Add your control notification handler code here

	WSADATA wsaData;
	
	int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );

	int iRes2 = 0;

	if ( iResult != NO_ERROR )
	{
		//printf("Error at WSAStartup()\n");

		iRes2 = -1;
	}

	//m_pszSelection.Format(_T("%02d/%02d/%2d"),ct.GetMonth(),ct.GetDay(),ct.GetYear());

	//int i = 1;

	time_t osBinaryTime;
	time( &osBinaryTime ) ;

	CTime ct( osBinaryTime );
	//0x%x
	m_pszSelection.Format( _T("%02d/%02d/%2d %02d:%02d:%02d iResult = 0x%x"),
		ct.GetMonth(), ct.GetDay(),ct.GetYear(), ct.GetHour(),
		ct.GetMinute(), ct.GetSecond(), iRes2 );

	UpdateData(FALSE);
}



Ошибок нет, всё ок.

Идём дальше.


Эта сфера деятельности уже не приносит такой прибыли, которую приносило 5-10 лет назад.
Тогда был настоящий бум.

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

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

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

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

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


Но человеку нужно нечто большее. Всегда что-то особенное. Необычное. Музыка души.
Свободный полёт. Фантазия. Сон. Тонкая грань мечты и действительности.
Каждый видит мир по-своему. В одном мы все похожи - нам нужна мечта.

Без неё мир не изменится. Человек перестанет быть человеком. Где эта тонкая пленка реальности
и сна ?

										* * *

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

И он погрузился в сон. Синева. Простор и облака. Во сне мы можем делать многое,
чего не можем наяву. Решать сложные проблемы. Находить ответы на трудные вопросы.
Так и он. Думал и мечтал. И все это протекало легко и безмятежно.

Никуда не надо было бежать. Ни от кого убегать. Просто иной мир. Параллельный
и всеобъемлющий. Может быть он более реален, чем вне сна.

И там царит вечное лето. 

Всё происходит очень быстро. Но там время течет в другом режиме. Здесь 5 минут,
там - возможно целая жизнь. 

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

И Антон увидел нечто новое. Другой мир - такой, каким он будет. Всё будет сложнее,
и в то же время упростится на новом уровне.

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

Да - о таком еще можно только мечтать. ВОТ ОНО !
Начинаем.

Оказывается мечать тоже надо уметь. А как вы думали ? В любом деле важен опыт
и умение.

... Люди годами выстраивают свой бизнес, а ты хочешь за 5 минут заработать полмиллиона.
Что же такое ты должен сделать ?


ping ping ping

Раздалось вдруг.

Пришло время изучать ping.

Ping — утилита для проверки целостности и качества соединений в сетях на основе TCP/IP,
а также обиходное наименование самого запроса.

Первоначально словом «ping» (по созвучию) именовали направленный акустический
сигнал противолодочных гидролокаторов или «асдиков» (англ. ASDIC, аббревиатура от
Allied Submarine Detection Investigation Committee) времён Второй мировой войны.

Утилита отправляет запросы (ICMP Echo-Request) протокола ICMP указанному узлу сети
и фиксирует поступающие ответы (ICMP Echo-Reply). Время между отправкой запроса
и получением ответа (RTT, от англ. Round Trip Time) позволяет определять двусторонние
задержки (RTT) по маршруту и частоту потери пакетов, то есть косвенно определять
загруженность на каналах передачи данных и промежуточных устройствах.

В Microsoft SDKs\Windows\v7.0

есть пример исходного кода для написания этой утилиты -
c:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\netds\winsock\ping\Ping.cpp

Её код Мы и будем сегодня изучать.

Сначала важные вопросы:


где скачать Microsoft SDK Windows v7.0 ?

https://www.microsoft.com/en-us/download/details.aspx?id=3138

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

Объём скачиваемых данных составляет около 2.5 Gb


Исходный код будем открывать в MSVS 2005 и компиляцию выполнять там же.

Созданное приложение является консольным. Поэтому для его запуска
откройте окно Коммандной строки Windows - Пуск - Программы - Служебные Windows -
Коммандная строка

И сразу же смените путь введя команду

cd и скопировав и вставив путь 
C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\netds\winsock\ping\Release

Тогда введя ping - и нажав Enter Вы получите распечатку доступных опций утилиты ping:

usage: ping [options] 
        host        Remote machine to ping
        options:
            -a 4|6       Address family (default: AF_UNSPEC)
            -i ttl       Time to live (default: 128)
            -l bytes     Amount of data to send (default: 32)
            -r           Record route (IPv4 only)
			
			
Если не вводить команду cd, а сразу ввести ping - то Вы запустите стандартную
утилиту ping из комплекта стандартных утилит Windows.

Так что будьте внимательны !


Если Вы запустите стандартную утилиту ping - то набор её параметров будет совсем иным -

cd c:\

c:\>ping

Использование: ping [-t] [-a] [-n <число>] [-l <размер>] [-f] [-i ]
         [-v ] [-r <число>] [-s <число>]
         [[-j <список_узлов>] | [-k <список_узлов>]] [-w <время_ожидания>]
         [-R] [-S <адрес_источника>] [-4] [-6] конечный_узел

Параметры:
    -t                    Задает проверку связи с указанным узлом до
                          прекращения.

...

и т. д.

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

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

cd и скопировав и вставив путь 
C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\netds\winsock\ping\Release

(вводится только один раз, далее вы уже остаетесь в данной папке и вводить команду
cd и путь повторно уже не нужно)

ping host megainformatic.ru

И получите в ответ что-то подобное -

Pinging 81.177.141.113 with 32 bytes of data

Reply from 81.177.141.113: bytes=32 time=62ms TTL=128
Reply from 81.177.141.113: bytes=32 time=47ms TTL=128
Reply from 81.177.141.113: bytes=32 time=47ms TTL=128
Reply from 81.177.141.113: bytes=32 time=47ms TTL=128


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

Здесь и далее мы остановимся на более практических вопросах:

- Какой именно код используется для работы с Windows Sockets 2;

и

- Как собственно работает ping - т. е. какой код требуется, чтобы
обеспечить её работу.


Естественно полный исходный код Мы здесь приводить не будем -
его Вы можете посмотреть сами скачав Microsoft Windows SDK 7

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

Все особенности применения можно почерпнуть из вышеупомянутых мануалов по
Microsoft Windows SDK 7, которые Вы найдёте там же -

например -
C:\Program Files\Microsoft SDKs\Windows\v7.0\Help\1033\WinSock.hxs


Чем его открыть ?

http://www.softpedia.com/get/System/OS-Enhancements/Help-Explorer-Viewer.shtml#download

и кликаем кнопку Softpedia Mirror (US)

Скачиваем и устанавливаем.


Программа оказалась довольно примитивной.
Она не поддерживает даже drag'n'drop.

Чтобы открыть вышеупомянутый 
C:\Program Files\Microsoft SDKs\Windows\v7.0\Help\1033\WinSock.hxs

Вам надо сначала открыть саму прогу -
C:\Program Files (x86)\HelpExplorer Software\Help Explorer 3\bin\helpexplorer.exe

Затем в ней выбрать пункт меню File > Open
и в окне диалога указать нужный файл.

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

Главное мануал таки открылся.

Help Explorer 3.0 для открытия hxs файлов

Утилита как видим на скрине не первой свежести - датирована аж 2006 годом.

Но главное работает.

Так что двигаемся далее.


Итак,

Смотрим код в исходном файле -
c:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\netds\winsock\ping\Ping.cpp


Исполнение начинается с функции main. В этом легко убедиться запустив приложение
из MSVS в режиме отладки, т. е. Debug


int __cdecl main(int argc, char **argv)
{



Какова основная задача приложения ping ?


    // Load Winsock
    if ((rc = WSAStartup(MAKEWORD(2,2), &wsd)) != 0)
	{
		//...


Т. е. загрузить Win Sock

Если ошибок нет - двигаться дальше:

Выполнить ряд проверок

и создать Raw Socket -


    // Create the raw socket
    s = socket(gAddressFamily, SOCK_RAW, gProtocol);



Который будет использоваться для обмена информацией с запрашиваемым узлом
сети интернет.

Если адрес узла в виде IP или доменного имени (через предшествующий параметр host)

как например

ping host megainformatic.ru

Не был задан - то ничего не происходит.

Точнее утилита просто выдает в консоль ошибку 

Pinging :: with 32 bytes of data

WSAIoctl failed: 10022
sendto failed: 10049


В конце работы обязательно освобождаются все выделенные ресурсы
и в том числе вызывается


    WSACleanup();



И ничего не происходит.


Озадачимся вопросом: Как запустить ping в режиме отладки и при
этом передать параметр узла с которым мы хотим провести проверку ?


как передать параметр в консольное приложение в режиме отладки MSVS 2005


https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#
q=%D0%BA%D0%B0%D0%BA+%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%82%D1%8C+%D0
%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80+%D0%B2+%D0%BA%D0%BE%D0%BD%
D1%81%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5+%D0%BF%D1%80%D0%B8%D0%BB%D0%BE
%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5+%D0%B2+%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0
%B5+%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B8+MSVS+2005



http://forum.sources.ru/index.php?showtopic=275506

В MSVS 2005 студии по своему проекту правой кнопкой мышки и выбрать
Properites->Debugging->Command Arguments


как передать параметр в консольное приложение в режиме отладки MSVS 2005


Теперь можно в режиме отладки отследить по коду как используется 
заданный параметр коммандной строки: host megainformatic.ru

и собственно понять что и где происходит и как работает.

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


    // Load Winsock
    if ((rc = WSAStartup(MAKEWORD(2,2), &wsd)) != 0)
	{
		//...



как отображаются значения переменных в режиме
отладки - для примера показано значение переменной rc после выполнения строк
кода if ((rc = WSAStartup(MAKEWORD(2,2), &wsd)) != 0)


Оно как видим равно 0, значит всё ОК. Win Sock 2 был успешно загружен,
ошибок не возникло и выполнение движется дальше по коду.


Нажимая клавишу [F10] по-шагово выполняем код строчку за строчкой и 
смотрим что меняется внутри переменных.


Например видим вызов функции ResolveAddress


    // Resolve the destination address
    dest = ResolveAddress(


Функция ResolveAddress объявлена в модуле
c:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\netds\winsock\ping\resolve.cpp

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

Лучше понять как это происходит можно поставив контрольную точку внутри
функции ResolveAddress в модуле 
c:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\netds\winsock\ping\resolve.cpp

или в момент когда выполнение дойдёт до строки 

    // Resolve the destination address
    dest = ResolveAddress(


момент когда выполнение дойдёт до строки ResolveAddress

Воспользоваться клавишей [F11].

нажимаем клавишу [F11] чтобы попасть в реализацию функциюю ResolveAddress, описанную в модуле c:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\netds\winsock\ping\resolve.cpp


Если Вы уже ушли в исполнении дальше по коду (нажимая [F10]), то
знайте, что

вернуть исполнение на строку назад конечно нельзя.
Но вы можете просто дать приложению выполниться до конца нажав
стрелочку Continue на панели инструментов. А после того 
как приложение завершит работу, снова перезапустить его
в режиме отладки, используя эту же кнопку (после завершения работы приложения
она называется Start Debugging).


кнопка Start Debugging в среде MSVS 2005 для запуска приложения в режиме отладки


Двигаться внутри кода функции ResolveAddress можно также - нажимая [F10], а значения
переменных узнавая путём наведения на них указателя мыши.


Вы наверное уже заметили три вещи:

1) Повествование уже далеко ушло в сторону от романа Ethernity - Вечность.
2) На картинке выше, изображена контрольная точка останова - красный кружок.
3) Рассказ о Win Sock параллельно переплетается с особенностями
использования MSVS 2005 студии для отладки Ваших приложений и
изучения исходного кода примеров.

Отвечу по-порядку:

1) Повествование уже далеко ушло в сторону от романа Ethernity - Вечность.

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

Не просто вольное чтение, но и какая-то полезная информация.

2) На картинке выше, изображена контрольная точка останова - красный кружок.

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

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

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


3) Рассказ о Win Sock параллельно переплетается с особенностями
использования MSVS 2005 студии для отладки Ваших приложений и
изучения исходного кода примеров.

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

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

От этого, как говорится, никуда не деться.

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


далее мы узнаем о,

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

Можно узнать IP-адрес по доменному имени ?
Как ведется работа с Windows Sockets 2 ?

И конечно история Антона и Ани будет продолжена.


к странице 1 к странице 2 к странице 3 страница 4 к странице 5

подробнее

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

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

 

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

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

2.      Световой блик в нижней части облака – это фигура повторяющая по форме низ облака, белого цвета и с применением инструмента Полупрозрачность (Interactive Transparency Tool).

 

3.      Небо – это прямоугольник на заднем плане, не имеющий обводки, с градиентной заливкой.

4.      Капельки дождя, падающие из облака: создайте эллипс, создайте треугольник используя Polygon Tool и количество вершин - 3

 

разместите треугольник как показано на рисунке

 

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

 

Выберите инструмент Shape и выделив лишние узлы (с нажатой клавишей Shift) удалите их клавишей [Delete].

Поверните каплю: для этого выберите объект, он станет выделен. Щелкните в центре объекта (по крестику).

Появятся маркеры вращения/искажения. Используя их поверните объект.

 

Создайте для капли обводку голубого цвета, тощиной 1 pt и градиентную заливку линейного типа, в требуемом направлении, с требуемыми цветами: пока объект является текущим (выбранным) выберите в окне свойств объекта вкладку Outline (обводка). Замечание: если это окно не отображается или вы скрыли его – выберите пункт Window > Dockers > Properties

На вкладке задайте требуемые параметры – width (толщину) и color (цвет) обводки.

Для выполнения градиентной заливки откройте вкладку Заливка (Fill) и выберите режим градиентной заливки (Fountain fill)

 

Для изменения параметров градиента: задайте требуемый вид и цвета. Нажав кнопку Edit вы сможете задать и ряд дополнительных параметров, в частности: Angle – угол вращения и Mid-point – срединную точку, задающую баланс цветов градиента

 

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

 

Равнина на рисунке – это прямоугольник, без обводки, с текстурной заливкой из группы Samples 9 > Above the Storm. Вам останется только задать в параметрах текстуры подходящие цвета.

Не забудьте пометить равнину на задний план – правая кнопка мыши в центре объекта>Order>To Back, иначе она закроет персонажа.

 

Создание объектов произвольной формы: горы, река, камень поднятый над головой – для этого можно использовать инструменты Freehand и Shape. Причем Freehand используйте для создания прототипа объекта.

 

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

Для автозамыкания контура используйте кнопку Auto-Close curve на панели свойств

Shape – используйте для видоизменения формы объекта – за счет перемещения существующих узлов, их добавления/удаления, изменения типа отрезков между узлами (кривая/прямая).

 

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

 

Надпись создается инструментом Text

Текст может быть двух видов: Artistic (художественный) и Paragraph (форматированный). Первый создается посредством простого щелчка и набором с клавиатуры, при этом доступны для изменения все стандартные свойства векторного объекта – масштаб, заливка, обводка и т.п. Второй создается путем рисования курсором мыши рамки и служит для набора блоков форматированного текста. Такой текстовый блок уже не является векторным объектом, поэтому для него доступны только свойства обычные для форматированного текста (шрифт, размер, цвет и т.п.).

Полупрозрачность надписи – см. шаг 2.

 

Тени создаются искусственно или с использованием инструмента Interactive Drop Shadow

 

Инструмент Drop Shadow (падающая тень) позволяет создавать тени от объектов по форме их силуэта. Для этого надо с выбранным инструментом нажать в нужной части объекта (например в центре) и удерживая левую кнопку мыши протянуть в нужном направлении.

Искусственные тени – это фигуры нужной формы, закрашенные черным с применением полупрозрачности Transparency.

 

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

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

Система Управления Электронным Магазином - 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 для обработки заказов по партнерским программам для продаж ваших товаров в других интернет-магазинах.

 
     
 

 

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

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

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



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


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