Midlet Pascal
27 декабря 2007 года
Доброе время суток! Вы хотите написать программку или игрушку для мобильного телефона, а изучать примудрости Java нет желания или возможности? Тогда идеальным средством будет программный продукт MidletPascal. Представляет он из себя эдакий сильно упрощенный Pascal, который после компиляции преобразуется в байт-код явы и выдается в виде двух файлов - jar и jad. Причем для компиляции не требуется ничего, кроме самого MidletPascal, что опять же не может не радовать. В этой статье я постараюсь разъяснить самые основы этого замечательного языка. Предполагается, что Вы немного знакомы с языком Pascal и имеете какой-то опыт программирования на нем.
Запустите MidLetPascal. Создадим нашу первую программку. Жмем "File - "New Project" и в поле "Project name" вводим название проекта (например - "MyProject". Без кавычек, разумеется).
После этого автоматически появляется текст примерно такого содержания:
program MyProject; begin drawText('Hello world!', 0, 0); repaint; delay(2000); end.
Если Вы знакомы с Паскалем, то здесь в принципе все понятно. Первой строчкой идет название проекта. Далее, между begin и end идет сам текст программы. Процедура drawText выводит текст на экран. В данном случае выводится текст "Hello world!" на экран с координатами (0,0), т.е. в левый верхний угол. Но на самом деле текст все равно не будет виден на экране. Дело в том, что используется не один, а два "экрана", т.е. так называемая двойная буферизация. Сначала изображается передний буфер, а drawText выводит текст на задний. Поэтому для того, чтобы наша надпись все-таки была видна пользователю и используется следующая команда repaint, которая перерисовывает содержимое заднего буфера на видимый экран. Но тут есть одно "но". Процедура repaint выполняется довольно медленно и должна вызываться как можно реже. Например следующий код будет работать, но относительно медленно:
program MyProject; begin drawText('Строка 1', 0, 0); repaint; drawText('Строка 2', 0, 10); repaint; drawText('Строка 3', 0, 20); repaint; delay(2000); end.
Так делать не нужно, поскольку здесь происходит перерисовка экрана целых три раза, что довольно медленно. Правильней было бы сделать так:
program MyProject; begin drawText('Строка 1', 0, 0); drawText('Строка 2', 0, 10); drawText('Строка 3', 0, 20); repaint; delay(2000); end.
Ну и последняя строка - delay(2000) - делает паузу. В параметре (в скобках) указывается число миллисекунд. Если не сделать паузу, то когда программа дойдет до конца, она завершится и пользователь просто не успеет увидеть текст на экране.
А теперь давайте напишем программу, делающую что-то полезное :) Например, будет переводить градусы Фаренгейта в градусы Цельсия. Эту задачку довольно часто приводят в программировании. Посмотрим, как решить ее на MidletPascal. Допустим нам надо вывести значения градусов Фаренгейта от 0 до 10 и аналогичные им градусы Цельсия. Начнем с математики. Вычислятся это все по такой формуле:
C = (F - 32) * 5 / 9,
где F - градусы по шкале Фарегейта, а C соответсвенно по шкале Цельсия. Далее приступаем к написанию собственно программы. Ну для начала создаем новый проект, как сказано выше и называем его, например, "Perevod".
program Perevod;
Дальше нам нужно ввести переменные C и F. Для этого пишем "var" на следующей строчке и далее пишем наши переменные (конструкция полностью аналогична паскалю):
var C, F: integer;
integer - это тип переменных (в данном случае целый). Поскольку градусов у нас много, а точнее промежуток от 0 до 10, организуем цикл:
for F:=0 to 10 do begin C:=trunc((F - 32) * 5 / 9); drawText(IntegerToString(F)+' -> '+IntegerToString(C), 0 , F*10); end;
Т.е. F у нас будет меняться от 0 до 10. При вычислении C trunc будет отбрасывать дробную часть, что сделано для упрощения процесса. Дальше с помощью drawText выводим все это безобразие. Кстати в последнем параметре - F*10 сделано для того чтобы автоматизировать переход на следующую строку при выводе. Ну и в итоге приведу полный текст программы:
program Perevod; var C, F: integer; begin for F:=0 to 10 do begin C:=trunc((F - 32) * 5 / 9); drawText(IntegerToString(F)+' -> '+IntegerToString(C), 0, F*10); end; repaint; delay(5000); end.
Вот пока и все. В следующей статье мы поговорим о выводе картинок и обработке нажатий на кнопки.