Тренировочные задания

В нижеследующем примере рассматривается использование генератора случайных чисел при создании тренировочных упражнений.

Условие задачи.

Заполнить пустые клетки таблицы, вычислив неизвестные скорость, время либо расстояние в каждом столбце.

Описание работы приложения.

При воспроизведении фильма числовые данные создаются посредством генератора случайных чисел. Столбцы таблицы заполняются последовательно: лишь решив предыдущее задание, можно перейти к следующему. После того, как таблица будет заполнена, появляется надпись "Задание выполнено".

Основная временная шкала соответствующего документа Flash содержит один кадр. Вид рабочего поля показан на рисунке 1.


Рисунок 1

Созданному приложению присущи следующие особенности:

  • при воспроизведении фильма видимы лишь поля ввода текущего и уже заполненных столбцов;
  • кнопка "OK" смещается к текущему (заполняемому) столбцу;
  • надпись "Задание выполнено", став видимой, начинает вращаться и менять прозрачность;
  • в ответ входит не только числовое значение, но и единицы измерения.

    Ключевой кадр основной временной шкалы документа содержит следующий сценарий:


    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() возвращает целое неотрицательное число, строго меньшее значения переданного ей параметра.

    random(k) О [0; k)

    Проверку очередного ответа обеспечивает сценарий, содержащийся внутри экземпляра кнопки 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

    Просмотреть фильм в новом окне


    Назад
    К содержанию