В нижеследующем примере рассматривается использование генератора случайных чисел при создании тренировочных упражнений.
Условие задачи.
Заполнить пустые клетки таблицы, вычислив неизвестные скорость, время либо расстояние в каждом столбце.Описание работы приложения.
При воспроизведении фильма числовые данные создаются посредством генератора случайных чисел. Столбцы таблицы заполняются последовательно: лишь решив предыдущее задание, можно перейти к следующему. После того, как таблица будет заполнена, появляется надпись "Задание выполнено".Основная временная шкала соответствующего документа Flash содержит один кадр. Вид рабочего поля показан на рисунке 1.
Созданному приложению присущи следующие особенности:
Ключевой кадр основной временной шкалы документа содержит следующий сценарий:
stop ();
meas =new Array( "км/ч", "ч", "км") //список единиц измерения
column = new Array();
//массив содержимого столбцов
inp = new Array(3, 2, 1, 2, 1);
//список полей ввода - в каком столбце каким номером
for (i=0; i<5; i++)
//создание многомерного массива; задание числовых данных
{ column[i] = new ColData(10+random(100), 1+random(7)); }
for (i=1; i<=5; i++)
//Заполнение таблицы: i - номер столбца, j - строки
{
for (j=1; j<=3; j++)
{
if (j != inp[i-1])
//если j-тое поле i-той строки - не поле ввода...
{
if (j == 1)
{
_root["a"+i.toString()+j.toString()] = column[i-1].v; }
else if (j == 2)
{
_root["a"+i.toString()+j.toString()] = column[i-1].t; }
else
{
_root["a"+i.toString()+j.toString()] = column[i-1].s; }
_root["a"+i.toString()+j.toString()] += " "+meas[j-1];
}
}
}
for (i=2; i<=5; i++)
//Все поля ввода, кроме первого, становятся недоступными
{ _root["n"+i.toString()]._visible = false; }
Selection.setFocus("n1.a1");
//Фокус ввода передаётся первому полю ввода
but._x = 170;
//Определяются координаты кнопки "OK"
but._y = 290;
td._visible = false;
//Надпись "Задание выполнено" делается невидимой
e1._visible=false
num = 0;
//Количество заполненных столбцов
rt = 0;
//увеличение поворота td (надпись анимированная - вращается)
//функция создания многомерного массива
function ColData (x, y)
{
this.v = x;
this.t = y;
this.s = x*y;
}
//функция проверки ответа номер nt
function CheckAnswer (nt)
{
var a = "";
//a - правильный ответ; будет сравниваться с введенным
if (inp[nt-1] == 1) //определение числового значения a
{ a = column[nt-1].v.toString(); }
else if (inp[nt-1] == 2)
{ a = column[nt-1].t.toString(); }
else
{ a = column[nt-1].s.toString(); }
a += " "+meas[inp[nt-1]-1].toString();
//Добавление к a единиц измерения
if (_root["n"+nt.toString()].a1 == a)
//сравнение a с введенным ответом
{ return true; }
else
{ return false; }
}
Как видно из приведенного сценария, числовые данные задачи задаются с помощью функции random() и помещаются в многомерный массив. Функция random() возвращает целое неотрицательное число, строго меньшее значения переданного ей параметра.
Проверку очередного ответа обеспечивает сценарий, содержащийся внутри экземпляра кнопки DoneButton (с надписью "OK"). Поскольку кнопка должна перемещаться в случае правильности ответа, она размещена внутри видеоклипа But, экземпляр которого находится на рабочем поле. Сценарий, связанный с экземпляром кнопки, имеет вид:
on (release, keyPress "<Enter>")
//При нажатии на клавишу <Enter> или на кнопку
{
if (_root.CheckAnswer(_root.num+1)) //Если ответ правильный
{
_root.e1._visible = false;
//Скрыть сообщение об ошибке
_root.num++;
//Увеличилось количество решённых задач
if (_root.num == 5)
//Если заполнена вся таблица
{
_root.but._visible = false;
//кнопку убрать
_root.td._visible = true;
//Показать надпись
_root.td._rotation = 0;
//Стартовый угол поворота td
_root.rt = 2;
//Прибавку rt к углу поворота td сделать равной двум
}
else
// Если заполнена не вся таблица
{
_root.but._x += 90;
//Сдвинуть кнопку на 90px вправо
_root.e1._x += 90;
//Сдвинуть сообщение об ошибке
_root["n"+(_root.num+1).toString()]._visible = true;
//Показать следующее поле ввода
}
_root["n"+_root.num.toString()]._alpha = 50;
//Заполненное поле ввода сделать полупрозрачным
}
else
//В случае ошибки показать сообщение об ошибке
{ _root.e1._visible = true; }
Selection.setFocus("_root.n"+(_root.num+1).toString()+".a1");
}
Вращение видеоклипа TaskDone осуществляется с помощью задания сценариев ключевым кадрам его временной шкалы. Временная шкала TaskDone содержит четыре ключевых кадра. Изображение в них одинаковое (прямоугольник с буквами). Каждый кадр содержит некоторый сценарий:
Кадр | Сценарий |
1 | _root.td._rotation += _root.rt;
//Увеличить угол поворота td на величину rt
if (_root.td._rotation == 360) //значения угла поворота находятся на [0; 360) { _root.td._rotation = 0; } |
2 | _root.td._rotation+=_root.rt; |
3 | _root.td._rotation+=_root.rt; |
4 | _root.td._rotation+=_root.rt;
//Увеличить угол поворота td на величину rt
_root.td._alpha=40+random(60); //Изменить прозрачность td |
Просмотреть фильм в новом окне
Назад | К содержанию |