Pull to refresh

Хотите писать Midp1.0-2.0 приложения но не знаете java? не беда…

Reading time4 min
Views2.3K
Представляю вашему вниманию open source IDE MIDlet Pascal 3.0 beta 2, которая позволяет писать приложения Midp1.0-2.0 на паскале подобном языке.
На хабре уже есть две статьи, но одна про еще платную версию, а вторая неудачна. Статьи я нашёл после написания этой.


Итак MIDlet Pascal 3.0 прямой потомок MIDlet Pascal 2 за авторством Никша Орлича (Nikša Orlić). После версии 2.02 автор программы перестал работать над совершенствованием Midlet Pascal. Однако он заявил, что согласен передать исходный код любому человеку для продолжения разработки, знакомому с Java и C++(на котором написан Midlet Pascal), с условием что проект станет open source и будет развиваться. В сентябре 2009 года исходный код MIDletPascal был передан русскоязычной команде boolean.name

Итак, нам потребуется последняя актуальная версия с SourceForge.
Если понадобиться берем и нужные библиотеки тут, класть их надо в %MIDlet Pascal dir%/Libs. Как правило с каждой библиотекой идёт %LibName%.txt файл со списком функций и краткой справкой по ним.
Также вам понадобится любой из java эмуляторов. Я использую sjboy и kemulator (к сожалению я не нашёл официальной странички этого эмулятора, поэтому ссылка ведет на первую же найденую файлопомойку).

Внимание при установке антивирусы могут ругнуться на некоторые компоненты (мой Dr.Web например ругался).
Некоторые версии антивирусных программ (Norton, McAfee, ...) сообщают о любой программе, написанной на MidletPascal, как о вирусе «Trojan.Redbrowser.A».
Это вызвано тем, что с помощью MidletPascal была написана троянская программа RedBrowser, тайно рассылающая SMS-собщения
В версии 3.0 намечается изменить код одного из классов, чтобы сделать его непохожим на прежние программы и исключить ложные срабатывания антивируса McAfee. Пользователям текущей версии рекомендуется зашифровать готовую программу каким-нибудь обфускатором, например, JSink.

поэтому перед установкой, добавте путь установки в исключения своего антивируса.

Итак имеем:
MIDlet Pascal;
Огромное желание что-нибудь написать;
Немного свободного времени.

Так как я счастливый владелец старенькой Nokia N70 то естественно пишу я под нее и игрушка расчитана на разрешение 176х208.

Запускаем MIDlet Pascal и нас приветствует главное окно


Создаем новый проект File>New>Project называем и указываем папку где он будет храниться, внимание название должно состоять из латинских символов иначе телефон будет ругаться на неверный формат файла, впрочем эмуляторы переваривают прекрасно.
В Project Managere в разделе configuration задаем наш тип мидлета, в нашем случае Midp2.0 fullscreen.
внимание, не пытайтесь редактировать свойства проекта в Project Manager



нажатие delete (с backspace такого одна не случает ;) ) удаляет символы не из этих полей а с того места где курсор стоит в окне редактора, к тому же данные с этих полей все равно не сохраняются, чтобы их изменить откройте файл проекта %project dir%/%project name%.mpproj любым текстовым редактором и редактируйте в своё удовольствие.

Рисуем все нужные нам ресурсы, для создания ресурсов я использовал бесплатный artweaver интерфейс похож на старый добрый Photoshop.
у меня вышло следующее.

все русурсы в проект добавляются через Project Manager>resource>add и сохраняются в папке %project dir%/res. Если вы используете несколько конфигураций (например под разные разрешения экрана) то вы можете сопоставить все ресурсы нужной конфигурации.

Ну вот, осталось собствено написать сам код программы.

Посмотрим что собственно предлагает нам MIDlet Pascal в плане языка:
10 простых типов
boolean
char
integer
real
string
http
resource
image
recordStore
command


2 комплексных
record
array


условия
if ... then ...

логические операции
and
or
xor
not


циклы
for … to … do (downto)
while … do
repeat … until

да, case к сожалению нет, надеюсь что пока


ну вот собственно, всё что нужно имеется.

Создаем в главном модуле цикл который будет отслеживать нажатие клавишь

program tag;

function ProcessUserInput(AKeyCode : integer): boolean;
begin
//тут обрабатываем любые нужные нам кнопки
ProcessUserInput := AKeyCode <> KE_KEY0;//исли нажат 0 то завершаем цикл
end;

begin

repeat
//вот он родимый
until not ProcessUserInput(GetKeyPressed);
end.


теперь создаем все через тот же Project Manager отдельный unit и опишем наши кнопки

в листинге конечно же не все функции приведены.

unit Button;

interface

type
TButton = record
img : image;
pos,num : integer;
end;
...
procedure Paint(AButton : TButton; pos : integer);
procedure Init(AButton : TButton; ImgNumber : integer);
...

implementation

var
bImg: image;

procedure Init(AButton : TButton; ImgNumber : integer);
begin
AButton.img := LoadImage('/' + IntegerToString(ImgNumber) + '.png');
AButton.num := ImgNumber;
end;

procedure Paint(AButton : TButton; pos: integer);
begin
AButton.pos := pos;
DrawImage(bImg,PosToX(pos),PosToY(pos));
DrawImage(AButton.img,PosToX(pos),PosToY(pos));
end;

initialization
bImg := LoadImage('/back.png');//грузим задник
end.


по такому же принципу реализуем и все остальное по возможности групируя сходный код в одни модули.

Теперь об отрисовке изображения, после помещения какого либо элемента на экран нужно вызывать его обновление процедурой repaint
вот реализация Hello World, процедура drawText(text,x,y) поместит на экран текст по заданным координатам.

Program HelloWorld;
Begin
drawText('Hello, world!', 5 ,5);
repaint;
delay(5000);
end.


если вы хотите вывести две надписи то, repaint Нужно использовать в самом конце для отрисовки всего.
Program HelloWorld;
Begin
drawText('Hello, world!', 5 ,5);
drawText('And again!', 5 ,15);
repaint;
delay(5000);
end.


Так-как repaint довольно ресурсоёмкая процедура то вызывать ее рекомендуется когда действительно необходимо перерисовать экран.

Об оптимизации.
Если ваш код оперирует какими либо переменными, то рекомендуется использовать глобальные, так как локальные переменные в процедурах и функциях потребляют значительно больше ресурсов.

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

всё остальное можно реализовать самим, простора для оптимизации в коде море ;)



ссылки
Исходники игры
Подборка библиотек(включая необходимые для компиляции игры)
Страница MIDlet Pascal на SourceForge
Русское сообщество MIDlet Pascal
Справка по MIDlet Pascal
Tags:
Hubs:
Total votes 13: ↑8 and ↓5+3
Comments7

Articles