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:56
Вход Регистрация Забыли пароль ?

megainformatic - Создание игры Шар Бумага Карандаш Pencil Paper and the Ball (каникулы зеленого шарика)
Создание игры Шар Бумага Карандаш (каникулы зеленого шарика) Создание аркады (или платформера), это достаточно длительный, серьезный и трудоемкий процесс. Если конечно вы не создаете что-то очень простое и примитивное. Но да
подробнее...

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

megainformatic - статья Тимонина Андрея - Flash. Hello world.

megainformatic - статья Тимонина Андрея - Flash. Экспорт SWC библиотеки.

megainformatic - Тимонин Андрей - Несколько слов о себе

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

megainformatic - статья Тимонина Андрея - Обеспечиваем доступ к объекту из любой точки программы. Singleton

megainformatic - статья Тимонина Андрея - Хронология работы программы. Создаем Лог

megainformatic - статья Тимонина Андрея - Поиск файлов. Получаем список файлов каталога.

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

megainformatic - статья Тимонина Андрея - States. Создаем менеджер состояний игры.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 1. Создаем страничку регистрации на сайте.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 2. Создаем обработчик, и заносим информацию о пользователе в Б.Д.

megainformatic - статья Тимонина Андрея - Таймер. Выводим время игры.

megainformatic - статья Тимонина Андрея - DirectX9. Создаем основной класс обработки графики.

megainformatic - статья Тимонина Андрея - DirectX9. Создаем первое приложение.

megainformatic - Что нужно знать для создания сайта ? float - использование в css - стилях

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 2 - пишем свою композицию COLD

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 3 - экспериментируем с композицией COLD

megainformatic - Что нужно знать для создания сайта ? Стандартные шрифты для сайта

megainformatic - Что нужно знать для создания сайта ? ASC II Коды символов

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 4 - пишем первый вариант композиции COLD

megainformatic - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. СОДЕРЖАНИЕ

megainformatic - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. Энергетический кокон

megainformatic - Модуль галерей для любой cms

megainformatic - Портфолио выполненных проектов сайтов и приложений

megainformatic - Мои Музыкальные Миры - страница 2

megainformatic - megainformatic cms rs

megainformatic - модуль Падающий снег

megainformatic - проект Open Shop

megainformatic - Рисуем красивую девушку всего за 6 шагов

megainformatic - Галерея красивых рисованных девушек

megainformatic - НОВОГОДНЕЕ ОБРАЩЕНИЕ СОЗДАТЕЛЯ webinformatic К ЖИТЕЛЯМ ПЛАНЕТЫ интернет

megainformatic - Отзывы оставленные пользователями как впечатление о проделанной работе или что-либо понравившееся на сайте

megainformatic - Уроки css - атрибут position

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - СОДЕРЖАНИЕ

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - Глава 1 - Обычный день

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - Глава 2 - Начало (begin)

Новогодняя дискотека 2013 на megainformatic точка ru

megainformatic - Программируем на C++ с использованием MFC

megainformatic - Программируем на C++ с использованием MFC - Создание MFC приложения

megainformatic - Программируем на C++ с использованием MFC - Создание MFC приложения - hello, world !

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

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

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

Разное

megainformatic - Как создать игру ? - Пишем игровой движок с нуля - DXUTMainLoop - цикл работы DirectX-приложения

megainformatic - Варианты макетов Психолог 911

megainformatic - Шаблоны для сайтов - что это и какие они бывают ?

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - Глава 3 - Кто он ? (who is ?)

megainformatic - Мои Музыкальные Миры - готовая музыка mp3 - новинки 2013 года

megainformatic - Теория и практика хакерских атак - самозащита от нападения

megainformatic - Теория и практика хакерских атак - самозащита от нападения - Способы подмены реального IP

megainformatic - Fruity Loops Studio 9 - Как синтезировать свои сэмплы - изучаем возможности плагина Sytrus

megainformatic - Видоизменяем тему для Wordpress под свои нужды

megainformatic - Flash приложения и игры - Шаг 3 - управляемый шарик

megainformatic - Учимся создавать флеш-игры, что нужно знать для того, чтобы заняться созданием flash приложений и игр ?

