| [GcUp.ru] |
| Форма входа |
| Меню сайта |
| Categories | |||||
|
| Главная » Статьи » Движки и Гейммейкеры |
| Краткое руководство программирования. Введение. Описание интерфейса. Что такое 100% визуальное программирование? С чего начать? Что такое класс и объект. Какова стандартная структура класса? Как работать с классом? Что такое Дизайнер (Designer)? Что такое Моделлер (Modeller)? Краткий курс реального моделирования. Выбор объектов мышкой в работающей программе. Изучаем управление поведением и "язык" объектов. Изучаем технологию управления событиями. Действие гравитации и других полей. Как одни объекты могут перемещать другие? Что такое классификация? Создание форм и собственного интерфейса. Распространение результатов Вашего творчества. Переходим к искусственному интеллекту. Запуск команд по принятым решениям. Многокаскадное соединение матриц. Введение. Лучшая программа для Вашего творчества, практически в любой области - от разработки игрушек до обучающих программ и создания моделей Искусственного Интеллекта. Высококачественная графика сочетается с полным моделированием реальных законов Природы! Теперь Вы можете воплощать свои фантазии не хуже опытных программистов. Работая с "Крылом мысли" Вы можете вообще не знать программирования, но можете, если хотите, углубляться в такие тонкости этого искусства, которых Вам не позволит достигнуть ни Delphi, ни Visual Basic, ни Си. Почему так просто? Потому что "Крыло" - это конструктор типа "Lego", где Вы можете все собирать из готовых кусочков. Почему так глубоко? Потому что "Крыло" содержит все тонкости современных систем и еще элементы Искусственного Интеллекта. Достоинства программы:
Очень простой интерфейс позволяет сразу же, без программирования работать с трехмерной графикой. Большинство операций автоматизировано и не требует от Вас глубокого знания компьютера. Описание интерфейса. Интерфейс "Крыла Мысли" состоит из двух основных элементов: графического редактора (конструктора Миров) и редактора классов. Графический редактор позволяет размещать и настраивать объекты в вашем Мире (программе). Редактор классов позволяет создавать, редактировать и исследовать классы объектов. В редакторе классов объектам может быть присвоено множество событий, например, реакция на столкновения, удары, температуру воздуха, сообщения от других объектов и т.д. Вы можете написать любую процедуру или функцию для нового класса, создать законы для него, наделить его собственной базой знаний и опыта. Имеется множество других возможностей, которые пользователь легко освоит, самостоятельно "поползав" по системе. В большинстве случаев достаточно всплывающей подсказки. Иные функции полностью становятся понятными, когда в процессе их использования возникают исчерпывающие списки для выбора из числа возможных вариантов. Разумеется, доступен Help. Если же всех вышеперечисленных способов все-таки недостаточно - воспользуйтесь наглядными примерами, поставляемыми вместе с дистрибутивом. Что такое 100% визуальное программирование? Неужели, можно обойтись без написания хотя бы одной строчки? И да, и нет! Если Вы хотите создавать все из готовых кусков и объектов, то можно просто расставлять объекты - все будет работать само! Общий подход следующий:
Конечно, сначала нужно обратиться к собственной фантазии. Сейчас очень много людей, которым совершенно все равно, что делать, - лишь бы делать. Но мы уверены в том, что у Вас полно собственных идей и хватает решимости для их воплощения. Волшебное "Крыло" Вам поможет, но только при условии, что Вы будете действовать последовательно. Примерно так:
Что такое класс и объект. Класс, - это описание (схема) для создания и анализа свойств объектов одного вида. Вы можете придумывать собственные классы, наделяя их нужными свойствами и функциями. Например, класс "Деревья" может расти и размножаться. А класс "Динозавр" - поедать деревья. Когда класс разработан, можно приступать к "штампование" его экземпляров (объектов). Вы можете создать столько объектов (экземпляров) одного класса, сколько потребуется. Для этого достаточно нажать кнопку и задать экземпляру имя. Классы можно записывать на диск, что бы они были доступны для дальнейших экспериментов, и чтобы их не приходилось придумывать заново. У класса есть два важных свойства: Dynamic - этот класс исчезает из работающей программы вместе со своим последним экземпляром - объектом. Person - этот класс объекта всегда существует только в одном экземпляре. Какова стандартная структура класса? Как только Вы откроете редактор классов, например, с помощью меню New Class, то увидите, что класс имеет несколько разделов:
Хотя в каждом классе очень много всякой информации, работать с ним довольно легко. Во-первых, почти все уже заполнено по умолчанию. И Вы можете, просмотрев имеющиеся свойства, изменить необходимые. Во-вторых, "Визард" автоматизирует все типовые операции. Наконец, нет нужды изменять в классе все сразу! Первое, что нужно определить, это:
Где найти новые графические тела и модели объектов? Предлагается три простых варианта ответа на этот вопрос:
Откроем вкладку Designer и раскроем панель управления для создания и редактирования Ваших 3-мерных конструкций. Комментарии, на наш взгляд, для этой панели не требуются. Все и так понятно. Но есть нюансы, которые Вам следует запомнить. Создаваемые в "Крыле" объекты, - это конструкции, состоящие из деталей. Это файлы типа ".dsg", которые обладают некоторыми преимуществами и недостатками. Преимущества: Конструкции можно собирать, изменять и разбирать прямо в процессе работы программы. Например, можно поручить человечку собрать домик по кирпичам, а затем разломать его на части с помощью бомбы. Недостатки: Эти файлы работают медленнее, чем 3ds-файлы. Для того, чтобы создать новый, 3-мерный файл объекта, выполним следующие действия:
Что такое Моделлер (Modeller)? Моделлер - это встроенное средство "Крыла", позволяющее Вам создавать анимированные 3D-модели. У этих моделей могут быть собственные команды - такие, какие Вы пожелаете. Например: встать, бежать, упасть, драться и т.д. Моделлер создает модели в специальном формате "Крыла", которые затем записываются в специальные файлы и могут быть использованы в Вашем мире с тем же успехом, что и модели, которые Вы взяли из компьютерных игр. Преимущества этого вида моделей: Их можно собирать из деталей, являющихся обычными объектами. Вы просто подгружаете в список "руки", "ноги" и прочие части, а затем собираете из них свою модель и анимируете ее. Недостатки: Этот тип моделей работает несколько медленнее, чем модели, взятые из других источников (например, созданные в 3D Max). Краткий курс реального моделирования. Физические свойства объектов Temperature и FireTemperature. Эти свойства задают текущую температуру и температуру возгорания объекта. Как только температура превысит порог возгорания, объект сам загорится или взорвется. Последнее (взрыв) определяется свойством TimeExhaustion - время горения. Если оно меньше 10, то объект взорвется. В противном случае объект будет медленно гореть в течение заданного времени. Сила взрыва и степень разогрева определяется свойством LatentEnergy. Чем оно больше - тем сильнее воздействие взрыва (огня) на окружающие объекты. Если, например, приблизить другой объект к горящему объекту, то через некоторое время он (другой объект) сильно нагреется и, возможно, даже загорится. Свойства Mass, Elasticity, Sliding, Density. Эти свойства определяют механическое поведение объектов и их взаимодействие при ударах, с гравитацией, при движении. Mass - масса объекта в килограммах. Elasticity - упругость (вещественное значение в диапазоне 0:1) Sliding - скольжение (вещественное значение в диапазоне 0:1) Density - плотность, относительно воды. Если свойство Density задать большим 1, то это приведет к утопление объекта в воде, а меньшее 1 - к тому, что он станет плавучим. Если это свойство будет иметь очень маленькое значение (плотность меньше установленной плотности воздуха), то объект, взлетит, как воздушный шар. В связи с этим такой пример: Конструируем воздушный шар. (см. также пример "Aerostat")
Установим режим Test (в меню Старт есть такой раздел). В этом режиме одновременно действуют и редактор, и законы Мира. Нажмем на вкладке редактора значок "Вверх-Вниз". И начнем "таскать" Аэростат вверх или вниз (не касаясь земли!). Обратим внимание, что, как только мы его отпускаем, он снова занимает (покачавшись вверх вниз) свое положение в атмосферном слое, заданное его плотностью. Экспериментируем с огнем и взрывами:
Выбор объектов мышкой в работающей программе. Это отвратительное действие, потрепавшее много нервов разработчикам игр и физических моделей. Конечно, щелкнуть мышкой по готовой кнопочке в Delphi или в Visual Basic может любой ребенок. И вставить в процедуру кнопочного события что-либо типа: MsgBox "Привет! Это щелчок!" - не сложно. Но, если Вы сами когда-либо создавали графические объекты и приложения, то знаете, как трудно "вычислить" в Вашей программе, куда попала мышка, щелкнувшая по 2-мерной проекции 3-мерного Мира! Наше (а теперь и Ваше) "Крыло" полностью устраняет эту проблему! Следующий пример из нескольких строчек, мы надеемся, Вы оцените по достоинству (файл примера MousePik). Создадим какой либо Мир и "накидаем" в него разных объектов. Можно взять любой готовый пример с неподвижными объектами, а иначе за ними придется гоняться по экрану. Откроем меню World \ Main program и добавим туда следующий код: Sub Main World.Msg "The interface tutorial",4000 End Sub Sub MouseDown(Button,X,Y,SelType,SelectName,Lx,Ly,Lz) Select Case SelType Case 1 World.MsgUp " Land point: X = " & Lx & " Y = " & Ly & " Z = " & Lz Case 2 World.MsgUp "Object: " & SelectName End Select End Sub Запустим программу и начнем щелкать по объектам или по земле и горам. Вы увидите, как "Крыло" мгновенно вычисляет, куда попала мышка! Изучаем управление поведением и "язык" объектов. Создаем простейший пример преследования одного объекта другим. Те, кто программировал что-либо, понимают, что совсем не просто создать программу, которая заставит один объект преследовать другой. Лично Вас эти проблемы не коснутся, т.к. объекты понимают Вас почти на привычном Вам "языке". В файле GoToTarget.bwl находится пример с двумя "Танками". Там желтый танк движется по заданному маршруту, учитывая спуски и подъемы. А красный танк пытается его догнать, ничего не зная о маршруте цели. Рассмотрим, как это сделано: Откроем меню Word \ Messages for objects. Это новая технология "общения" с объектам. Из этого окна Вы посылаете объектам любые сообщения (письма), а они их читают и, если понимают, то что-то делают по своему усмотрению в зависимости от понимания. В этом окне мы увидим два послания обоим танкам: TankRed: [GoTarget Tank ] Tank: [L G 0.2 300 R G 0.2 350 L G 0.2 300 R G 0.2 250 L G 0.2 300 Stop ] Первое послание предлагает красному танку (TankRed) достигнуть желтый (Tank). Второе послание адресовано желтому танку и просто описывает маршрут движения (L, R - повороты; G - движение с заданной скоростью в течение заданного времени). Вот и все! Но как же это работает? Довольно просто. Для того, что бы это увидеть, откройте редактор классов двойным щелчком по "Красному танку". Откройте раздел класса на Commands. Вы увидите, какие слова понятны этому классу. Двойным щелчком по каждому слову в разделе Commands откройте описание сути этих слов. Теперь Вы поняли как создавать свои Слова-Команды? Изучаем технологию управления событиями. Что такое событие? До сих пор мы имели дело только с искусственными событиями (например, щелчок мышкой по кнопке). "Крыло" вводит технологию реальных событий. Откроем в разделе Commands слово GoTarget. Dim Nam Nam = Obj.NextMacroSimb ' получить имя цели из письма Obj.ToObject Nam,10,True,0.2,False,50 ' настроить механизм преследования. Это слово настраивает механизм преследования, используя встроенную функцию "Крыла". Дальше начинается самое интересное! Этот механизм способен только один раз повернуть танк и задать ему скорость на цель. Но ведь цель маневрирует! Идея состоит в том, чтобы периодически "терять" цель из вида и настраивать внимание повторно. Это достигается последним параметром - 50 единиц времени. Затем наступает событие Target Forgotten - цель забыта. И наш танк теряет цель: Вот именно в этом событии и "зарыта собака"! Откроем в разделе Events класса Танк отдел Target Forgotten, и увидим, что там просто повторно задается то же самое! Obj.ToObject trNam,10,True,0.2,False,50 Только теперь имя цели уже берется из самого события (из памяти объекта) - trNam. Теперь Вам ясно, почему красный танк "упрямо" бегает за желтым, пока не догонит? Кстати, за успех преследования цели отвечает другое событие - Target. Посмотрите, что в нем написано, - что будет делать танк, когда догонит свою цель. Какие еще события есть у объекта? Выделите в редакторе классов раздел Events и нажмите кнопку Add. Вы увидите полный список выбора возможных событий. Если этого Вам недостаточно, можете создавать свои собственные события, используя кнопку "Другое". Изучаем действие событий Столкновение и Удар. Загрузим файл "Mina" и запустим его. Когда танк взорвется, наехав на мину, загрузим файл повторно и изучим работу примера. Откроем событие Impact для "Мины". Там всего одна строка: Obj.Fire = True Этого достаточно, чтобы пример работал! Когда что-то ударяет по мине, возникает событие "Удар" и она "поджигается". Свойство Мины TimeExhaustion = 1. Поэтому горение происходит очень быстро - т.е. со взрывом. Вот и все! Действие гравитации и других полей. "Крыло" моделирует гравитацию и любые другие (например, магнитные или электрические) силы. В данной версии эти возможности слегка ограничены. Тем не менее, это не мешает Вам создавать сложные ситуации. Загрузим пример Most.bwl. В нем только два объекта: Солдат и Мост. Вся программа состоит из одной инструкции: Sub Main FindO("Man").Begin "R G 0.1 3500 S Fr " End Sub Здесь солдату задается направление и скорость движения. Можно было бы это сделать проще - через окно писем. Но для разнообразия в примерах, пусть здесь будет так: Солдат поворачивается в нужную сторону и : начинает взбираться на мост! Внимательно пронаблюдайте, как он это делает. Это очень хороший пример действия гравитации и столкновений. Здесь участвуют свойства Mass и Elasticity. Суть в том, что солдат постоянно падает к земле, но отскакивает от моста вверх. В реальной жизни происходит нечто подобное, только это не так заметно. Кстати, в конце пути солдат упадет и сгорит благодаря командному слову Fr (из разряда черного юмора). Вместилища, или как одни объекты могут перемещать другие. Загрузите пример River.bwl. В нем солдат взбирается на мост. Корабль, находящийся под мостом, ждет некоторое время. Затем, когда солдат прыгает, корабль "вмещает" его и плывет вместе с ним к берегу. Инструкции объектам задаются через уже известное Вам окно писем, хотя можно было бы сделать все на основе событий. Кстати, корабль действительно плывет по воде - его свойство Density меньше плотности воды. Можете потом "подергать" его в режиме Test - утопить не получится! Откроем главную программу и увидим настройку корабля: Shp.AutoContain = "kkohmk," (классификационный код людей) Это все, что нужно для того, чтобы корабль мог вместить (взять на борт) любого человека или подобное ему существо! Что такое классификация? В примере использован классификационный код - это статья доступная в редакторе классов: раздел Body, отдел Classification. Если щелкнуть по нему, то откроется окно классификаций. Вы можете создавать любые классификации для своих объектов. Когда объект получил собственный классификационный код, другие объекты могут его узнавать и отличать. Причем, классификация позволяет объектам "понимать", что именно перед ними, к чему это относится, какими свойствами обладает, и т.п. Создание вспомогательных форм и собственного интерфейса. Загрузим пример Tank.bwl. В нем с помощью небольшого пульта управления Вы можете направить танк на мину. Откроем закладку Forms и увидим, что в списке содержится только форма самого пульта управления. Щелчком по списку откроем ее а щелчком по самой форме, откроем ее программу. Это делается правой кнопкой мышки (нужно щелкать по свободной части самой формы). Вы видите, что "Крыло" создает и использует обычные формы, типичные для современных визуализированных программ. Можно иметь несколько форм в программе. Кстати, в "Крыле" для форм есть несколько очень интересных контроллов. Например "MathText" - специально текстовое окошко, которое может вычислять формулы, обрабатывать обычный текст по словам, символам и по смыслу: Распространение результатов Вашего творчества. Эту важную задачу "Крыло" решает для Вас с помощью своих весьма обширных возможностей. Кому нужен результат труда, если его нельзя показать, продать или подарить? Работая с "Крылом" Вы легко можете создавать готовые "изделия", программный код которых закрыт для посторонних глаз. Эти приложения сразу будут запускаться. Вы можете передавать другим пользователям проекты своих Миров, проекты классов, объекты, модели, обученные различным навыкам работы: Вообще-то, любая программа "Крыла" занимает очень мало места на диске - несколько десятков килобайт. Такой компактный способ записи использует ссылки на все необходимые, стандартные файлы, которые есть у любого пользователя "Крыла". Если же Вы не уверенны в наличие всех нужных файлов или программе нужны Ваши собственные файлы, то используйте встроенный в "Крыло" упаковщик. Он доступен из меню File \ Package : Там Вы найдете еще и проверочные функции, которые позволят безопасно просмотреть чужую упаковку или проверить свою. Используя упаковщик, Вы получите один большой файл, который гарантированно содержит все необходимое для работы Вашего проекта. Пожалуйста, возьмите за правило, обязательно заполнять анкету сообщения, прилагаемого упаковщиком к Вашему изделию. Это - правило хорошего тона, отличающее серьезного пользователя, уважающего интересы других. В сообщении укажите основную суть упакованной информации и предупреждения о безопасности. Ваше сообщение станет доступно прежде, чем пользователь распакует файл в свою систему. Переходим к искусственному интеллекту. (Немного фантазии) Все современные представления о разумном поведении автоматов говорят, что, якобы, человек и животные сильно отличаются от всего искусственно созданного. Работая с "Крылом", Вы легко поймете, что можно создать (или скоро это будет возможно!) искусственные существа, и даже ЦЕЛЫЕ МИРЫ, населенные ими, мало чем (ПО СУТИ) отличающиеся от реальных. Кто знает, возможно, некоторые из "продвинутых" существ искусственных миров, однажды придут к идее Творца?.. Все это уже не за горами: Сложное поведение объектов реализуется через матричную концепцию Искусственного Интеллекта. Объекты могут включать в себя специальный модуль (объект) AI2. Для этого в событии Initialize напишите: Set Ai = World.BuildAi(Obj,FileName) Разумеется, ссылочная переменная Ai должна быть объявлена в разделе Свойств класса. Теперь к методам и свойствам этого модуля можно обращаться, как к обычным методам и свойствам (через точку): Ai.Property = X Обратите внимание, что, указав имя файла, Вы создали не пустой, а уже обученный ИИ-модуль. Если такого у Вас нет, то создайте его, открыв в главном меню пункт - AI Wizard. ИИ модуль - это система матриц различного типа и формата, хранящих некоторый опыт, необходимый для принятия решений. Сам ИИ - это только модуль, который будет работать только в контексте имеющихся "реальных" объектов. Его методы и содержащаяся в нем информация - это только система принятия решений и обучения новым решениям, но не программа для объекта. Каждая матрица содержит некоторый опыт в виде суммы строк. Представим себе матрицу для опознавания животных:
Ai.Test("Животное", Array(0.5,1,4,3)) то, скорее всего, получим ответ =2, т.е. - "Рыба"! Запуск команд по принятым решениям. Когда фрейм (матрица) совершил свой выбор, некоторые его свойства будут содержать полезную информацию о достоверности и прочих качествах решения (смотри Help). Однако, есть еще и функция, закрепленная за каждой строкой. Рассматривая Ai Wizard, Вы, конечно, обнаружили окошко "Акция" в закладке управления строками и окошко "Главная акция" в закладке "главные знания". Акции - это произвольные программы (не слишком большие) на языке Basic, которые могут быть автоматически выполнены в соответствии с результатом действия данного фрейма, или глобально - для всего ИИ. Мы надеемся, что примеры позволят разобраться в методике использования этих возможностей. В общем случае выполнить Акцию можно и для одного отдельно взятого фрейма (матрицы): X = Ai.Action(Frame, Параметры) Обратите внимание, что это функция, которая вернет результат Акции (для последующего и, возможно, многоуровневого использования), но можно использовать ее просто как процедуру, если, например, нужно "просто повернуть руку робота". Что еще могут обучающиеся матрицы? Понятно, что, прежде всего, - самообучаться. Мы можем много раз "показывать" фрейму "Животное" разные параметры РЫБ, до тех пор, пока фрейм не начнет уверенно отличать любых Рыб, даже тех, КОТОРЫХ ОН ЕЩЕ НЕ ВИДЕЛ: Ai.Training "Животное","Рыба",Array(:..) Типы матриц. Матрицы могут иметь произвольное число столбцов и строк. Однако у них есть еще ряд важных параметров - например Mode - тип Логической обработки. Различаются следующие основные типы:
Понятно, что любой мозг - это иерархия нейронов (иерархия понятий). Точно так же матрицы могут соединяться (ссылаться) друг на друга, образуя многоуровневые системы понятий и системы выработки решений:
Объекты могут выполнять очень сложные инструкции, а, главное - придумывать собственный план действий. Для этого они должны обучаться, изучать Мир в котором находятся, накапливать и обобщать свой опыт. Все это уже возможно в Мирах "Крыла"! Удачи! | ||||||||||||||||||||||||||||||
| Всего комментариев: 2 | |