Реферат: Вкр на тему «Компьютерная игра для обучения языку ассемблер школьников старших классов» Введение
ВКР на тему «Компьютерная игра для обучения языку ассемблер школьников старших классов»
Введение
На дворе 21й век – век высоких технологий. Сегодня, компьютер уже не роскошь, а средство связи, обучения и развлечения. Причем обучающий потенциал компьютера зачастую используется не полностью. В частности, далеко не всем нравится читать нудную документацию с экрана, всматриваясь в монитор, гораздо проще читать обычную книгу, но такую не скачаешь из интернета, её нужно ещё найти… А для обучения детей использовать кучу книг вообще не рационально, ведь ребенку каждый день приходится их носить в школу и обратно, родителям (или государству) платить за макулатуру, хранить её в библиотеках, а потом утилизировать. К тому же в отпечатанные учебники невозможно внести изменения, придется печатать заново…
Но прогресс не стоит на месте и человек становится все более эффективным, в том числе и в учебе. Теперь на смену учебникам приходят электронные системы обучения, такие как компьютер. Новые технологии позволяют использовать и новые, более эффективные, методики обучения, в частности игры. Ведь желание играть заложено в нас эволюцией не забавы ради. Даже в дикой природе, детеныши млекопитающих через игру познают окружающий их мир. Люди же, своих детей заставляют зубрить формулы и текст, естественно детям это не нравится. Но что, если процесс обучения представить в виде увлекательной игры, где целью было бы выполнение какого-либо учебного задания? Именно для этого и предназначен проект ALG.
Предметом изучения является низкоуровневый язык программирования ассемблер. Этот язык был выбран потому что, как показывает время, меняются технологии и языки программирования, но ассемблер остается неизменным и спрос на него всегда высок. Например, программисты микроконтроллеров, всегда ценились в разы выше, чем программисты прикладного программного обеспечения, использующие языки высокого уровня. Но при этом многим начинающим программистам ассемблер кажется слишком сложным для изучения. Это не так. Основной задачей обучения ставилось показать учащемуся азы программирования на ассемблере, чтобы в будущем у учащегося было объективное представление о том, что это за язык и для чего он нужен. А чтобы обучение проходило более эффективно, задания представлены в игровой форме, что должно заинтересовать учащегося и способствовать лучшему усвоению знаний. Не забыты и традиционные методы обучения, такие как справочная информация.
^ Глава №1. Концепция
§1. Игры в обучении
Использование игр в обучении
Пожалуй, никакое другое явление культуры так не связано с образованием, как игра. Эта связь прослеживается ещё со времён античности. Слово ludus, которое, как известно, означало у римлян “игра”, имеет и второе значение — “обучение”. Доказывать огромное значение роли и места игры в культуре человека после работы Йохана Хейзинги [1] уже нет необходимости. Также нет необходимости поднимать проблему применения игры в процессе обучения: об этом уже много говорилось и культурологами, и психологами, и педагогами, и методистами, и даже физиологами. Всем известно то место, которое занимает игра у ребёнка. “Что может быть серьёзнее для ребёнка, чем игра?” — задаёт риторический вопрос В.И. Полищук [2]. Игра развивает ребёнка. И более того, нормально развиваются именно те дети, которые играют. И дальше игра продолжает участвовать в процессе обучения, образования: развивающие игры, затем обучающие.
Игры достаточно сильно различаются по многим параметрам: областям деятельности, игровым методикам, характеру педагогического процесса, по игровой среде, целям, существуют различные их классификации. Опираясь на исследования психологов и педагогов (А.Н. Леонтьев, С.Л. Рубинштейн, Ю.К Бабанский, Д.Б. Эльконин, Т.Р. Яновская), можно выделить две большие группы игр: игры с правилами (дидактические) и творческие игры. Компьютерные игры всегда имеют правила, поэтому являются дидактическими, и хотя программирование признано искусством и его можно считать творческим процессом, игры обучающие программированию, в нашем случае, всё же являются дидактическими.
Современные компьютерные игры можно разделить на несколько типов, отличающихся друг от друга игровым процессом:
Аркада – характеризуется высокой динамичностью происходящего на экране, большой увлекающей способностью и не требует от играющего усидчивости и больших умственных усилий. Хорошо подходит для школьников и детей дошкольного возраста.
Головоломка – игра, в которой главная цель игрока - решить задачу-головоломку, чтобы продвинуться дальше, и перейти к следующей задаче. Характеризуется низкой динамичностью и увлекает только усидчивых детей.
Стратегия – в играх этого жанра игрок отождествляется с управляющим некой системой и располагающим ограниченными ресурсами, при этом игрок должен не только использовать, но и развивать систему максимально эффективно.
Т.к. целевой аудиторией проекта ALG являются школьники, то чтобы повысить интерес к игре, необходимо, чтобы игра содержала в себе элементы аркады. В итоге, выбран комбинированный тип игры, а именно аркада + головоломка, чтобы учащегося было легко заинтересовать изучением серьезного предмета, такого как программирование.
§2. Язык программирования ассемблер
Ассемблер — язык программирования низкого уровня, представляющий собой формат записи машинных команд, удобный для восприятия человеком.
Машинный код— система команд конкретной вычислительной машины, который интерпретируется непосредственно микропроцессором или микропрограммами данной вычислительной машины. Каждая модель процессора имеет свой собственный машинный язык, хотя во многих моделях эти наборы команд имеют много общего.
«Слова» машинного языка называются машинными инструкциями. Каждая из них описывает элементарное действие, выполняемое процессором, такое как, например, «переслать байт из памяти в регистр». Программа — это просто список инструкций, последовательно выполняемых процессором.
Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов. Также язык ассемблера обеспечивает базовые программные абстракции: связывание частей программы и данныx через метки с символьными именами (при ассемблировании для каждой метки высчитывается адрес, после чего каждое вхождение метки заменяется на этот адрес) и директивы.
Директивы ассемблера позволяют включать в программу блоки данных (описанные явно или считанные из файла); повторить определённый фрагмент указанное число раз; компилировать фрагмент по условию; задавать адрес исполнения фрагмента, отличный от адреса расположения в памяти; менять значения меток в процессе компиляции; использовать макроопределения с параметрами и др.
Каждая модель процессора, в принципе, имеет свой набор команд и соответствующий ему язык (или диалект) ассемблера.
Достоинства языка ассемблера:
Минимальное количество избыточного кода, то есть использование меньшего количества команд и обращений в память, позволяет увеличить скорость и уменьшить размер программы.
Обеспечение полной совместимости и максимального использования возможностей нужной платформы: использование специальных инструкций и технических особенностей данной платформы.
При программировании на ассемблере становятся доступными специальные возможности: непосредственный доступ к аппаратуре, портам ввода-вывода и особым регистрам процессора, а также возможность написания самомодифицирующегося кода (то есть метапрограммирование, причём без необходимости программного интерпретатора).
Возможность создания самомодифицирующегося кода. Хотя стоит отметить, что последние технологии безопасности, внедряемые в операционные системы, не позволяют делать самомодифицирующегося кода, так как исключают одновременную возможность исполнения инструкций и запись в одном и том же участке памяти (технология W^X в BSD-системах, DEP в Windows).
Недостатки языка ассемблера:
Большие объёмы кода и большое число дополнительных мелких задач, что приводит к тому, что код становится очень сложно читать и понимать, а следовательно усложняется отладка и доработка программы, а также трудность реализации парадигм программирования и любых других соглашений, что приводит к сложности совместной разработки.
Меньшее количество доступных библиотек, их малая совместимость между собой.
Непереносимость на другие платформы (кроме двоично совместимых).
Применение ассемблера напрямую вытекает из его достоинств и недостатков.
Поскольку большие программы на ассемблере писать не всегда удобно, их пишут на языках высокого уровня. На ассемблере же пишут небольшие фрагменты или модули, для которых критически важны:
быстродействие (драйверы);
размер кода (загрузочные сектора, программное обеспечение для микроконтроллеров и процессоров с ограниченными ресурсами, вирусы, программные защиты);
специальные возможности: работа напрямую с аппаратурой или машинным кодом, то есть загрузчики операционных систем, драйверы, вирусы, системы защиты.
Поскольку на ассемблере чаще всего пишут лишь фрагменты программы, их необходимо связывать с остальными частями на других языках. Это достигается 2 основными способами:
На этапе компиляции — вставка в программу ассемблерных фрагментов специальными директивами языка, в том числе написание процедур на языке ассемблера. Способ удобен для несложных преобразований данных, но полноценного ассемблерного кода, с данными и подпрограммами, включая подпрограммы с множеством входов и выходов, не поддерживаемых высокоуровневыми языками, с помощью него сделать нельзя.
На этапе компоновки, или раздельная компиляция. Для взаимодействия скомпонованных модулей достаточно, чтобы связующие функции поддерживали нужные соглашения вызова (англ. calling conventions) и типы данных. Написаны же отдельные модули могут быть на любых языках, в том числе и на ассемблере.
Общепринятого стандарта для синтаксиса языков ассемблера не существует. Однако, существуют стандарты, которых придерживается большинство разработчиков языков ассемблера. Основными такими стандартами являются Intel-синтаксис и AT&T-синтаксис.
К командам языка ассемблер относят (примеры приведены для микропроцессора архитектуры x86):
Команды пересылания данных (mov, lea т.д.)
Арифметичекие команды (add, sub, imul и т.д.)
Логические и побитовые операции (or, and, xor, shr т.д.)
Команды управления ходом выполнения программы (jmp, loop, ret и т.д.)
Команды вызова программных прерываний: int, into
Команды ввода/вывода в порт (in, out)
Кроме инструкций, программа может содержать директивы – команды, не переводящиеся непосредственно в машинные инструкции, а управляющие работой компилятора. Набор и синтаксис их значительно разнятся и зависят не от аппаратной платформы, а от используемого компилятора (порождая диалекты языков в пределах одного семейства архитектур). В качестве "джентельменского набора" директив можно выделить:
определение данных (констант и переменных)
управление организацией программы в памяти и параметрами выходного файла
задание режима работы компилятора
всевозможные абстракции (т.е. элементы языков высокого уровня) - от оформления процедур и функций (для упрощения реализации парадигмы процедурного программирования) до условных конструкций и циклов (для парадигмы структурного программирования)
макросы
Пример программы
Пример простейшей программы «Hello world» для MS-DOS для архитектуры x86 на диалекте TASM:
^ .MODEL TINY
CODE SEGMENT
ASSUME CS:CODE, DS:CODE
ORG 100h
START:
mov ah,9
mov dx,OFFSET Msg
int 21h
int 20h
Msg DB 'Hello World',13,10,'$'
CODE ENDS
END START
^ Происхождение и критика термина «язык ассемблера»
Данный тип языков получил свое название от названия транслятора (компилятора) с этих языков — ассемблера (англ. assembler — сборщик). Название последнего обусловлено тем, что на первых компьютерах не существовало языков более высокого уровня, и единственной альтернативой созданию программ с помощью ассемблера было программирование непосредственно в кодах.
Язык ассемблера в русском языке часто называют «ассемблером» (а что-то связанное с ним — «ассемблерный»), что, согласно английскому переводу слова, неправильно, но вписывается в правила русского языка. Однако, сам ассемблер (программу) тоже называют просто «ассемблером», а не «компилятором языка ассемблера» и т. п.
Использование термина «язык ассемблера» также может вызвать ошибочное мнение о существовании единого языка низкого уровня, или хотя бы стандарта на такие языки. При именовании языка, на котором написана конкретная программа, желательно уточнять, для какой архитектуры она предназначена и на каком диалекте языка написана.
§3. Обзор аналогов
Среди аналогов наиболее популярно семейство игр, в которых игроку предлагается на каком-либо языке программирования описать модель поведения робота, грубо говоря, его искусственный интеллект. И между различными роботами устраивается соревнование на выживание. Наиболее популярным среди таких игр является проект Мэтью Нельсона из IBM под названием Robocode.
^ Игра Robocode
Robocode - это игра для программистов, целью которой является написание модели поведения боевого робота (танка) на поле битвы. Для написания модели поведения робота используется язык программирования высокого уровня Java. Игра имеет windows-интерфейс, а для отображения роботов на поле боя используется 2D-графика. Каждый робот может двигаться вперед и назад, поворачивать влево и вправо, нацеливать пушку и радар. Сама модель поведения представляет собой Java-класс, унаследованый от базового класса Robot, который предлагает простейший командный интерфейс боевой машины:
turnRight(double degree) и turnLeft(double degree) - повернуть танк на заданный угол вправо или влево;
ahead(double distance) и back(double distance) - задать направление движения вперед или назад с указанием расстояния в пикселях. Если танк столкнется с другим танком или стеной, движение прекратится;
turnGunRight(double degree) и turnGunLeft(double degree) - повернуть пушку на заданный угол;
turnRadarRight(double degree) и turnRadarLeft(double degree) - повернуть радар на заданный угол.
Во время боя каждому роботу выделяется отдельный поток виртуальной Java-машины. В пределах данного потока танк может реагировать на различные внешние события, реакцию на которые программисты могут реализовать в соответствующих методах:
onScannedRobot() - Событие поступает при пеленге противника радаром. В теле этого метода обычно реализуется алгоритм обстрела области, в которой был обнаружен противник
onHitByBullet() - Событие поступает при попадании снаряда в ваш танк. Здесь программисты должны предусмотреть алгоритм маневрирования танком.
onHitRobot() - Событие поступает при столкновении с другим танком.
onHitWall() - Событие поступает при столкновении со стеной.
Игра весьма популярна, а в интернете часто проводятся соревнования, существует рейтинг лучших роботов. Но при этом, игра Robocode не является прямым аналогом проекта ALG, т.к. предназначена не столько для обучения, сколько для развлечения, причем не детей, а состоявшихся программистов.
Преимущества и недостатки игры Robocode относительно ALG
преимущества
недостатки
не требовательна к ресурсам компьютера
плохо приспособлена для обучения, целевая аудитория – программисты
однообразный игровой процесс
отсутствует возможность отладки кода
графические технологии прошлого века
требует наличия на компьютере Java-машины
В результате исследования, не было обнаружено проектов, которые были бы в состоянии составить серьезную конкуренцию проекту ALG в области игрового обучения программированию неподготовленных людей.
§4. Концепция проекта ALG
Педагог-разработчик
Структура занятий
Язык ассемблер всегда считался сложным как для использования, так и для изучения. Поэтому, для изучения ассемблера школьниками традиционные методы обучения подходят не лучшим образом. Необходим несколько другой подход, попытка реализовать который была предпринята в проекте ALG.
В основу концепции проекта легла с виду простая задача – сделать обучение эффективным. Для этого при разработке программы ALG, упор делается по 3-м направлениям:
Эффективное взаимодействие учащегося с инструментом обучения
Игровая форма обучения
Легко расширяемая структура заданий
Эффективное взаимодействие учащегося с инструментом обучения
При использовании традиционного ассемблера, приходится пользоваться набором разных утилит, чаще всего представляющих собой малопонятные консольные программы, что может быть губительно для процесса обучения неподготовленного школьника старших классов.
Очевидно, что эффективность обучения напрямую зависит от эффективности взаимодействия учащегося с инструментом обучения, в данном случае с программой ALG. На схеме видно, что учащийся взаимодействует лишь с оболочкой программы, со средой разработки. В ней, учащийся выполняет задания, созданные педагогом и получает необходимые знания по предметной области. В результате, на экране нет кучи окон, а учащемуся доступна вся необходимая ему информация в пределах одной программы.
Процесс взаимодействия с программой ALG происходит следующим образом:
учащийся набирает текст программы на языке ассемблер
при помощи интерпретатора виртуальной машины, текст программы компилируется и преобразуется в байт-код
при запуске мини игры, байт-код используется для выполнения каких-либо задач миссии
учащийся может визуально оценить работу написанной им программы
Взаимодействие учащегося со средой разработки включает в себя, не только написание ассемблерного кода, но и весь спектр действий, используемых в разработке программ на ассемблере:
написание кода
компиляция текста программы в байт-код, а также получение подробной информации об ошибках компиляции, если они есть
полноценная отладка скомпилированного кода во время работы ассемблерной программы
использование простой и понятной справочной информации на русском языке, доступной прямо из окна программы ALG
Таким образом, учащийся сам проходит все этапы разработки программы, от написания кода до отлова ошибок в работающей программе, и имеет реальный опыт и представление о программировании на ассемблере.
Этот подход гораздо эффективнее традиционных лабораторных работ по простому написанию различных программ. К тому же учащемуся не нужно использовать ничего, кроме одной единственной программной среды, что значительно снижает издержки на обучение учащегося работе с реальными компиляторами, линковщиками и прочими инструментами для работы с ассемблером.
^ Игровая форма обучения
Для того чтобы процесс обучения был увлекательным, он проходит в игровой форме, то есть каждое занятие представляет собой мини-игру, со своей конечной целью, набором правил, сценарием и окружающей обстановкой. Мини игры могут быть любого жанра, но для обучения наиболее эффективным считается жанр аркады.
Например, автомобилю нужно проехать по конкретному маршруту, но путевые точки перепутаны и без помощи игрока (учащегося) автомобиль двигаться не может. Соответственно нужно написать программу сортировки путевых точек для навигационного компьютера автомобиля. Окружающая обстановка в данном примере может быть в виде леса, автомобиля и маршрута, по которому нужно проехать. Причем, если программа, написанная учащимся, сработает неверно и путевые точки будут отсортированы неправильно, автомобиль доедет до первой неверной точки и подаст визуальный сигнал о том, что дальше ехать нельзя.
Задача учащегося может быть абсолютно любой, но, как правило, она сводится к написанию алгоритма, который как-то используется в мини игре и чья корректная работа необходима для успешного завершения мини игры. То есть учащийся занимается разработкой небольшой части к более крупной системе, при этом результат работы алгоритма влияет на мини игру, отображается визуально в окне программы и учащийся может его оценить.
Таким образом, низкоуровневый код на языке ассемблер, написанный учащимся, влияет на высокоуровневую систему, в данном случае игру, являясь её неотъемлемой частью. И именно такой подход в использовании ассемблера наблюдается сейчас повсеместно. Уже давно никто не пишет программы на ассемблере от начала и до конца. На низкоуровневом языке пишутся лишь некоторые небольшие части программ, критичные к скорости или какой-либо функциональности, а также системное программное обеспечение и драйвера устройств. К тому же создавать какую-либо часть сложной системы (в нашем случае игры) проще и главное понятнее, нежели создавать всю систему, пусть даже простую, но с нуля.
Нужно отметить, что мини игры для занятий могут быть любой сложности, она ограничена лишь вычислительными ресурсами компьютера, фантазией создателя и его умением программировать.
^ Легко расширяемая структура занятий
Легко расширяемая система занятий значительно повышает эффективность обучения. Эта система основана на том, что логика мини игры каждого занятия находится не в exe-файле программы, а в виде отдельного файла с кодом на высокоуровневом языке программирования (скриптовый язык LUA), свободным для редактирования. Таким образом, педагог, имея навыки программирования, может легко выступать в роли разработчика новых занятий или для изменения существующих. Ведь очевидно, что в разных учебных заведениях разный уровень образования по различным предметам, где-то с ассемблером можно познакомить поверхностно, а где-то нужно провести глубокий курс изучения этого сложного языка. Поэтому расширяемая и легко изменяемая структура занятий является необходимым свойством создаваемой обучающей платформы.
Занятие состоит из задания и мини игры. Мини игра - это программа, описанная во внешнем текстовом файле и реализующая логику проверки выполнения задания к занятию, а также логику работы мини игры. Кроме трехмерной графики в окне мини игры может быть использован стандартный windows-интерфейс, например, кнопка для запуска игрового процесса или надпись для отображения текстовой информации.
Этапы создания занятия:
Определение предметной области занятия, написание к нему задания
Создание сценария для мини игры
Создание графического контента для мини игры
Подключение нового занятия к программе производится путём изменения нескольких строк кода в одном из файлов с логикой загрузки занятий.
^ Структура занятий
На данный момент, курс обучения состоит из четырех занятий. Сложность занятий и объем кода, который должен написать учащийся, возрастает от первого занятия к последнему. И если на первом занятии изучалась простейшая инструкция сложения двух чисел, то задачей последнего занятия является создание самомодифицирующейся программы, того, на что не способен никакой другой язык программирования, кроме ассемблера. Также будут затронуты почти все ключевые конструкции языка. Для каждого занятия была придумана и реализована соответствующая ему мини игра.
^ Общий взгляд
В результате мы получили удобную, расширяемую платформу для эффективного обучения программированию на языке ассемблер. В процессе обучения, учащийся в полном объеме использует этот низкоуровневый язык в увлекательных мини играх, как простое решение конкретных задач в рамках высокоуровневой системы. Именно так, как ассемблер используется сегодня в сфере разработки программного обеспечения. При этом сам процесс обучения является увлекательным, а результат работы своей программы ученик сразу же видит на экране.
Глава №2. Формализация
§1. Инструментарий
При создании проекта были использованы следующие инструменты:
Microsoft Visual Studio 2005 – для написания программного кода, как основная среда разработки;
Платформа .NET Framework 2.0 – как единая основа всего приложения;
C++ – как основной язык программирования;
Скриптовый язык LUA – как вспомогательный язык программирования;
Библиотека OGRE – как подсистема визулизации 3D графики;
Пакет Autodesk 3D Studio Max 8 – как средство создания трехмерных сцен.
^ Microsoft Visual Studio 2005
MS Visual Studio 2005 от компании Microsoft – мощнейший инструмент разработки программного обеспечения любой сложности. Visual Studio – это самодостаточный набор инструментов, объединенных в рамках одной IDE для создания программ для настольного компьютера, мобильных устройств, приложений на основе ASP.NET, XML Web служб и других. Также, Visual Studio содержит средства анализа качества кода и его производительности, что помогает создавать надежные приложения и службы уровня mission-critical (для использования в системах безопасности, здравоохранения и других областях, где к надежности ПО предъявляются особо высокие требования).
Интегрированная среда разработки ПО (англ. ^ IDE, Integrated Development Environment) — система программных средств, используемая программистами для разработки программного обеспечения.
Обычно среда разработки включает в себя текстовый редактор, компилятор, интерпретатор, средства автоматизации сборки и отладчик. Легко интегрируется с системой управления версиями, имеет разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Также включает в себя браузер классов, инспектор объектов и диаграмму иерархии классов — для использования при объектно-ориентированном программировании.
Microsoft Visual Studio 2005 включает в себя следующие компоненты:
Visual C++ .NET
Visual C#
Visual Basic .NET
Visual J#
платформу .NET Framework.
Стоит отметить, что Visual C++ .NET поддерживает разработку приложений как на Managed C++, так и на обычном C++, и тем самым позволяет генерировать код как для платформы .NET Framework, так и для исполнения в среде «чистой» Windows. В этом отношении Visual C++ .NET является уникальным среди других языковых средств, предоставляемых средой Visual Studio, поскольку ни Visual Basic .NET, ни Visual J# .NET не способны генерировать код для чистого Win32, в отличие от предыдущих версий этих компонентов (Visual Basic и Visual J++ соответственно). Одним из важных преимуществ Visual Studio 2005 является возможность одновременного использования этих высокоуровневых языков рамках одного проекта.
Visual Studio 2005 позволяет создавать приложения различных типов, но в данном проекте используется приложение типа Windows Forms, которое построено на классах .NET Framework и представляет собой широкий набор компонентов для создания пользовательского интерфейса. Теперь пользовательский интерфейс можно быстро создать с нуля прямо в IDE, просто перетаскивая на форму приложения нужные элементы интерфейса, располагая их так как нужно, настраивая их свойства и добавляя программный код для реализации заданной логики.
Среди аналогов Visual Studio можно выделить лишь Borland Delphi, но он существенно проигрывает продукту от Microsoft по удобству и функциональности. А в купе с моим большим опытом работы именно с Visual Studio, выбор этого инструмента является наилучшим.
^ Платформа .NET
Платформа .NET Framework, разработанная и активно продвигаемая компанией Microsoft, в будущем должна стать основой для подавляющего большинства Windows-программ.
.NET Framework – многоязыковая среда для создания, распространения и запуска XML Web служб и приложений. Она состоит из следующих частей:
Common Language Runtime (CLR) – общий язык исполнения, является компонентом среды, управляет распределением памяти, запуском и остановкой процессов, реализацией политики безопасности, а также удовлетворяет зависимости от других компонентов. В результате существенно сокращается количество кода, который должен написать разработчик для реализации заданной логики;
Unified programming classes – среда предоставляет разработчику набор единых, объектно-ориентированных, иерархических, расширяемых библиотек классов (APIs). Создавая общий набор API для всех языков программирования, общий язык разрешает наследование классов, написанных на разных языках программирования, а также разрешает обрабатывать ошибки и отлаживать этот код. Все языки программирования, от J# до C++, имеют одинаковый доступ к среде разработки и программисты могут выбрать тот язык, который больше всего подходит для решения поставленной задачи.
Платформа .NET Framework использовалась исключительно ради создания пользовательского интерфейса, т.к. позволяет создавать windows-интерфейсы любой сложности, затрачивая на это минимум времени, а также легко интегрируется со сторонними библиотеками на языке C++.
Язык С++
C++ — компилируемый, строго типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования: процедурную, обобщённую, функциональную; наибольшее внимание уделено поддержке объектно-ориентированного программирования. Этот язык был выбран за высокую скорость работы, гибкость и хорошую интеграцию с платформой .NET Framework и различными библиотеками, в частности библиотекой OGRE, использующейся для вывода 3D графики. Также важную роль при выборе языка сыграл мой опыт работы с C++.
Язык LUA
Lua ([лу́а], порт. «луна») — интерпретируемый язык программирования, разработанный подразделением Tecgraf Католического университета Рио-де-Жанейро. Является свободно распространяемым, с открытыми исходными текстами на языке Си. По возможностям, идеологии и реализации язык ближе всего к JavaScript, однако Lua отличается более мощными и гораздо более гибкими конструкциями, спроектирован с целью «не плодить сущности сверх необходимого». Реализуемая модель ООП (как и в JavaScript) — прототипная. Сегодняшняя популярность Lua такова, что Microsoft выделила разработчикам грант на создание .NET-версии языка.
Как и многие интерпретируемые языки программирования, реализация Lua имеет отдельно компилятор с исходного языка в исполняемый байт-код и виртуальную машину для исполнения сгенерированного байт-кода. Причём байт-код — это не команды стековой машины, а команды некоего виртуального процессора с несколькими регистрами, что повышает эффективность исполнения. В стандартной виртуальной машине Lua используется распределение памяти со сборкой мусора (аналогично Java или .NET).
Важно отметить, что текст программы на языке LUA компилируется в байт-код не один раз, при создании exe-файла (как, например, в языке C++), а каждый раз при запуске программы. Таким образом, LUA позволяет создавать и менять логику поведения программы без изменения exe-файла, что позволяет построить гибкую архитектуру и вносить изменения в программу сторонними разработчиками без изменения основного exe-файла.
По сравнению с аналогами, например, с языком Python, у LUA есть важное преимущество – сильная интеграция с кодом C++, т.е. возможность использовать функционал C++ программы из LUA, и наоборот. Также, важную роль в выборе этого инструмента сыграл мой опыт работы с ним.
^ Библиотека OGRE
В основе системы визуализации лежит графический движок OGRE. Графический движок – программное обеспечение, основной задачей которого является визуализация (рендеринг) двухмерной или трёхмерной компьютерной графики.
OGRE (Object-Oriented Graphics Rendering Engine) — графический объектно-ориентированный движок с открытым исходным кодом, написанный на C++. Автором OGRE является Steve Streeting. Работа над движком, идет с начала 2001 года, после того, как появилась идея создания хорошо слаженного, кроссплатформенного движка с удобным дизайном и архитектурой. Большую популярность движок получил за счет своей гибкости, что позволяет "скрещивать" его со многими другими библиотеками.
К достоинствам этой библиотеки по сравнению с другими можно отнести:
Бесплатность;
Наличие большого количества дополнительного инструментария для работы с различными пакетами 3D моделирования, например, плагин к 3DS Max для экспорта данных сцены в формат движка OGRE;
Понятная и удобная архитектура, облегчающая использование библиотеки;
Мой опыт работы с этим движком.
^ Пакет моделирования 3D Studio Max 8
3ds Max - полнофункциональная профессиональная программная система для работы с трёхмерной графикой. 3ds Max располагает обширными средствами по созданию разнообразных по форме и сложности трёхмерных компьютерных моделей реальных или фантастических объектов окружающего мира с использованием разнообразных техник и механизмов, включающих следующие:
полигональное моделирование;
моделирование на основе неоднородных рациональных B-сплайнов (NURBS);
моделирование на основе порций поверхностей Безье;
моделирование с использованием встроенных библиотек стандартных параметрических объектов (примитивов) и модификаторов.
Методы моделирования могут сочетаться друг с другом.
Моделирование на основе стандартных объектов, как правило, является основным методом моделирования и служит отправной точкой для создания объектов сложной структуры, что связано с использованием примитивов в сочетании друг с другом как элементарных частей составных объектов.
3ds Max был выбран мной потому, что я имею некоторый опыт работы в данном пакете, а также из-за возможности экспортирования данных сцены из 3ds Max в формат, понимаемый библиотекой рендера моего проекта.
§2. Базовая архитектура проекта
Основной задачей проекта было создание платформы для обучения программированию на языке ассемблер в игровой форме.
Т.к. основной задачей проекта является обучение языку ассемблер, то нельзя просто ограничиться справочными материалами по данной теме, необходимо, чтобы учащийся на практике ощутил, что значит писать на низкоуровневом языке ассемблер. Для этого учащемуся нужно дать возможность пройти все этапы разработки программы на ассемблере, от написания кода, до его отладки. Поэтому в программе должна быть возможность писать код, компилировать его, выполнять и отлаживать. При чем, выполнение кода должно быть аналогично выполнению такого кода на процессоре x86. Т.е. нужно реализовать виртуальную машину для языка ассемб
Логика занятия может быть любой, но как правило базовая её часть имеет следующий вид:
lessonInit() – создание необходимого интерфейса, загрузка сцены для мини игры, инициализация переменных;
lessonShutdown() – освобождение используемых ресурсов;
run() – приведение мини игры в начальное состояние, запуск программы, проверка результатов запуска;
stop() – остановка игрового процесса;
lessonUpdate() – обновление состояния мини игры;
checkASMCode() – вызывается извне при компиляции кода программы, используется для проверки соблюдения программой условий, необходимых для работы мини игры, например, проверка наличия в программе определенных переменных.
Также, реализована возможность создавать и использовать из lua-скрипта элементы windows-интерфейса, в частности кнопки (Button), надписи (Label), панели (Panel). Для кнопки есть возможность указать lua-функцию в качестве обработчика для события нажатия. Элементам можно изменять основные параметры, такие как:
размер;
положение на экране;
видимость;
текст;
цвет текста;
шрифт текста;
фоновая картинка.
Таким образом, мини игра может не иметь 3d-сцены, а использовать специально созданный windows-интерфейс (как например, в занятии «Калькулятор»).
Вообще же, элементы windows-интерфейса используются в мини играх каждого занятия, как минимум для вывода текстовой информации.
^ Виртуальная машина
Виртуальной машиной (англ. virtual machine) называют программную или аппаратную среду, исполняющую некоторый код (например, байт-код или машинный код реального процессора), или специф
еще рефераты
Еще работы по разное
Реферат по разное
Муниципальное общеобразовательное учреждение средняя общеобразовательная школа №67 Железнодорожного района города Ростова-на-Дону
18 Сентября 2013
Реферат по разное
Модель уровней самоидентификации личности
18 Сентября 2013
Реферат по разное
Програма всебічного розвитку дитини "Крок за кроком"
18 Сентября 2013
Реферат по разное
Человеческий фактор
18 Сентября 2013