подробнее

     
  Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2)  
     
  модель коммандного центраСкачать готовую модель вы можете кликнув по картинке.  
     
  Этот объемистый урок расскажет Вам как научиться создавать нечто подобное: всем известно, что вышла игра StarCraft 2 компании Blizzard. Об этой игре ходят легенды. Но не дожидаясь когда вам удастся засесть за игру, а также для того, чтобы пополнить свои навыки и умения попробуем вообразить себя "крутым дизайнером" (прямо как из Blizzard) и попробовать создать модель и текстуру для коммандного центра из StarCraft 2.  
     
 

Часть 3

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

 
     
  Как можно заметить готовая стойка (которую Вы вскоре создадите) включает два элемента в основе которых лежит примитив цилиндр.  
     
  готовая стойка для Коммандного Центра  
     
  Поэтому - создадим цилиндр. Радиус 0,5 единиц, Высота 0,1, Количество сегментов по высоте - 1, в основании (cap) - 1, количество сторон (Sides) - 8;  
     
 

Размеры даны в относительных единицах (в качестве них могут быть метры, дюймы или другие допустимые единицы - в зависимости от того какая система единиц измерения у Вас установлена - Customize > Units Setup). Количество сегментов (сторон) следует выбирать опытным путем исходя из того, как Вы будете далее видоизменять созданный примитив.

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

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

 
     
  будущая стойка - а пока - сплюснутый цилиндр  
     
  Щелчком правой кнопки мыши в окне стека модификаиций преобразуем объект в editable mesh. Используя технологию выдавливаний, которую Вы уже применяли при создании основания Коммандного Центра, формируем основу стойки -  
     
   
     
   
     
   
     
  На рисунках выше показано как последовательно нужно производить выдавливания со скосами (Bevel) для придания нужной формы.  
     
  Следующий этап - выдавливание 4 маленьких ножек и формирование держателя к которому будет крепиться второй видоизмененный цилиндр опоры. Тут будет одна маленькая особенность - дело в том, что опоры должны располагаться относительно основания коммандного центра повернутыми относительно своего первоночального положения на 23,5 градуса. Вам нужно путем выбора инструмента Select And Rotate повернуть заготовку будущей опоры на этот угол относительно оси Z.  
     
  Выберите весь объект в целом (editable mesh) в стеке модификаций и поверните на нужный угол.  
     
   
     
  Теперь, прежде чем выдавливать ножки, нужно сформировать в верхней части стойки грань. Мы выполним это путем надреза -  
     
   
     
  Сначала выберите в стеке модификаций пункт Edge или Face. Чтобы легче было выполнять надрез (создание нового ребра на поверхности грани или полигона) на панели инструментов включите 3-х мерное выравнивание. Нажмите кнопку Cut в группе Edit Geometry окна параметров editable poly. Обратите внимание в каком месте нужно выполнять надрезы, иначе держатель получится в неверном положении.  
     
   
     
  Аналогично выполните второй надрез. После этого отожмите кнопки Cut и Snaps Toggle (3-х мерную привязку).  
     
  Теперь дело за малым - выдавить держатель и 4 ножки -  
     
   
     
   
     
   
     
  На какое примерно расстояние выполнять сдвиг грани для формирования держателя? Можете ориентироваться на готовую модель опоры или подогнать по месту позднее.  
     
   
     
   
     
  Теперь создаем второй цилиндр - он будет играть роль промежуточного звена в прикреплении опоры к основанию Коммандного центра -  
     
   
     
  Для создания можете использовать следующие предварительные размеры - Radius = 0,2 Height = 0,4 Height segments = 1 Cap segments = 1 Sides = 8  
     
  Теперь Вам нужно выполнить 2 вращения - на 90 градусов по оси Y и на 45 по оси Z и разместить цилиндр в нужном месте опоры.  
     
   
     
   
     
   
     
   
     
   
     
  После проделанных манипуляций мы получим цилиндр лежащий на держателе ребром -  
     
   
     
  Казалось бы, достаточно повернуть его вокруг своей оси на нужный угол (-23,5 градуса) и уложить точно на держатель.  
     
   
     
  Но не тут то было. Все наши попытки привести к правильному повороту не приводят к оному. Почему? Да потому что мы повернули локальную систему координат относительно глобальной. Решением является выбор локальной системы координат объекта, относительно которой получится сделать задуманное -  
     
   
     
  Теперь остается только подобрать нужные размеры, преобразовать цилиндр в editable mesh и выполнить выдавливание нужной формы.  
     
  Думаю с этим Вы справитесь самостоятельно.  
     
  Теперь остается только сгруппировать или связать два элемента формирующие единую опору, чтобы они не "рассыпались" при дальнейших манипуляциях. Лучше конечно использовать связывание (Link), т.к. оно поддерживается форматом X.  
     
  Для выполнения связывания выберите связываемый объект (звено опоры), используя инструмент Select And Link протащите курсор к родительскому (корневому) объекту - опоре.  
     
   
     
  Связывание завершено. Теперь при перемещениях опоры звено опоры двигается совместно. О связывании подробно рассказывалось в уроке посвященном 3D-анимации .  
     
  Теперь Вам остается разместить опору в нужном месте основания базы -  
     
   
     
  Теперь если выполнять перемещения или вращения с нажатой клавишей [Shift] можно создать копии опор и разместить их в нужных местах. Только имейте в виду, что для клонирования нужно выбрать и опору и звено!  
     
   
     
   
     
   
     
  Корректируем положение созданной опопы, а после выделяем все элементы обоих полученных опор и с нажатой клавишей [Shift] поворачиваем на 90 градусов по оси Z в глобальной (view или world) системе координат.  
     
   
     
  [назад] [далее мы создадим элементы крыши]  
     
