|
Модератор
2931 / 1790 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
|
||||||||||||||||||||||||||||||||||||
AS 3.0 Урок. Тестирование28.04.2014, 13:35. Показов 2453. Ответов 4
Дамы и господа, будем для разнообразия писать тест.
Постить буду по ходу создания проекта. Тема будет открыта после завершения проекта. Не ждите сразу всего, т.к. данная тема будет пополняться только по мере появления у меня свободных минут. По ходу написания проекта в более ранних постах могут быть правки, не прозевайте. Описание проекта: Написать тест, который можно редактировать в текстовом файле. Вопросы и ответы должны быть в случайном порядке. В конце тестирования показать результат. Ограничить время на вопрос по времени. Начнем-с... Создаем проект (работаю во FlashDevelop, далее ФД или FD), обычный AS3 проект. Я решил начать собственно с файла, который мы будем загружать, в котором у нас будут вопросы и ответы. Да, это не секьюрно грузить вопросы и ответы одновременно, но вы всегда можете реализовать свой проект без таких существенных упущений в системе безопасности Файл этот поместил в папку bin.В качестве формата хранения данных выбран json. Поэтому я создал файл data.json, которому сразу назначил кодировку UTF-8 (без BOM). В качестве текстового редактора использую Notepad++ Собственно содержимое: data.json
Добавлено через 14 минут Основные модули можно создать сразу, можно после загрузки. Т.к. я стараюсь активно использовать паттерн MVC, то сразу создадим модель, вью и контроллер, настроим между ними простые связи. Кликните здесь для просмотра всего текста
Добавлено через 12 минут Теперь создадим класс, который загрузит наш json, распарсит полученные значения и поместит их в модель. Ссылку на модель для этого нужно передать. Также передадим ссылку на загружаемый файл, таким образом, если предположить, что таких файлов может быть несколько (например, выбору темы соответствовал бы один файл), то нам не придется переделывать этот файл. Кликните здесь для просмотра всего текста
3
|
||||||||||||||||||||||||||||||||||||
| 28.04.2014, 13:35 | |
|
Ответы с готовыми решениями:
4
Урок. Структура АС3-проекта Урок: создаем простые молнии используя AS3 Урок. Реализация Drag&Drop на ActionScrip3.0 |
|
Модератор
2931 / 1790 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
|
||||||||||||||||||||||||||
| 30.04.2014, 12:47 [ТС] | ||||||||||||||||||||||||||
|
Пора создать еще несколько классов: класс вопроса со списком ответов, собственно ответы, позже наверное придется добавить еще те ответы, которые дал пользователь для того, что бы показать ему, что он отвечал и в каком порядке.
Собственно данные
Обратите внимание что зависимость между объектами на данный момент построена таким образом, что, однажды создав вопрос, изменить его уже не получится. Таким образом мы соблюдаем один из принципов SOLID: Принцип открытости/закрытости Также я создал еще один класс, в котором будут описываться константы для событий. Можно было бы обойтись (может и не везде) стандартными событиями, например из класса Event, но это не столь наглядно. константы для событий
Добавлено через 1 час 17 минут Настало время после создания основных заготовок приступить к заполнению модели (по сути это можно условно назвать нашей базой данных). Теперь наш загрузчик будет выглядеть так: Загрузчик
А в модель на данном этапе так: Модель
2
|
||||||||||||||||||||||||||
|
Модератор
2931 / 1790 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
|
|||||||||||
| 05.05.2014, 23:06 [ТС] | |||||||||||
|
Как вы обратили внимание в классе Model есть пустой метод shuffleQuestioins, а в классе Question я создам аналогичный метод shuffleAnswers для перемешивания вопросов и ответов соответственно.
На алгоритме подробно не останавливаюсь, не это есть цель данного урока, а разбор разных алгоритмов - достаточно большой пласт знаний, поэтому особенности реализации смотрим в комментариях. Но стоит несколько задержаться на реализации самого перемешивания. Ведь удобно было бы иметь некий статический метод в нужном классе, куда в качестве аргумента передавать для перемешивания любой вектор. Но так не получится ввиду того, что передать "любой"! вектор не получится. Такое можно было бы реализовать с не типизированным массивом (обычный Array), но я считаю, что мы имеем не такое большое количество по сути дублирующих методов, а отсутствие типизации не та цена, которой стоит жертвовать в данной ситуации. Не по теме: Исключительно гипотетически можно было бы перед отправкой на перемешивание преобразовать вектор в массив, а после - обратно, но так делать не стоит - слишком большая нагрузка гонять массивы туда-сюда. Я пока реализую это вот такими методами: перемешиваем
Следующим этапом планирую создавать список вопросов, которые реально будут предложены при тестировании, сохранять результаты, запустить таймер.
1
|
|||||||||||
|
Модератор
2931 / 1790 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 30.05.2014, 12:30 [ТС] | |||||||||||||||||||||||||||||||||||||||||||||||||||
|
Долго не доходили руки, но появилось немного времени. На этом этапе у меня есть список вопросов и ответов, а также визуальная часть. За дизайн не ругайте, я не художник, да и не дизайн мы тут изучаем.
Итак, приступим. Для начала пройдемся по имеющимся классам в порядке их вовлечения в процесс работы приложения. Не по теме: Комментарии будут в виде текста и комментариев в коде. Main
Main - без изменений. В этом классе если что-то и появится, что очень маловероятно, то только в перспективе и это могут быть самые общие надстройки над проектом.
Controller
В контроллере мы начали слушать модель. Слушаем при этом самые основные моменты: появление вопросов для возможности начала тестирования и окончание тестирования. В обработчике окончания тестирования пока ничего кроме трэйса нет - до этого этапа еще не добрался.
Произошли небольшие изменения и при загрузке вопросов. Была добавлена настройка для определения количества вопросов в тесте. Возможно, список настроек еще увеличится. DataLoader
data.json
Далее отображение. Но прежде чем приступить к отображению необходимо создать хоть какой-то дизайн. Поэтому открываем Flash (в моем случае это Flash CS 5.5), создаем fla. Я его назвал test.fla и поместил в папку fla в корне проекта. Не по теме: В конце этого блока сообщений я выложу проект в том виде, в котором он сейчас находится. Со всеми возможными ошибками, недоработками, неточностями. Куда же без этого?! :) Все ошибки, неточности, улучшения и т.д. можно будет обсудить после окончания написания урока. В новом fla 1м делом иду в настройки (File > Publish Settings), там выбираю только Flash и SWC, полностью отключаю все что в OTHER FORMATS. SWC оставлю по умолчанию, а в Flash в ADVANCED оставлю только Compress Movie и Include hidden layers. Это сжатие и включение скрытых слоев соответственно. Проект у меня настроен по умолчанию на AS3, а версия ФП по умолчанию тоже, стоит 10.2. Если в вашем проекте используется класс TLFTextField (это текстовое поле в IDE с расширенным набором настроек), то версия должна быть не ниже 10 (см. описание класса), но если есть возможность избежать использования этого класса в пользу старого доброго динамического текстового поля, то это лучше сделать. Model
Обращаем внимание, что модель у нас может слать события, а, следовательно, она наследуется от EventDispatcher. Также в моделе у нас имеется 2 типизированных массива (Vector) одного типа (Question): один содержит все загруженные вопросы, второй только те, которые участвуют в текущем тестировании. Также в классе есть методы для добавления вопросов, перемешивания (описание было приведено ранее), сброс индекса текущего вопроса, получение ссылки на текущий вопрос и его индекс, геттер и сеттер для получения количества вопросов для текущего тестирования, а также метод, который увеличивает индекс текущего вопроса.
Что еще хорошо бы реализовать, что на данный момент отсутствует. Это интерфейсы. Зачем нам это нужно? Все дело в загрузке. В экземпляре класса DataLoader используются методы модели, которые больше нигде и никогда не должны использоваться. С другой стороны в загрузчике должны быть методы только для добавления вопросов. Остальное - не забота модели. Кстати, пока писал, обнаружил, что загрузчик занимается не тем, чем должен, он, помимо добавления вопросов, занимается перемешиванием, а это не его обязанность. Нужно отметить на будущее и попробовать исправить. Далее я покажу класс отображения, поэтому лучше скачать проект в архиве, что бы можно было сравнивать код с содержимым fla/swc файла. View
updateForStartTesting - преобразуем верхнюю часть. onQuestionUpdate - обработчик, в котором удаляем предыдущий вопрос и пишем следующий. addNewQuestion - собственно отображение нового вопроса. Данные активно получаем из модели. Question
Answer
TestEvents
И еще один класс, в котором у нас будет отображение варианта ответа AnswerView
Ну и теперь выкладываю архив со всем проектом на данный момент. testTutorial.rar
2
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
Модератор
2931 / 1790 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
|
|||||||||||||||||||||||||||||||
| 31.05.2014, 18:01 [ТС] | |||||||||||||||||||||||||||||||
|
Добавил 2 новых класса для хранения выбранных результатов ответов, назвал с приставкой User: UserAnswer и UserQuestion.
Переименовал часть переменных. т.к. были перепутаны answer и question. Старайтесь давать внятные корректные имена переменным на английском языке, на худой конец хотя бы латиницей. Попереносил ряд свойств/методов. Несколько изменил способ генерации вопросов текущего тестирования с учетом появления новых классов. Решил выделить эти изменения отдельным постом для большей наглядности сути происходящего. Без подобных сообщений можно было бы 1м постом описать идею, а 2м и последним сразу результат, что есть цель данного урока. классы
Следующим этапом нужно обобщить вопросы и ответы и реализовать систему наследования, ну и причесать если чего не учел на этом этапе. Также обратите внимание, что не смотря на изменение структуры проекта я нисколько не менял его визуальную часть. И, как полагается, выкладываю исходники в архиве (только классы) src.rar ЗЫ. не забывайте, что в коде все еще могут быть ошибки
1
|
|||||||||||||||||||||||||||||||
| 31.05.2014, 18:01 | |
|
Помогаю со студенческими работами здесь
5
Давайте создадим свой урок по созданию игры!? Тестирование флешки Локальное тестирование VK API локальное тестирование приложения Урок по рисованию кнопок с двойным градиентом, есть ли такой урок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|