Установка упражнений, реализованных с использованием Flash
Установка упражнений, созданных с использованием Flash, основана на формате, разработанном для проведения тестов по
английскому языку. Архив задачи должен иметь вид:
- task.cfg
TYPE = USERS
CHECKER = 'D:\DelTA\Checkers\MathCheck.exe $SOLUTION$ task.out $MAXPOINT$'
CHECKFILES = {task.out}
CHECKSUBJECT = FILE
TEXTTYPE = 'Пользовательская'
- task.xml (значение type="10")
<task name="русское имя задачи" ename="
" author="имя автора" cost="баллы" type="10"/>
Свойство author - необязательное. Все остальные необходимо указать. Свойство type - тип задачи; в данном случае type="10".
cost - максимальная оценка.
- task.out (составляется по обычным правилам)
Первая строка файла должна быть одного из следующих видов:
- countby=task (если балы даются за полностью решенную задачу);
- countby=test (если балы даются за каждый верный ответ).
Далее идут блоки тестов. Каждый блок начинается со строки
[N]
(где N - номер теста). Внутри блока необходимо указать правильные ответы:
Код=Правильный ответ
(Код - имя переменной)
В конце блока теста следует количество баллов за тест:
score[N]=баллов
После всех тестов должна быть формула для вычисления баллов за всю задачу. В ней разрешено использовать операции
сложения и умножения:
total=score[N1]+score[N2]*score[N3]...
Операция сложения представляет собой "обычную" операцию сложения действительных чисел. Операция умножения
действует иначе: результатом "перемножения" нескольких переменных будет 1, если больше половины "множителей" - единицы, 0 -
если не менее половины "множителей" нули.
Вокруг знака "=" в строках вида score[1]=1 пробелы не ставятся. Вообще, все пробелы значимы. Например, если
ans1=12
ans2= 12
то правильным ответом для ans1 является "12", а для ans2 - " 12".
В случае нескольких правильных вариантов ответа достаточно перечислить в файле task.out все возможные варианты:
[1]
ans1=2*t
ans1=t*2
ans1=2t
score[1]=1
- task.asp (файл с условием)
<!--#include virtual="engprocs.inc"-->
. . .
<div align="center">
<%flash("адрес фильма", количество переменных, ширина, высота)%>
</div>
. . .
где имя - имя фильма (например, "webfiles/12.swf"), количество переменных - количество переменных в
ответе, ширина и высота - размеры кадра, в который загружается фильм.
- папка webfiles
- Flash-фильм (расширение swf)
Схема работы упражнения показана на рисунке 1.

Рисунок 1
При выборе пользователем той или иной задачи загружается файл task.asp, содержащий ссылку вызова фильма Flash. При загрузке
task.asp генерируется страница, содержащая кадр фильма и (ниже) кнопку "Отправить". В кадр загружается фильм Flash.
Пользователь работает с фильмом. В результате этого переменные языка ActionScript, содержащие ответ задачи, принимают
определённые значения. Эти значения передаются странице asp с помощью действия fscommand языка ActionScript. По нажатии
кнопки "Отправить" они отправляются на сервер DL, где происходит их сравнение с эталоном.
Формат действия fscommand
fscommand("номер команды", переменная)
где номер команды - натуральное число, взятое в кавычки. Команды нумеруются по порядку, начиная с единицы;
переменная - передаваемая переменная. Имена переменных в кавычки не заключаются.
Например:
fscommand("1", answer1)
fscommand("2", answer2)

Рисунок 2
Следует всегда помнить, что необходимо указывать полный адрес переменной. Так, если сценарий передачи ответа содержится
в экземпляре видеоклипа, а область видимости переменной - основная временная шкала, действие примет вид:
fscommand("1", _root.answer).
(см. "Адресация в ActionScript")
Для передачи ответа из Flash-фильма в документ asp обычно используется обработчик событий onClipEvent(x). Параметр x
представляет собой некоторое событие ActionScript. Обычно это keyUp (отпускание клавиши клавиатуры), mouseUp
(отпускание кнопки мыши) или mouseMove (движение мыши). Применяется следующая концепция: передача ответа должна
автоматически происходить при всяком его изменении. Если в задаче следует ввести текстовый ответ, то изменение наступает
при отпускании клавиши на клавиатуре. Если требуется что-то нарисовать, то изменение может произойти при отпускании кнопки мыши.
(использование onClipEvent() означает, что сценарий передачи данных размещается в экземпляре видеоклипа. Значит, в фильме
должен быть экземпляр видеоклипа...)
При всяком отпускании кнопки мыши выполняется функция makeAnswer(), а затем значение переменной a передаётся документу asp.
Пример архива
Архив + исходник фильма
К содержанию