подробнее

Сообщить об ошибке в приложении, продукте или на сайте

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

Через форму Оставить комментарий, см. ниже, можно сообщить об обнаруженной ошибке.

Пожалуйста укажите точное название приложения или продукта в котором обнаружена ошибка;

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

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

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

подробнее

       
  Урок 2: Синтез звука (часть 2)    
       
 

Продолжаем наш урок. Рассмотрим остальные параметры окна FM-синтеза.

Total output waveform length - как раз то, что определяет продолжительность Вашего сэмпла - в секундах. Можете задавать и доли секунды.

Длительность вашего сэмпла
 
       
 

Теперь посмотрите на переключатели 1-2-3-4 и в поле Configuration ниже. Переключатели позволяют переходить в окно параметров каждого из 4-х операторов FM-синтезатора, а конфигурация задает схему взаимодействия операторов, что непосредственно влияет на качественный состав синтезируемого звука. Операторы представляют краеугольный камень FM-синтеза. Каждый оператор - это набор параметров для генерации составляющей звука. Схема взаимодейтсвия определяет количество участвующих в синтезе операторов (от 1 до 4) и тип взаимовлияния. Попробуйте перемещать ползунок под схемой конфигурации - вы увидите все возможные схемы, всего их 13. И этого хватает с избытком.

Настройка операторов FM-синтезатора
 
       
 

Каждый оператор имеет свой набор параметров. Текущий оператор параметры которого вы можете настраивать в данный момент определяется включением соответствующего переключателя 1-2-3-4.

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

Самый заметный параметр оператора - это окно настройки формы огибающей. Огибающая определяет следующие фазы звука: Нарастание (Attack), Спад (Decay), Удержание (Sustain), Затухание (Release).

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

Минимальное число узлов естественно 2 - это начало и конец графика. Максимальное 8 - обусловлено пределом аппаратных возможностей звуковой карты.

Поле окна настройки огибающей
 
 

Попробуем создать форму огибающей следующего вида:Здесь четко прослеживаются все 4 базовые фазы звуковой волны: Нарастание-Спад-Удержание-Затухание. Исходя из формы графика и названий данных фаз Вам все должно стать понятно. Т.о., нарастание - фаза подъема звука от нулевого значения амплитуды до некоторого максимума; спад - снижение амплитуды от максимума (конец фазы нарастания) до некоторого минимума; удержание - фаза примерно постоянной, неизменной амплитуды; и наконец, затухание - переход звука в тишину. Данные фазы введены условно, для облегчения выделения основных составляющих звука. У различных звуков, которые Вы будете синтезировать отдельные фазы могут находиться в различных причудливых сочетаниях или отсутствовать вообще.

Настройка огибающей звука для оператора 1.
 
       
 

Почему? Да потому что различные звуки имеют различные огибающие. Кроме того, Вы можете расставить (см. выше) до 8 точек огибающей у каждого из операторов, а это уже дает заведомо больше 4 рассмотренных нами фаз. Если использовать все 8 узлов огибающей то можно создать до восьми! фаз огибающей звука. На рисунке показаны примеры огибающих.

