Тема: Учебные скрипты
Простые примеры, которые показывают возможности mShell.
Карандаш
Для сенсорных телефонов. Можно рисовать, касаясь экрана.
use ui, graph as g // используемые модули
ui.ptr(false);
prev = ["x":0, "y":0, "buttons":0]; // предыдущая позиция - не нажато
while true do // бесконечный цикл
c = ui.cmd(); // описание команды
if c["buttons"]=0 then // если нет нажатия
prev["buttons"] = 0; // позиция - не нажато
else
if prev["buttons"] = 1 then // если было нажато
// рисуем линию из старой позиции в новую
g.line(prev["x"], prev["y"], c["x"], c["y"]);
end;
prev = c; // запоминаем позицию
end;
g.show(); // отображаем
end;Акселерометр
Для телефонов с акселерометром. Двигает кружочек по экрану под действием силы тяжести.
use accel, graph as g, ui // используемые модули
x = 100; // начальная горизонтальная координата
y = 100; // начальная вертикальная координата
d = 10; // диаметр кружочка
g.brush(g.black); // выбираем цвет
g.circle(x, y, d); // рисуем кружок
g.show(); // отображаем кружок
ui.mode(1); // фиксируем портретный режим экрана
while true do // бесконечный цикл
v = accel.new(1); // получаем состояние акселерометра
g.brush(g.white); // выбираем белый цвет
g.circle(x, y, d); // закрашиваем кружочек белым
x = x - v["x"]/10; // изменение горизонтальной координаты
y = y + v["y"]/10; // изменение гвертикальной координаты
if x < 10 then x = 10 end; // левее 10 границы не уходим
if x > 350 then x = 350 end; // правее 350 не уходим
if y < 10 then y = 10 end; // выше 10 не уходим
if y > 500 then y = 500 end; // ниже 500 не уходим
g.brush(g.black); // черный цвет
g.circle(x, y, d); // рисуем крожочек
g.show(); // jnj,hf;ftv
end;Гитарный тюнер
Пример работы с меню. Программа воспроизводит звуки выбранной тональности.
use ui, audio, array
// соответствие имен струн и их номеров в массивах с частотами
names = ["Первая":0, "Вторая":1, "Третья":2, "Четвертая":3, "Пятая":4, "Шестая":5];
// частоты каждой струны для разных способов настройки
tones = [
"standard":[330, 247, 196, 147, 110, 82],
"A Tuning":[330, 220, 196, 147, 110, 82],
"Dropped D":[349, 262, 208, 156, 117, 78],
"Open D":[311, 223, 196, 156, 117, 78],
"Open G":[311, 262, 208, 156, 104, 78]
];
cls(); // очищаем вывод
audio.volume(500); // громкость звуков
// генерируем основное меню: сначала название, потом массив с именами пунктов
ui.menu("Струна", array.concat(["Пауза"], keys(names), ["Шаблон"], [ "Выход"]), false);
pattern = "standard"; // шаблон настройки
play = false; // проигрывать ли звук в данный момент
tone = 0; // настраиваем первую струну
while true do // бесконечный цикл
c = ui.cmd(1000); // ждем команду от меню (в с пропишется имя пункта)
if c = "Выход" then
break; // прекращаем цикл
elsif c = "Пауза" then
if play then // если были не на паузе
play = false; // указываем, что не нужно проигрывать звук
print "Пауза"; // выводим, что перешли на паузу
end;
elsif c = "Шаблон" then
if play then // если были не на паузе
play = false; // указываем, что не нужно проигрывать звук
print "Пауза"; // выводим, что перешли на паузу
end;
// вызываем список из имен tones, в котором нельзя выбирать больше одного
// элемента, изначально выбран нулевой, называем список "Выбор шаблона"
// в select запишется массив с номерами выбранных элементов
select = ui.list(keys(tones), false, [0], "Выбор шаблона");
if select#null then // если не нажали на отмену
pattern = keys(tones)[select[0]]; // новое имя шаблона
end;
elsif c#null then // если выбрали одно из имен из струн
play = true; // нужно будет проигрывать звук
tone = tones[pattern][names[c]] *4; // частоту звука берем из таблицы tones
print pattern, c, tone; // выводим имя шаблона, имя струны и частоту
end;
if play then // если нужно проигрывать звук
while audio.busy() do end; // ждем пока освободится устройство проигрывания
audio.beep(tone, 1000); // играем сигнал
end;
end;