Примеры огибающих - вверху простая прямая; внизу - сложная 8-ми фазная
 
       
  Потренировавшись немного Вы сможете теперь настроить любую форму огибающей. Рассмотрим остальные параметры оператора. Они достаточно просты: Amplitude - громкость звуковой частоты генерируемой оператором; Waveform - форма звуковой волны (синусоида, Квадрат, Пилообразный и т.п.); Frequence - частота звука (Гц); Feedback - процент обратной связи, определяющей взаимовлияние частоты на саму себя. Вообщем-то это всё! Этих знаний Вам уже вполне достаточно для самостоятельного синтеза практически любого звука (сэмпла). Давайте-ка попрактикуемся!  
       
  Мы еще так и не создали сэмпл ударный "бочка". Попробуем сделать это. Несмотря на то, что технология синтеза сэмплов вроде бы достаточна проста, на самом деле создание новых сэмплов - целое искусство. Вы сами в этом скоро убедитесь. Дело в том, что синтезировать новый звук на основании любых заданных параметров достаточно просто. А вот попробуйте-ка добиться, чтобы Ваш сэмпл стал похож на какой-то музыкальный инструмент! А, то-то же! Дело в том, что технология обратного синтеза (или ресинтеза), задача не тривиальная. Поэтому, чтобы создать действительно что-то стоящее Вам придется изрядно по-потеть. Во-первых, можно оцифровывать и анализировать имеющиеся в вашем распоряжении звуки и использовать их как готовые сэмплы. Во-вторых, можно попробовать воссоздать при помощи FM-синтеза тот или иной звук. Это уже гораздо труднее. Хотя нет ничего невозможного! Итак, вперед, за дело!  
       
 

Чтобы синтезировать сэмпл ударный "бочка" (а мы с Вами попробуем сейчас создать свою собственную "новую"! бочку) Вам нужно задать следующие параметры:

Preset - нет; Configuration 2->1, т.е.

Length - 0,5 секунд; Параметры 1-го оператора: форма огибающей - см. рисунок ---->

Громкость - на ваш вкус; waveform - Sinus; Frequence - 5Hz;

Общие параметры и параметры первого оператора
 
 

Параметры 2-го оператора: форма огибающей - см. рисунок ---->

Громкость - на ваш вкус; waveform - Sinus; Frequence - 20Hz;

Теперь смело жмите Preview и слушайте что получается. Можете поэкспериментировать меняя различные параметры по своему вкусу. В дальнейшем чтобы делать свои эффектные сэмплы Вам придется много много экспериментировать! Заметим, что параметры FM-синтезатора достаточно мощные и могут генерировать не только слышимые, но и ультра и инфра звуки (вспомните, что человеческое ухо воспринимает лишь диапазон частот от 20 до 20000Hz).

Общие параметры и параметры 2-го оператора
 
  Поэтому следуйте в своих пробах такому правилу: если после установки новых параметров никакого звука нет, значит полученный Вами звук выпадает из слышимого диапазона. Просто уменьшайте предельные значения установленных Вами параметров (например, частоты, обратной связи и т.п.) до тех пор, пока звук не появится вновь!    
       
  Итак, если у Вас всё получилось, и Вам всё понятно, то жмем ОК и получаем новый сэмпл! Сохраните полученный сэмпл в формате wav. Далее мы рассмотрим как использовать созданный сэмпл для создания музыки в программе Impulse Tracker.  
       
  [Предыдущий урок] [Следующий урок] [Все уроки]  
       
подробнее

 

Что нужно знать для создания DirectX-приложений на C++ в среде
Microsoft Visual Studio 2008

 
     
  Урок 4 Создание Win32-приложений. Стандартные диалоги. Изучение
сопутствующих конструкций языка. Консольные Win32-приложения.
Указатели. Ссылочный тип. Массивы.
 
     
 

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

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

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

 
     
  [назад] [далее] [к содержанию]  
     
  Мы рассматриваем основы программирования на C++ в среде программирования MSVS 2008  
     
 

25/11/2008, 27/11/2008

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

меню Save и Load

Работа с общими диалогами в Win32-приложениях описана в разделе

MSVS 2008 > Help > Contents > Win32 and COM Development > User Interface >

Windows User Experience >

Windows Management > Windows User Interface > User Input > Common Dialog Box Library

 
     
 

//++ Учебное задание: использование общего диалога для выбора цвета

Работа с общим диалогом выбора цвета описана в разделе

MSVS 2008 > Help > Contents > Win32 and COM Development > User Interface >

Windows User Experience >

Windows Management > Windows User Interface > User Input > Common Dialog Box Library >

Common Dialog Box Library Overviews > Color Dialog Box

Сопутствующие необходимые знания

chcol.lpCustColors - использование массивов

Требуется указатель на массив из 16-ти элементов типа COLORREF (статичный или локальный)

Работа с массивами в приложениях Win32 (Native Development) описана в разделе справки -

MSVS 2008 > Help > Contents > Development Tools and Languages > Visual Studio >

Visual C++ > Reference >

C/C++ Languages > Declarators > Arrays

 
     
 

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

элементов Visual C++

Работа с консольными приложениями позволит Вам освоить наиболее общие конструкции

языка

Visual C++ не вдаваясь в детали создания интерфейса пользователя.

Для создания консольного приложения Win32 нужно закрыть текущий солюшн (Close solution)

с которым Вы

работали и выбрать File > New > Project > Win32 > Win32 Console Application, указать имя и папку

для создаваемого проекта.

Добавить в файл с исходным кодом необходимый код, выполнить сборку Build, а

для просмотра результатов

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

Стандартные > Командная строка

 
     
 

Например Ваш скомпилированный файл находится в папке

H:\Andrew\work\gamecre\DXSDK_Aug2008\MyWorks\NuPogodiFull\NuPogodiFull_vs2008\

training\LearnPointers\Debug

 
     
 

Тогда, в окне Коммандной строки набираем

H:

и нажимаем Enter. Тем самым переходим на диск H.

копируем нужный путь прямо из проводника.

в коммандной строке набираем

cd

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

получается

cd H:\Andrew\work\gamecre\DXSDK_Aug2008\MyWorks\NuPogodiFull\NuPogodiFull_vs2008\

training\LearnPointers\Debug

нажимаем Enter.

Теперь мы находимся в этой папке.

Можете применить команду dir и вы увидите содержимое этого каталога.

Для очистки экрана консоли удобно использовать команду очистки экрана cls

Теперь Вам остается только набрать имя нужного exe-файла любыми буквами

(хоть большими, хоть маленькими, хоть вразнобой - никакой разницы, т.к. консоль

запускает файлы по именам

без учета регистра (заглавные/строчные)

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

 
     
 

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

запускать созданное

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

 
     
 

Пример кода для понимания указателей (Pointers) - пример взят из MSVS Documentation

Для проверки и экспериментов с кодом используйте консольное приложение Win32

 
     
  // pointer.cpp
// compile with: /EHsc
#include <iostream>
int main() {
int i = 1, j = 2; // локальные переменные, размещаются в стеке
int *p; // указатель на целое (int)

// a pointer may be assigned to "point to" the value of
// another variable using the & (address of) operator

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

p = & j;

// since j was on the stack, this address will be somewhere
// on the stack. Pointers are printed in hex format using
// %p and conventionally marked with 0x.

// поскольку j размещено в стеке, адрес будет представлять
// какой-то из адресов стека. Указатели распечатываются в шестнадцатиричном формате

с использованием
// %p в функции printf_s и по соглашению помечаются 0x.

printf_s("0x%p\n", p);

// The * (indirection operator) can be read as "the value
// pointed to by".
// Since p is pointing to j, this should print "2"

// Оператор * (оператор разыменования) может быть читаем как "указатель на значение"
// Поскольку p указывает на j, будет выведено "2"

printf_s("0x%p %d\n", p, *p);

// changing j will change the result of the indirection
// operator on p.

// изменение j изменит результат применения оператора разыменования
// к p.

j = 7;
printf_s("0x%p %d\n", p, *p );

// The value of j can also be changed through the pointer
// by making an assignment to the dereferenced pointer

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

*p = 10;
printf_s("j is %d\n", j); // j теперь равно 10

// allocate memory on the heap for an integer,
// initialize to 5

// выделение памяти на куче (heap) для целого и,
// инициализация значением 5

p = new int(5);

// print the pointer and the object pointed to
// the address will be somewhere on the heap

// печать указателя и объекта на который указывает адрес
// где-то на куче (heap)

printf_s("0x%p %d\n", p, *p);

// free the memory pointed to by p

// освобождение памяти на которую указывает p
delete p;

// At this point, dereferencing p with *p would trigger
// a runtime access violation.

// с этого места разыменование p как *p будет давать
// ошибку нарушения прав доступа к памяти во время выполнения программы

// Pointer arithmetic may be done with an array declared
// on the stack or allocated on the heap with new.
// The increment operator takes into account the size
// of the objects pointed to.

// Вычисления с указателями могут выполняться для массива объявленного
// на стеке или выделенного на куче с помощью new.
// Оператор инкремента использует размер
// объектов на которые указывает указатель

p = new int[5];
for (i = 0; i < 5; i++, p++) {
*p = i * 10;
printf_s("0x%p %d\n", p, *p);
}

// A common expression seen is dereferencing in combination
// with increment or decrement operators, as shown here.
// The indirection operator * takes precedence over the
// increment operator ++.
// These are particularly useful in manipulating char arrays.

// Часто встречаемое выражение разыменования в комбинации
// с операторами инкремента или декремента выглядит так, как показано ниже.
// Оператор разыменования * выполняется перед оператором инкремента ++
// Это эффективно при манипуляциях с символьными массивами

char s1[4] = "cat";
char s2[4] = "dog";
char* p1 = s1;
char* p2 = s2;

// the following is a string copy operation

// операция копирования строки выглядит так -
while (*p1++ = *p2++);

// s2 was copied into s1, so now they are both equal to "dog"

// s2 копируется в s1, так что теперь обе строки содержат слово "dog"
printf_s("%s %s", s1, s2);
}

 
     
 

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

это связанный список. Пример также взят из MSVS Documentation

 
     
  // pointer_linkedlist.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

struct NewNode {
NewNode() : node(0){}
int i;
NewNode * node;
};

void WalkList(NewNode * ptr) {
if (ptr != 0) {
int i = 1;
while (ptr->node != 0 ) {
cout << "node " << i++ << " = " << ptr->i << endl;
ptr = ptr->node;
}
cout << "node " << i++ << " = " << ptr->i << endl;
}
}

void AddNode(NewNode ** ptr) {
NewNode * walker = 0;
NewNode * MyNewNode = new NewNode;
cout << "enter a number: " << endl;
cin >> MyNewNode->i;

if (*ptr == 0)
*ptr = MyNewNode;
else {
walker = *ptr;
while (walker->node != 0)
walker = walker->node;

walker->node = MyNewNode;
}
}

int main() {
char ans = ' ';
NewNode * ptr = 0;
do {
cout << "a (add node) d (display list) q (quit)" << endl;
cin >> ans;
switch (ans) {
case 'a':
AddNode(&ptr);
break;
case 'd':
WalkList(ptr);
break;
}
} while (ans != 'q');
}

 
     
 

примеры ссылочных (reference) типов -

int &i;
int &i, &j;

 
     
 

читается как ссылка (адрес) на объект i. Синтаксически работа со ссылками полностью аналогична

работе с объектами -

// references.cpp
#include <stdio.h>
struct S {
//структура S содержащая поле i с типом short
short i;
};

int main() {
S s; // Declare the object.
объявляем объект
S& SRef = s; // Declare the reference.
объявляем ссылку
s.i = 3;

printf_s("%d\n", s.i);
printf_s("%d\n", SRef.i);

SRef.i = 4;
printf_s("%d\n", s.i);
printf_s("%d\n", SRef.i);
}

 
     
 

Определение массивов, работа с массивами

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

// arrays.cpp
// compile with: /EHsc
#include <iostream>

int main() {
using namespace std;
int size = 3, i = 0;
//определяем размер массива и индекс

int* myarr = new int[size]; //объявляем массив из size элементов с типом int и выделяем ему

память на куче (heap)

for (i = 0 ; i < size ; i++)
myarr[i] = 10;
//заносим значения в элементы массива

for (i = 0 ; i < size ; i++)
printf_s("myarr[%d] = %d\n", i, myarr[i]);
//печатаем значения элементов массива

delete [] myarr; //освобождаем память
}

 
     
 

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

примерами кода возвращаемся к нашей задаче -

//++ Учебное задание: использование общего диалога для выбора цвета

Работа с общим диалогом выбора цвета описана в разделе

MSVS 2008 > Help > Contents > Win32 and COM Development > User Interface >

Windows User Experience >

Windows Management > Windows User Interface > User Input > Common Dialog Box Library >

Common Dialog Box Library Overviews > Color Dialog Box

Сопутствующие необходимые знания

chcol.lpCustColors - использование массивов

Требуется указатель на массив из 16-ти элементов типа COLORREF (статичный или локальный)

Реализация данной задачи - вывод диалога выбора цвета например при нажатии пункта меню

Save будет выглядеть так (код нужно добавить в функцию WndProc) - показана в следующем уроке

 
     
 

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

смена фона окна приложения в соответствии с выбранным цветом

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



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

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

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

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



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


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