Midlet pascal изображения и кнопки


Midlet pascal изображения и кнопки

Вот, наткнулся на клевую программу. Бесплатная и удобная.
Если не ставить себе задачи сразу делать 3D-игры, то и вполне полезная.

Я ужн сделал пару вариаций на тему «Hello world». Очень понравилось.
Чего и вам желаю :)

MIDletPascal — паскалеподобный язык программирования, предназначенный для
разработки мобильных приложений.
Компилятор MIDletPascal транслирует исходный текст на Паскале в байт-код Java
micro edition (J2ME).
Программы, созданные в MIDletPascal, могут исполняться любым мобильным
устройством (таким, как мобильный телефон), поддерживающим платформы
MIDP 1.0 и CLDC 1.0.

Разработка мобильных приложений с использованием MIDletPascal — простой
и быстрый процесс.
Если вы уже знакомы с Паскалем, Delphi или Kylix, вы можете начать разработку
собственного мобильного приложения в считанные минуты.

MIDletPascal поставляется с собственной, дружественной к пользователю средой
разработки (IDE) для ОС Windows (98/2000/XP).
Среда имеет встроенный компилятор, инспектор байт-кода Java и обеспечивает
построение архива JAR, так что компиляция и компоновка мидлетов проста,
как нажатие на кнопку.

Поскольку MIDletPascal создаёт непосредственно низкоуровневой байт-код Java,
полученные мидлеты имеют небольшой размер и эффективное время исполнения.

Аналогичные средства, которые можно найти в Internet, создают промежуточный код
и компонуют его в архив JAR вместе с интерпретатором; при подобном подходе
получаются большие и медленно исполняющиеся JAR-файлы.

MIDletPascal создаёт непосредственно байт-код Java, так что вам не нужно иметь
установленный на вашем компьютере компилятор Java, а компиляция с помощью
MIDletPascal происходит очень быстро.

С добрым утром) была уже и такая тема, и ругательная тема)

Кстати, AVG Free почему-то считает MP-мидлеты — вирусами %-)

Благородный сэр! Не хотите ли обсудить столь же животрепещущие темы, как то: «Борланд продал Делфи», «все входящие бесплатно и что с нами теперь будет», «как свернуть программу туда где часы», «допустим ли на форуме падонкавский слэнг»?

Е-мае :).
Надо перед созданием каждой новой темы обязательный поиск проходить по форуму.
Предложение админу это :). 13% мне.

На кнопку «Добавить» повесить функцию поиска? хорошоя идея, хех

Ну, накинулись на парня. Он с чистой душой спешил нас всех порадовать, тем что узнал, а тут (впрочем как всегда) его хаять начали. тьфу. Промолчали бы в таком случае.

P.S. Сказано шутя, но в каждой шутке, есть доля шутки.

> [6] Andy BitOff © (21.08.06 08:56)

Сначала на молодых накидываются, потом молодые становятся дедами и накидываются на молодых. Все закономерно.

к админам и модерам : Есть идея создать раздел под миделпаскаль потому что слов на эту тему сказано много , пусть новички и не новички пишут там


> Furyz © (21.08.06 11:41) [9]

Что ж ты такой на идеи богатый.

2 Чапаев :
«Благородный сэр! Не хотите ли обсудить столь же животрепещущие темы,
. «как свернуть программу туда где часы»?»

Не хочу. И не надо меня «прикалывать», я тебе не сделал ничего плохого.
Я хоть и ламер, но благодаря RXLib знаю, как это делать :)

Я поискал в «поиске». И правда, был такой сабж.
Но он касался неудовольствия Мастера Джо отсутствием дин.массивов.
А кто сказал, что разработчики MP стремились копировать Паскаль?
А Паскаль в рамках Дельфы может создать игрушку «Тетрис» для мобильника
размером 3300 байт? Дело даже не в размере, а в работоспособности.
Господа мастера Дельфы! Будьте, наконец снисходительны к начинающим?
Мне друзья-старшекурсники рассказывали, что когда-то и KOL ругали так и перетак.
А теперь? Вижу целую конфу вместе со спорным FreePascal.
И что, там везде благорастворение воздухов для Мастера Джо?

Cпасибо за внимание.

2 Furyz: Было бы здорово! Потому, что MP — язык своеобразный и остроумные находки
дельфийских специалистов (хоть и без дин.массивов) могли бы многим помочь,
Я вот честно, Java не юзал. И так обрадовался, когда увидел что-то знакомое.

И, главное, вполне работающее.

> Но он касался неудовольствия Мастера Джо отсутствием дин.массивов.

Не только. Но, если уж о них. Отсутствие динамических массивов в языке для Джавы — совершенно губительно, ибо эмулировать их нечем ввиду отсутствия указателей.
Но, повторю, я в той ветке говорил далеко только не о их отсутствии. Как, например, объяснить невозможность задания отрицательных целочисленных констант? Небрежностью авторов языка, больше ничем. Собственно, ветка была именно об этом — о низком качестве коммерческого продукта.



> И что, там везде благорастворение воздухов для Мастера Джо?

Если не затруднит, то разъясните эту Вашу фразу.

> ибо эмулировать их нечем ввиду отсутствия указателей.

И классов/объектов.

2 Джо:
«Не только. Но, если уж о них. Отсутствие динамических массивов в языке
для Джавы — совершенно губительно, ибо эмулировать их нечем ввиду
отсутствия указателей.
Но, повторю, я в той ветке говорил далеко только не о их отсутствии. Как,
например, объяснить невозможность задания отрицательных
целочисленных констант? Небрежностью авторов языка, больше ничем.
Собственно, ветка была именно об этом — о низком качестве
коммерческого продукта.»

Ну, вы же мастер? Возьмите и создайте МР на свой вкус?
И с заданием отрицательных констант в том числе.
А ругать беспечных (последняя версия МР — бесплатная) разработчиков —
дело нехитрое.

> (последняя версия МР — бесплатная

http://www.midletpascal.com/purchase.php

2: Мастер Джо:
http://www.midletpascal.com/

Там красненьким выделено.

У меня уже больше одиннадцати часов работает
и уев не требует:)

> [16] Ringo © (21.08.06 20:02)
> Там красненьким выделено.

Там выделено красненьким «последняя версия бесплатная»? Нет, там красненьким выделено «FREE for personal use».

2 Maстер Джо:
«Нет, там красненьким выделено «FREE for personal use».

А если я не зарегистрировался, то я, by default и есть, как раз,
тот самый, который FREE for personal use»:)

Вы очень серьезно воспринимаете претензии США к вступлению России в ВТО.
Вам что, обязательно нужно рекламное объявление «free of charge»?

Разработчики МР не этого добивались. Так же, как и создатели в свое время
бесплатной «Аськи». Им нужны энтузиасты, «подхватыватели».

Давайте будем вместе и проще?
Сделана улетная программа. Не лишенная, ну некоторых недоделок.
Не лишенная же и своеобразного шарма и известного изящества (вы если пробовали
помимо ваших отрицательных массивов, наверное оценили?).

Уникальная в смысле времени и размера компилляции.
Находка для дельфистов, для паскальщиков.

ЧТО ВАМ ЕЩЕ НАДО?

Иначе, открывайте ветку на мастерах : «Преимущества Java в рамках отрицательных
и, главное, целочисленных констант».

И мы все, типа, преклонимся.


> Ringo © (21.08.06 05:49)
> Аналогичные средства, которые можно найти в Internet, создают
> промежуточный код
> и компонуют его в архив JAR вместе с интерпретатором; при
> подобном подходе
> получаются большие и медленно исполняющиеся JAR-файлы.
>
> MIDletPascal создаёт непосредственно байт-код Java, так
> что вам не нужно иметь
> установленный на вашем компьютере компилятор Java, а компиляция
> с помощью
> MIDletPascal происходит очень быстро.

Положим, что разработчики сравнивают своё изделие MIDletPascal с альтернативными и похожими инструментами для создания программ для платформы J2ME на Бейсике и Пайтоне, например.

Но стандартная среда для создания мидлетов Sun WTK компонует jar-файл из бинарных class-файлов и медиа-ресурсов, используемых в мидлете. Никаких интерпретаторов кода там не нет.

Благодаря бесплатности и доступности инструментария (Sun J2SE SDK, Sun J2ME WTK, IDE Eclipse, плагина EclipseME, Ant, Antenna, IDE NetBeans в редакции, позволяющей создавать мидлеты и рисовать GUI для них, и т.д.) для большого числа операционных систем (Windows, Linux, Solaris, FreeBSD, MacOS) и платформ (x86, x86/64, SPARC, MIPS) надобность в продукте типа MIDletPascal сомнительна для профессиональных разработчиков, но оказывается отличным стимулом для профессионального роста и изучения Java и платформы J2ME, в частности, в конечном счёте.

Джо © (21.08.06 19:38) [12], т.н. «динамические массивы» это что-то типа системного класса java.util.Vector в Java и J2ME, я вас правильно понял?

> [18] Ringo © (21.08.06 20:54)
судя по оценкам Джо — сделано, извините, фуфло, которое пытаются «впарить» за деньги. я бы смирился с описаными Джо багами/недоработками, если бы это был Open Source продукт — там хоть поправить можно. да и поправили бы дано. а требовать деньги за то, что элементарно не тестировалось как следует — это даже не смешно.

зыж «free for personal use» — это вовсе не «делайте всё, что хотите». это нечто типа «колхоз — дело добровольное, а не так, что кто хочет — идёт, кто не хочет — нет».


> Джо © (21.08.06 19:38) [12], т.н. «динамические массивы»
> это что-то типа системного класса java.util.Vector в Java
> и J2ME, я вас правильно понял?

«Динамические массивы» это что-то вроде динамических массивов в Delphi :)


> Джо © (21.08.06 21:33) [21]
>
> > Джо © (21.08.06 19:38) [12], т.н. «динамические массивы»
> > это что-то типа системного класса java.util.Vector в Java
> > и J2ME, я вас правильно понял?
>
> «Динамические массивы» это что-то вроде динамических массивов
> в Delphi :)

В Java есть ссылки. Используйте их вместо указателей и делайте свой «динамический массив». Помниться, в TP5.5 ограничение на «динамические массивы» легко обходится применением указателей и перевыделения памяти. В Java перевыделять ничего не надо, надо просто правильно использовать ссылки. Или сам язык MIDletPascal не умеет оперировать ссылками и дело не в Java?

Проблема-то какая заумная. Ни разу за семь лет использования языка не понадобилось делать в Java «динамические массивы как в Delphi». Что я делаю не так? :)

> Или сам язык MIDletPascal не умеет оперировать ссылками
> и дело не в Java?

Именно :) Причем тут Джава? Джава-то не виновата в грехах MIDLet Pascal»я ;)

Кстати, ту утилитку, о которой я писал в той ветке, я успешно написал на Джава.

> [23] iZEN © (21.08.06 22:24)
а где Джо говорил про «отсутствие динамических массивов в языке Java»?


> Ketmar © (21.08.06 22:28) [25]
>
> > [23] iZEN © (21.08.06 22:24)
> а где Джо говорил про «отсутствие динамических массивов
> в языке Java»?

Из контекста его высказываний я не понял, чего это касается.

Треугольные массивы можно создавать в Java и, в частности, в J2ME, а тут какая-то проблема обрисовалась с «динамическими массивами». Что ещё за динамические массивы? Такие, которые могут изменять свою длину в ту или иную сторону и/или наращивать размерности в процессе работы? Такие «как в Delphi»?

Так если есть ссылочный механизм работы, то проблема — пшик, решается за полчаса.
Ладно. Проехали. ;)

> в TP5.5 ограничение на «динамические массивы» легко обходится
> применением указателей и перевыделения памяти

Скажу более, динамических массивов как конструкции языка не было до четвёртой версии Делфи. :-)

> [26] iZEN © (21.08.06 22:34)
там не совсем «по полочкам», но, имо, ясно, что речь шла о Midlet Pascal, а не о Яве. понятно, что в Яве есть. %-)

зыж да ладно Вам. зато ещё один повод похвалить Яву. я знаю магический способ Вас вызвать: сказать «Java». можно даже шёпотом и в пустой комнате. %-))

Вот тут я выложил хелп для МР для начинающих, на русском, чтобы не париться
в переводах с английского.
Я сам начинающий. Начинающие меня поймут :)

narod почему-то требует, чтобы ZIP писался большими буквами.
Читайте и наслаждайтесь.

Так. Повторю еще раз, хоть это уже похоже на цирк :)

В МП, как на планете Шелезяка:
1. Ссылочных типов нет;
2. GetMem»ов (и аналогов) нет;
3. Классов/объектов нет.

Поэтому я даже не представляю себе, чем бы можно было заменить отсутствие хотя бы дин. массивов (т.е, таких, которым можно было задавать размер во время исполнения, а не компиляции).

Впрочем, там есть возможность использовать скомпилированные Java .class-файлы. Но выходом это назвать нельзя. Все-равно, что в Делфи разрабочтики забыли бы реализовать циклы, сказав, что «все-равно их можно на ассемблере закодировать, наш компилятор это позволяет». :)

> [30] Джо © (22.08.06 11:25)

Мой пост в ответ на [26] iZEN ©

2 Джо :
А я сегодня после бессонной ночи в интернете взял и сфоткал
свою рожу в эмоциях от снисходительного поощрения до фанатического
почти футбольного восторга.

Сделал Resize до размера экрана телефона моей девушки, перевел
jpg в png, в 256 цветов (программой PaintShopPro (бесплатная)).
Взял исходник игры «Тетрис», который любезно предоставляется
разработчиками MP (они пишут: «Делайте с ним, что хотите»).

Потом засунул вызов этих фоток (loadImage) последовательно по мере успехов игрока.
(Пришлось выкладывать на форму, чтобы не портить Canvas. Форма
сверху и снизу немного затмевает изображение — там снизу выводятся
менюшки кнопок навигации а сверху — состояние акуммулятора и уровень
сигнала).

Но все равно, получилось классно. 20 фоток с игрой всего 360 К!

Приехал с подарком! Загрузил ей через IRDA.
Девушка от восторга мало, что не прыгала.
Но шепотом заметила: «Катька позеленеет от зависти».

(Катя — это, ну вообщем это в прошлом семестре было).


А вы все про динамические массивы изволите рассуждать ;)

>>>>сегодня после бессонной ночи в интернете
Эх, если бы ты бессонную ночь ты с девушкой провел, тогда Катька позеленела бы от зависти точно.
Ну блин студенты. занимаются непойми чем.

> [28] Ketmar © (21.08.06 22:39)
> > [26] iZEN © (21.08.06 22:34)
> там не совсем «по полочкам», но, имо, ясно, что речь шла
> о Midlet Pascal, а не о Яве. понятно, что в Яве есть. %-
> )
>
> зыж да ладно Вам. зато ещё один повод похвалить Яву. я знаю
> магический способ Вас вызвать: сказать «Java». можно даже
> шёпотом и в пустой комнате. %-))

Странно, что «Суматра» или «Калимантан» не вызывают подобного эффекта — явная дискриминация по месту жительства! ;-))

> [33] Ringo © (22.08.06 17:29)
а. ну да. серьёзная задача, как же. конечно. куда уж нам. мы, знаете, тетрисы давно не пишем. разучились, наверное.

смею заменить, что ринго тетрис тоже не сам писал.

> [38] wl © (22.08.06 19:13)
ну да. тем более.

Как я рад за вас с девушкой! Не передать словами. И за Катю тож.

Душевно Ваш,
Джо.

Уроки, Туториалы, Мануалы со всего света!

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

Текущее время: 12-11, 16:42

Часовой пояс: UTC + 3 часа

Midlet Pascal. Работа с формами.

Страница 1 из 1 [ Сообщений: 2 ]
Версия для печати Пред. тема | След. тема
Автор Сообщение
DiAm
Пока что, только учусь!

Зарегистрирован: 13-03, 17:36
Сообщения: 5

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

Нам понадобятся 2 переменные типа Integer(это будут ID объектов-текстовых полей), 2 типа String, и одна типа Command(кнопка).

Пропишем их в поле var

Для начала работы с формами нужно перейти в режим формы командой ShowForm (чтобы вернуться обратно в режим рисования введите команду ShowCanvas)

Добавим первое текстовое поле на экран:
item , 20, TF_ANY);

FormAddTextField — добавляет текстовое поле на экран. Параметры-Название(будет написано над полем),Что будет написано в поле стандартно, позиция относительно надписи, и флаг.

Первый параметр-Введите ваше имя,второй оставим пустым,третий желательно оставить 20, хотя можете поэкспериментировать.

Относительно флагов: существует несколько флагов текстового поля. TF_ANY-можно вводить любые символы,TF_NUMERIC-только числа, TF_PASSWORD-все символы заменяются символом *.

ietmid1-это ИД нашего объекта-текстового поля.

Заметьте: Repaint Вводить ненужно, т.к. мы работаем с формой.

Аналогично добавим второе текстовое поле, но уже с флагом TF_NUMERIC


item , 20, TF_NUMERIC);

Теперь добавим кнопку.

CreateCommand-добавляет кнопку на форму.

Первый параметр-надпись на кнопке, вторая-флаг, а третий параметр можно не трогать.

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

В качестве параметра указываем ID этой кнопки, который хранится в переменной cmd.

Теперь нам нужно сделать задержку, чтобы приложение не закрывалось раньше времени. Однако delay тут уже не поможет-ведь пользователь может и не успеть написать текст, или напишет и будет ждать. Для задержки мы будем использовать кнопку и цикл repeat. until.

С помощью процедуры GetClickedCommand мы можем узнать ID последней нажатой клавиши или кнопки.

Итак, пишем цикл:

repeat Delay(100) until GetClickedCommand=cmd

То есть: повторять команду Delay(100)-задержка 0,1 секунды до тех пор, пока id нажатой кнопки не будет равен cmd-т.е. попросту пока мы не нажмем кнопку.

После того, как кнопка была нажата, нужно считать данные с текстовых полей.

Для этого существует процедура FormGetText(ID) — в ID нужно указывать ИД текстового поля.

Итак, читаем данные в переменные name и age:

Теперь нужно организовать вывод текста на экран.
Для начала переключимся в режим холста(рисования) командой ShowCanvas

Теперь выведем данные на экран командой DrawText, причем первую строчку сделаем красной, а вторую -синей:
SetColor(255,0,0)
DrawText(‘Ваше имя:’+name,0,0)
SetColor(0,0,255)
DrawText(‘Ваш возраст:’+age,0,30)

Не забудем перерисовать данные с «виртуального» экрана и поставим 10-секундую задержку:

Готово! Полный листинг программы:

Program Forms;
var itemid,itemid2:integer;
cmd:command;
name,age:string;
Begin
ShowForm;
item ,20,TF_ANY);
item , 20, TF_NUMERIC);
cmd:=CreateCommand(‘OK’,CM_OK,50);
AddCommand(cmd);

ShowCanvas;
SetColor(255,0,0);
DrawText(‘Ваше имя: ‘+name,0,0);
SetColor(0,0,255);
DrawText(‘Ваш возраст: ‘+age,0,30);
Repaint;
Delay(10000);

Поместить картинку на фон кнопки

Здравствуйте. Помогите пожалуйста.
1)
Как в PascalABC можно сделать фон у кнопки в виде картинки?
Или как вставить в нужное место картинку и сделать её как кнопку?

2)
Можно ли как-нибудь сделать, чтобы при нажатии на кнопку появлялось новое окно поверх текущего, затем при нажатии на окне, которое вылезло, кнопки — оно закрывалось. Но если пользователь снова нажмёт на кнопку основного окна — снова должно появиться то окно.
Заранее спасибо.

19.08.2012, 19:20

Как установить картинку на фон формы
Народ подскажите как в PascalABC.NET установить картинку, именно КАРТИНКУ на фон, точнее в правую.


Поместить в элемент ListView картинку и кнопки
Здравствуйте, пытаюсь разобраться со списками и возник такой вопрос: «Можно ли, в элемент listview.

Программно поместить картинку в качестве фона кнопки
Не могу разобраться как по клику изменить картинку фона , кнопки.

Программно установить картинку из ресурсов на фон кнопки
Картинку из ресурсов установить на фон кнопки.Программно,Ссылкой.

Как изменить фон окна (WPF) нажатием кнопки на картинку?
Как изменить фон окна (WPF) нажатием кнопки на картинку?

Midlet pascal изображения и кнопки

Сегодняшний рассказ о MidletPascal. Когда-то, лет пять, назад, когда большинство телефонов понимало только явовские приложения, я уже попробовал писать на нём простенькие программы. Но на тот момент функционал был явно недостаточным даже для написания простенких софтин и к тому же MidletPascal был платным.

Теперь по-порядку. MidletPascal — это инструмент (IDE) для написания программ на языке Pascal для мобильных телефонов. Код транслируется в привычные для владельцев мобильников JAD и JAR файлы.

Для тех, кто решит испытать MidletPascal в действии ниже приведено описание.

  1. Качаем отсюда последнюю версию
  2. Устанавливаем в произвольную директорию. У меня это будет c:\Program Files\MIDletPascal 3.3 FINAL\
  3. Качаем и устанавливаем эмулятор на котором будем проводить испытания. Я выбрал KEmulator. Взять можно отсюда
  4. Качаем библиотеки отсюда. Устанавливаются путём копирования в папку с MidletPascal’ем в каталог Lib. У меня это c:\Program Files\MIDletPascal 3.3 FINAL\Libs\
  5. Теперь можно запускать MidletPascal и немного его поднастроить. Первым делом я меняю язык интерфейса на русский: меню View->Language. Далее настроим эмулятор для запуска: меню Настройки->Эмуляторы->Управление… Выбираем эмулятор «Default» и жмём Редактировать. В появившемся меню нужно прописать путь к эмулятору.

Пишем игры на MIDletPascal

Delphi , Алгоритмы , Игры

Пишем игры на MIDletPascal

Введение

В последнее время, игры для мобильных устройств, приобретают всё большую популярность. В частности, достаточно широко распространены Java игры для сотовых телефонов. Каждый владелец современного телефона, имеет на руках готовую игровую платформу, способную развлечь своего хозяина в любой момент. Именно из-за этого факта, большая часть разработчиков компьютерных игр переметнула на рынок мобильных устройств…

Итак, “нормальные” люди пишут Java игры естественно на языке Java (J2ME). Но т.к. цели у нас пока не слишком грандиозные… идём выбирать что-нибудь проще. Из наиболее простых языков (надстроек) знаю лишь два: Mobile BASIC и MIDletPascal. Как раз о последнем и пойдёт речь в данной статье, т.к. он имеет хоть и скудные, но более продвинутые возможности в отличии от первого.

Материал данной статьи не является полным описанием возможностей MIDletPascal, это более похоже на вводный курс, демонстрирующий применение наиболее необходимых для написания игр возможностей языка.

Установка и настройка

Прежде чем начать, нам необходимо иметь 2 вещи: компилятор и эмулятор. Первый предназначен для компиляции Pascal кода в Java байткод. А при помощи второго мы будем лицезреть наши достижения не “тревожа”, по пустякам, телефон…

Пишем на MIDletPascal следовательно компилятор берём с официального сайта http://midletpascal.com. На момент написания данного материала, последней версией считалась “MIDletPascal, Version 2.02” за 14 января 2006 г.

Эмулятором будет “Kwyshell MidpX Emulator”.Для тех, кто не хочет качать среду интегрирующуюся в explorer и портящую его внешнюю красоту своими безобразными кнопками с такими же безобразными иконками советую скачать урезанную его версию :)

Итак, первым делом нам необходимо установить сам MIDletPascal. После успешного окончания установки, запускаем его и приступаем к настройке работы с эмулятором. Для этого заходим в пункт меню “Configure – Program options…” и во вкладке “Emulator” добавляем новый (или изменяем свойства стандартного). В “Run command” необходимо прописать путь к скачанному нами эмулятору и параметры его запуска. Эта строка должна выглядеть приблизительно так “C:\MP\Midp2Exe.exe -jar %JAR% -r”. Сохраняем изменения и возвращаемся к главному окну программы.

Теперь всё готово для начала работы в новой для нас среде. Создаём новый шаблон проекта “File – New Project…”. Выбрав имя будущего проекта и его месторасположение на диске, жмём на “Create”. В окне редактора появится банальный код банальной до слёз программы выводящей “Hello world!”. Можно скомпилировать и запустить мидлет нажатием “F9”, ничего сверхъестественного мы не увидим, но будет приятно когда хоть что-то аналогичное “созданное Вами” запустится на любимой моторолке, нокии или что там у Вас.

Я надеюсь, что Вы не впервые сели за Pascal и хоть какой-то опыт написания программ на этом замечательном языке у Вас имеется, так что давайте попробуем написать “продвинутый Hello World!” попутно разучив методы работы с некоторыми функциями и принцип написания мидлетов вцелом.

Темой будет звёздное небо (аналог стандартной заставки в Windows) и парящий над ним (сами знаете какой) текст…

program Hello;
type
// Описываем тип-элемент Звезда
TStar = record
X, Y, Z : Integer; // Положение в пространстве
end;
const
MAX_STARS = 150; // Кол-во звёздочек
HELLO = ‘HELLO WORLD!’; // «Та самая надпись» :)
SPEED = 200; // Скорость, в единицах/сек
var
i : Integer;
// Наши звёздочки :)
Stars : array [1..MAX_STARS] of TStar;
// Ширина и высота дисплея
scr_W : Integer;
scr_H : Integer;
// Время
time, dt : Integer;
// Рисует текущую звёздочку (i), цвета (c)
procedure SetPix(c: Integer);
var
sx, sy : Integer;
begin
// Данные действия, проецируют 3D точку на 2D полоскость дисплея
sx := trunc(scr_W / 2 + Stars[i].X * 200 / (Stars[i].Z + 200));
sy := trunc(scr_H / 2 — Stars[i].Y * 200 / (Stars[i].Z + 200));
SetColor(c, c, c); // Устанавливаем цвет
Plot(sx, sy); // Выводим пиксель этого цвета
end;
begin
// Для начала, получим размеры экрана
scr_W := GetWidth;
scr_H := GetHeight;
// Затем, случайным образом раскидаем звёздочки
randomize;
for i := 1 to MAX_STARS do
begin
Stars[i].X := random(scr_W * 4) — scr_W * 2;
Stars[i].Y := random(scr_H * 4) — scr_H * 2;
Stars[i].Z := random(1900);
end;


// Очистка содержимого дисплея (чёрный цвет)
SetColor(0, 0, 0);
FillRect(0, 0, scr_W, scr_H);

time := GetRelativeTimeMs;
// Главный цикл отрисовки
repeat
dt := GetRelativeTimeMs — time; // Сколько мс прошло, с прошлой отрисовки
time := GetRelativeTimeMs; // Засекаем время
for i := 1 to MAX_STARS do
begin
// Затираем звёздочку с предыдущего кадра
SetPix(0);
// Изменяем её позицию в зависимости прошедшего с последней отрисовки времени
Stars[i].Z := Stars[i].Z — SPEED * dt/1000;
// Если звезда «улетела» за позицию камеры — генерируем её вдали
if Stars[i].Z

Собственно, запустив эту программу на своём телефоне, Вашему счастью не будет предела.

Рисование точек, эллипсов, прямых это весело по началу. Но вскоре захочется вставить какой-нибудь рисунок, картинку, спрайт и т.п.

Как раз для этих случаев MIDletPascal имеет в своём распоряжении набор функций для работы с графикой загруженной из внешних файлов или ресурсов.

Итак, для опытов с графикой, предлагаю попытаться вспомнить о старой, и многими уже давно забытой игре на Dendy — «Battle City». Для начала нам понадобится 4 изображения одного и того же танка повёрнутого на углы pi/2 * n. Эти изображения должны быть в виде png файлов размером 16х16 пикселей, с именами вида tankN.png (где N – порядковый номер изображения, начиная с 0). Почему такие мелкие? Да потому, что далеко не на всех телефонах стоят дисплеи с разрешением выше 128х128 (по крайней мере, так было на момент написания статьи ;).

Нарисовав это чудо техники, создадим новый проект, и первым же делом добавим эти файлы в ресурс при помощи “Project – Import resource file…”. Наш танк должен уметь ездить по нажатию на соответствующие клавиши и ни в коем случае не выезжать за пределы поля! Приступим к написанию кода:

program Tank;
const
SPEED = 1; // Скорость движения танка
var
i : Integer;
// Внешний вид танка при различных углах поворота
tank : array [0..3] of image;
dir : Integer; // направление
X, Y : Integer; // позиция
key : Integer;
begin
// Инициализация
for i := 0 to 3 do // Подгружаем все картинки из ресурса
tank[i] := LoadImage(‘/tank’ + chr(48 + i) + ‘.png’); // 48 — код нуля
dir := 0; // смотрим строго направо
X := 32; // позиция танка по X
Y := 32; // и по Y соответственно :)

// Подготовка поля вывода
SetColor(0, 0, 0);
FillRect(0, 0, GetWidth, GetHeight);

// Отрисовка и обработка ввода
repeat
// Стираем танк
FillRect(X, Y, 16,16);
// Получаем код зажатой клавиши
key := GetKeyPressed;
// Вот что бывает, когда нет возможности использовать case ;)
if key = KE_KEY6 then
begin
dir := 0;
X := X + SPEED;
end else
if key = KE_KEY8 then
begin
dir := 1;
Y := Y + SPEED;
end else
if key = KE_KEY4 then
begin
dir := 2;
X := X — SPEED;
end else
if key = KE_KEY2 then
begin
dir := 3;
Y := Y — SPEED;
end;
// контролируем выход за границы экрана
if X GetW > if Y > GetHeight — 16 then Y := GetHeight — 16;
// Рисуем танк новой позиции
DrawImage(tank[dir], X, Y);
// Вывод этого безобразия на экран и задержка на 20 мс
repaint;
delay(20);
until GetKeyClicked = KE_KEY0; // Закрыть приложение при нажатии «0»
end.

Целью написания полноценной игры я не задавался, так что оставлю врагов, стрельбу и препятствия на Вашей совести… ;)

Игры, как правило, состоят не только из поочерёдно сменяющихся картинок, но и имеют хоть какое-то, но звуковое сопровождение. MIDletPascal поддерживает проигрывание всего одного аудиопотока! Т.е. слышать звук разрывающихся снарядов, под пятую сонату Бетховена не получится. Это есть жирный минус и один из многих камней в огород MIDletPascal. Впрочем, разработчики оставили возможность подключения своих модулей написанных на Java… но мы же пишем на Pascal! ;)

Итак, мы имеем возможность проигрывания midi, wav, mp3 и au файлов. Но в то же время, накладываются ограничения самого телефона, и об этом не стоит забывать. Существует возможность loop’инга, т.е. проигрывания одного и того же звука несколько раз подряд.

Прежде чем что-либо писать, необходимо найти какой-нибудь midi файл, и обозвав его “music.mid” добавить в ресурс проекта. Теперь можно приступать к написанию кода. Далее опишу код простой программки выводящей пучок “болтающихся под музыку щупалец”, заодно познакомив с некоторыми математическими функциями:

program vis;
const
S = 12; // Кол-во щупалец
N = 8; // Кол-во звеньев в каждом из них
var
i, j : Integer;
x, y : Real;
tx, ty : Real;
k, d : Real;
// Углы поворота звеньев относительно друг-друга
a : array [1..N] of Real;
// Длина одного звена
len : Real;

begin
// Инициализация звука
if not OpenPlayer(‘/music.mid’, ‘audio/midi’) then // загрузка музыки
Halt; // ошибка при загрузке (не поддерживается midi формат или звук отключен)
if not SetPlayerCount(-1) then // проигрывать бесконечное число раз
Halt;
if not StartPlayer then // начать проигрывание
Halt;
// Нам необходимо создать что-то графическое.
// Расчёт длины звена, в зависимости от размеров экрана
if GetWidth > GetHeight then
len := GetHeight/2/N
else
len := GetWidth/2/N;
randomize;
k := random(360) * pi / 180;
d := pi * 2 / S; // просто оптимизиация
// Главный цикл
repeat
// Расчёт коэфицента поворота
if random(50) = 0 then
k := random(360) * pi / 180;
// Поворот всех щупалец
a[1] := a[1] + sin(k)/10;
// Интерполяция углов между щупальцами
for i := 2 to N do
a[i] := a[i] + (a[i — 1] — a[i]) * 0.1;
// Рисуем результат (под музыку ;)
SetColor(0, 0, 0);
FillRect(0, 0, GetWidth, GetHeight); // Стираем всё
for j := 0 to S — 1 do
begin
x := 0.5 * GetWidth;
y := 0.5 * GetHeight;
for i := 2 to N do
begin
SetColor(255, trunc(255 — 255 * i/N), 255);
// Немного школьной тригонометрии :)
tx := x + cos(j * d + a[i]) * len;
ty := y + sin(j * d + a[i]) * len;
DrawLine(trunc(x), trunc(y), trunc(tx), trunc(ty));
x := tx;
y := ty;
end;
end;
// Вывод на дисплей
repaint;
until GetKeyClicked = KE_KEY0; // Закрыть приложение при нажатии «0»
StopPlayer;
end.

Самыми медленными операциями в этой программе являются вызовы тригонометрических функций (sin и cos). Существует возможность их оптимизации при помощи использования заранее рассчитанных таблиц значений. Помимо этого, скорость работы данного приложения на различных телефонах может быть различной.

Хочу сказать несколько слов по поводу MIDletPascal IDE. До Delphi IDE ему, конечно же, дальше некуда, и постоянно выскакивающие ошибки при компиляции, суть которых не понятна (часто обычный pascal код разобрать не может :) Но вцелом, среда достаточно удобная. Сам язык является по сути “обрезанным” паскалем. Имеются записи (record), массивы (array) и другие полезные “штучки”, но никакого ООП присущего той же Java не имеется. Т.е. язык по сути является обычным процедурным паскалем без некоторых операторов (case например)

Также имеются дополнительные возможности, такие как: работа с HTTP, отправка SMS, стандартный пользовательский интерфейс, подключение Java модулей и др. Но при серьёзном подходе к написанию мидлетов, MIDletPascal будет ограничивать Вас везде, куда бы Вы ни сунулись… ;)

Статья Пишем игры на MIDletPascal раздела Алгоритмы Игры может быть полезна для разработчиков на Delphi и FreePascal.

Комментарии и вопросы

Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.

Pascal
Как сделать так, что при нажатии клавиши «2» появлялась картинка

Ответ

Объяснение:


На чистом паскале никак. Либо используя графические библиотеки (например, GraphABC в Pascal ABC.NET), либо, например Delphi.

GraphABC:

Далее через процедуру OnKeyDown или OnKeyPress считываем ключ с клавиатуры, и если это 2, то показываем изображение.

Примерно это должно выглядеть так:

if key = 2 then b.Draw(10, 10);

Delphi: на нём гораздо проще. Здесь есть уже готовая форма, и стандартные компоненты (спасибо Delphi за визуальность).

M >Попередня ↔ Наступна

Всім привіт! Продовжуємо вивчати Midlet Pascal. У минулій статті я розповів про самих основах цієї мови. У цій статті Погоріла про речі більш цікавих — трохи порисуємо, розглянемо висновок зображень і обробку натискань користувача на кнопки.

Стандартні фігури зображати в Midlet Pascal дуже навіть просто. Ось, наприклад, намалюємо синій прямокутник 100х100 і в ньому білим текстом напишемо що-небудь. Робиться це так. За колір відповідає процедура SetColor, де в дужках вказуються три кольори, з яких вийде той, який нам потрібен. Кольори вказуються в такому порядку: червоний, зелений, синій. Значення кожного з них може бути від 0 до 255. Наприклад, якщо написати так:

то ми отримаємо яскраво-зелений колір, а якщо так:

Поїхали далі. Прямокутник ми візьмемо зафарбований — для це є процедура FillRect, де в дужках пишуться координати лівого верхнього кута це прямокутника, ширина і висота. У підсумку отримуємо щось на зразок цього:

Прямокутники з лініями — це, звичайно, добре, але явно недостатньо, щоб зробити хорошу іграшку. Непогано було б показати якусь гарну картинку, ніж ми зараз і займемося. З картинками в Midlet Pascal справа йде неважливо, підтримується тільки формат PNG. Тому все зображення, які Ви хочете вивести на екран потрібно переводити саме в цей формат. Для конвертації зображень є багато програм і я не буду на цьому зупинятися. Скажу лише, що особисто мені ближче Photoshop. Там можна і картинку відредагувати і зберегти її як потрібно. Ну так ось. Знайшли Ви хорошу картинку, тепер саме час додати її до нашої програми. Для цього в меню вибираємо «Project -> Import resource file», знаходимо нашу картинку і додаємо її. Вона повинна з’явитися в списку файлів зліва (вкладка «Files»). Якщо у Вас немає такої вкладки, її можна включити через «View -> Files». Припустимо Ваша картинка називається «picture.png». Тепер в програмі пишемо:

Чи означає це приблизно наступне. LoadImage завантажує картинку з ресурсного файлу (символ «/» перед назвою писати обов’язково, інакше нічого не вийде). DrawImage виводить завантажену картинку на екран в точку з координатами (10, 10). Можна (а іноді навіть і потрібно) зробити трохи по-іншому. Спочатку завантажити зображення в якусь змінну (яка в цьому випадку буде мати тип image), а потім вже діяти через цю змінну. Тобто приблизно так:

Для чого це потрібно? Справа в тому, що останній варіант працює набагато швидше. Це, в принципі, не має значення, якщо Вам потрібно вивести одне-два невеликих зображення, а ось якщо цих зображень кілька десятків і пишете Ви дуже динамічну гру — тоді краще робити через змінні. Та й зі змінними зручніше працювати, особливо якщо оформити цю справу в масив.

Ну що ж — з картинками більш-менш розібралися (хоча настійно раджу поексперементувати самостійно — я розповів тільки основи, а ще є багато чого цікавого по цій темі). Припустимо Ви намалювали чудову картинку (наприклад, головного героя гри), зобразили її на екрані і все начебто добре. Але чогось не вистачає. А не вистачає рухів. Користувач буде наполегливо тиснути на всі кнопки підряд, але нічого не трапиться.

Ця програма повністю робоча, але зроблена досить спрощено. Ви можете спробувати зробити її краще. Картинки я докладати не став, бо художник з мене поганий.

Ну ось і все на сьогодні. Наступного разу ми додамо до нашої гри музичне супроводження.

Midlet pascal изображения и кнопки

Краткое описание:
Pascal IDE на Android

Приложение является портом среды программирования Pascal для платформы Android. Оно даёт возможность обучаться и практиковаться без компьютера, что позволяет заниматься созданием программ абсолютно в любом месте.

Сейчас приложение активно развивается и переодически дополняется недостающими параметрами, функциями, типами данных и т.д. Стоит подчеркнуть, что это порт, а потому весь функционал настольного Pascal не будет перенесён, т.к. некоторые функции не несут серьёзного значения (type cursor, for..in loop, with..do .. statement, . ).

  • Compile Pascal programs and run them without Internet.
  • Error when compiling
  • Powerful editor with many smart features:
    1. File menu: create a new program file, open, save, automatically save file
    2. Menu edit: Undo, redo, copy, paste
    3. Auto suggest: Display a small popup window that suggests words that coincide with the word being typed
    4. Auto format: automatically reformat the code for easier viewing
    5. Find / Find and replace: Regular Expression support
    6. Goto line: Move the cursor to a line
    7. Highlight code: highlight the keywords
    8. Code style: many interface for the editor
    9. Font size, font, word wrap


  • Ctrl-C, Ctrl-V, Ctrl-X for Copy, Paste and Cut
  • Ctrl-S, Ctrl-O for File Save / Open
  • Ctrl-B to compile, check for errors
  • Ctrl-R to run the program
  • Ctrl-D to duplicate the current line
  • Ctrl-Z, Ctrl-Y for Undo / Redo
  • Ctrl-L for «go to line»
  • Ctrl-F to Find
  • Ctrl-A to select all

  • Pointers
  • Exceptions
  • Set, and Variant types
  • for . in . do loops
  • with . do statements
  • goto, label (it will never supported)


  • The «aTTSpeech» library converts text to speech. See example text_to_speech.pas
  • The «aRecognition» library converts speech to text (requires Google Voice). See example speech_to_text.pas.
  • The «aVibrate» library supports vibration control. You see example vibrate.pas
  • The «aSensor» library supports processing of Android sensors (light, acceleration, . ). See accelerometer_sensor.pas for accelerometer sensor example
  • The «aNotify» library helps display notifications in the status bar. See the example notify.pas
  • The «aClipboard» library works with the clipboard in Android. See the clipboard.pas example
  • The «aBattery» library retrieves the battery information of the device. See battery.pas example

Русский интерфейс: Да

Разработчик: Trần Lê Duy
Домашняя страница: (FB) Trần Lê Duy
Эл. почта: tranleduy1233@gmail.com
Google Play: Pascal N-IDE

Версия 3.5.3: (без русского языка — косяк разраба) Pascal N-IDE_3.5.3.apk ( 2,36 МБ )

Сообщение отредактировал nikita 13 — 17.04.19, 11:01

const
coeff: array[1..2, 1..12] of -2..2 =
((0, 1, 2, 2, 2, 1, 0, -1, -2, -2, -2, -1),
(2, 2, 1, 0, -1, -2, -2, -2, -1, 0, 1, 2));
delays: array[1..12] of byte =
(50, 56, 56, 50, 56, 56, 50, 56, 56, 50, 56, 56);
lm = 200; <максимальная длина змейки>
k = 4; <радиус тела змейки>
snake_color = 11; <цвет тела змейки>
apple_color = 14; <цвет яблока>
liter_color = 2;

var
i, x, y, d, m: integer;
kl: char;
j, n, sp: byte;
snake: array[1..2, 1..lm] of integer; <массив координат тел змейки>
appl: boolean; <наличие яблока на поле>
apple: array[1..2] of integer;
points: word; <текущее число очков>
spoints: string;

procedure nach; forward;

procedure ending;
begin
sound(400);
delay(800);
NoSound;
setcolor(liter_color);
OutTextXY(100, 10, ‘Игра окончена! Число очков: ‘ + spoints);
OutTextXY(100, 24, ‘Сыграть ещё? (Y / N)’);
readln(kl);
closegraph;
if kl = ‘Y’ then nach
else halt;
end;

procedure krug(a, b: integer; c: shortint);
begin
setcolor(c);
circle(a, b, k);
end;

function color_pt: boolean; <для яблока>
var
i, j: integer;
begin
color_pt := true;
for i := 1 to k + 1 do
for j := 1 to k + 1 do
if getpixel(apple[1] — 3 + i, apple[2] — 3 + j) <> 0 then
color_pt := false;
end;

procedure scanner; <сканирование первого тела на собственный цвет>
var
t: integer;
begin
for t := -k + 2 to k — 2 do
begin
if getpixel(x + t, y) = snake_color then ending;
if getpixel(x, y + t) = snake_color then ending;
end;
if (x = 630 — k) or <если голова вышла за пределы поля>
(y = 470 — k) then ending;
end;

procedure point; <изменение кол-ва очков и вывод на экран>
begin
inc(points, 5 * sp);
sp := (points div 100) + 1;
str(points, spoints);
setcolor(red);
rectangle(1, 1, 100, 35);
setfillstyle(0, black);
floodfill(2, 2, red);
setcolor(black);
rectangle(1, 1, 100, 35);
setcolor(liter_color);
OutTextXY(10, 10, ‘Очки: ‘ + spoints);
end;

procedure appling; <помещение яблока на поле>
begin
repeat
apple[2] := 55 + random(400);
apple[1] := 25 + random(590)
until color_pt = true;
krug(apple[1], apple[2], apple_color);
appl := true;
end;

procedure moving;
begin
while not keypressed do
begin
inc(j);
if j = lm + 1 then j := 1;
snake[1, j] := x;
snake[2, j] := y;
krug(x, y, snake_color);
if j 22.03.17, 21:49 | #4

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

Сообщение отредактировал nikita 13 — 22.03.17, 21:49

MIDlet Pascal 2.02

MIDletPascal — паскалеподобный язык программирования, предназначенный для разработки мобильных приложений. Компилятор MIDletPascal транслирует исходный текст на Паскале в байт-код Java™ micro edition (J2ME). Программы, созданные в MIDletPascal, могут исполняться любым мобильным устройством (таким, как мобильный телефон), поддерживающим платформы MIDP 1.0 и CLDC 1.0.

Разработка мобильных приложений с использованием MIDletPascal — простой и быстрый процесс. Если вы уже знакомы с Паскалем, Delphi или Kylix, вы можете начать разработку собственного мобильного приложения в считанные минуты.

MIDletPascal поставляется с собственной, дружественной к пользователю средой разработки (IDE) для ОС Windows (98/2000/XP). Среда имеет встроенный компилятор, инспектор байт-кода Java и обеспечивает построение архива JAR, так что компиляция и компоновка мидлетов проста, как нажатие на кнопку.

Поскольку MIDletPascal создаёт непосредственно низкоуровневой байт-код Java, полученные мидлеты имеют небольшой размер и эффективное время исполнения. Аналогичные средства, которые можно найти в Internet, создают промежуточный код и компонуют его в архив JAR вместе с интерпретатором; при подобном подходе получаются большие и медленно исполняющиеся JAR-файлы. MIDletPascal создаёт непосредственно байт-код Java, так что вам не нужно иметь установленный на вашем компьютере компилятор Java, а компиляция с помощью MIDletPascal происходит очень быстро.

Знакомьтесь, M >

    Лилия Бородаевская 3 лет назад Просмотров:

4 -= LoPC * team=- MidletPascal 03 Знакомьтесь, MidletPascal Мобильные телефоны давно перестали быть роскошью, и теперь такая игрушка лежит в кармане почти у каждого. С каждым днем приложения для мобильных устройств, приобретают все большую популярность. В связи с таким бурным развитием мобильных технологий большая часть разработчиков переметнула на рынок мобильных устройств. Уже создано достаточно много различных мобильных игр, программ, слайд-шоу, книг и многое другое, что без проблем можно закачать на свой телефон. Но что делать если не получается найти необходимое приложение подходящее под определенный телефон, или есть необходимость в какой-нибудь уникальной программе? Правильно, написать самому! Мобильные приложения пишутся на языке Java(J2ME). Java — интерпретируемый язык программирования, то есть программы на нём требуют дополнительного приложения — интерпретатора. Почти на каждом телефоне установлена собственная виртуальная Java-машина, которая переводит код Java-программы в понятные данному телефону инструкции. Поэтому одни и те же Java-программы удаётся запускать как на современных Windows Mobile коммуникаторах, так и на простеньких телефонах. Но что поделать, если необходимо написать простое приложение, а выучить и использовать Яву нет желания или возможности? Знакомьтесь — MidletPascal! Уверен, что старый добрый Паскаль знаком многим еще со школы и на много роднее чем Java. Как и любое интересное, новаторское и полезное программное обеспечение MidletPascal заработал себе награды, представленные с права. Скачать MidletPascal можно с официального сайта Чем же так примечателен этот продукт, мы рассмотрим далее. И так, что же это за зверь такой? MidletPascal это язык программирования предназначенный для разработки мобильных приложений (мидлетов). После написания исходного кода на Паскале, компилятор Midlet- Pascal транслирует его в код Java micro edition (J2ME). Программы, написанные на MidletPascal, могут исполняться любым мобильным телефоном с поддержкой платформы MIDP 1.0 и CLDC 1.0. MidletPascal содержит интуитивно понятную, и очень легкую в освоении среду разработки (IDE) для ОС Windows (98/2000/ XP). рис.1 среда разработки MidletPascal

5 -= LoPC * team=- MidletPascal 04 Если вы работали с Delphi или Kylix, то освоиться вам будет еще проще, так как сразу заметно сходство. Среда разработки содержит встроенный компилятор, инспектор кода Java и обеспечивает построение архива JAR. JAR файл это Java архив (сокращение от англ. Java ARchive). Представляет собой обычный ZIP-архив, в котором содержится часть программы на языке Java. После компиляции создается мидлет очень маленького размера и эффективного времени исполнения. Это достигается за счет того, что MidletPascal создает непосредственно низкоуровневый Java-код, а не создает свой промежуточный код и не компонует его в архив JAR вместе с интерпретатором, как это делают аналогичные средства. Очень полезной вещью является встроенный редактор графических ресурсов. Не будем же мы оставлять иконку нашего мидлета стандартной, но найти подходящую не всегда получается, тут как раз и приходит на помощь этот редактор. К тому же будет очень красиво смотреться главное меню программы, где каждому пункту соответствует созданное своими руками определенное изображение. рис.2 встроенный редактор графических изображений Приступим к более детальному рассмотрению возможностей MidletPascal. Начнем с того, что структура программы почти ни чем не отличается от программы написанной на обычном Паскале. Объявление констант, типов, переменных, процедур и функций происходит все так же, после соответствующих ключевых слов. program programname; const Объявления констант; type Объявления типов; var Объявления переменных; Объявления процедур и функций; Операторы; end. При объявлении процедур и функций следует помнить, что они не могут быть вложенными, т.е. одна процедура или функция не может быть объявлена внутри другой процедуры или функции. При работе с функциями позволительна рекурсия.

6 -= LoPC * team=- M будет описана где-то в коде программы > procedure a (x: integer);. b(x);//хоть процедура b объявлена после процедуры a, ошибка не произойдет т.к. процедра. // b объявлена выше как опережающая procedure b(y: integer);. a(y);. a(5); end. Операторы MidletPascal могут быть следующими: цикл for цикл while цикл repeat.. until

7 -= LoPC * team=- M >Impotr new resource и выбираем соответствующий файл. Необходимо отметить, что MidletPascal может работать с графическими изображениями расширение которых png, и аудио-файлами с расширением wave, au, MP3, MIDI. С другими графическими и аудио файлами MidletPascal работать не может. Нам так же любезно предоставлены функции, реализующие возможность отправки SMS из своего мобильного приложения. Отправка сообщений в J2ME поддерживается не всеми устройствами. MIDletPascal пытается отправить сообщение используя Wireless Messaging

8 -= LoPC * team=- MidletPascal 07 API и Siemens API. Может возникнуть ситуация, когда поставленную задачу будет просто не возможно решить предоставленными возможностями. MidletPascal позволяет подключать библиотеки сторонних разработчиков, написанных на Java. Подыскав библиотеку с необходимыми функциями мы вполне сможем справиться с поставленной задачей. Файл библиотеку необходимо поместить в папку Libs (находится там, куда был установлен MidletPascal) и подключить в коде в раздел uses. После этого можно смело пользоваться функциями этой библиотеки. Используя графические возможности MidletPascal необходимо понимать различие между графическим дисплеем и формой. Дисплей (Canvas) может использоваться для отображения графики или анимации на экране устройства. Форма же, может содержать элементы ввода (что то вроде Edit в Delphi), меню, поля для ввода текста, группы выбора, «команды» и многое другое. По умолчанию используется режим Canvas. Для отображения формы необходимо использовать функцию showform, для отображения графического дисплея showcanvas. рис.3 пример отображения графического дисплея и формы Ну вот мы потихоньку и разобрались, что же представляет из себя MidletPascal. Но вот остался один важный вопрос. Неужели для тестирования новоиспеченного мидлета придется каждый раз заливать его на телефон? Ответ — нет! Что бы так не мучиться существуют специальные эмуляторы, которые будут на компьютере эмулировать работу мобильного устройства и выполнять запущенный мидлет. Рассмотрим один из них. Эмулятор MidpX J2ME Emulators Package при установке интегрируется в ОС Windows, проводник и браузер IE. С этого момента запуская JAD и JAR файлы, будет вызываться этот эмулятор и выполнять запущенный мидлет. MidpX эмулирует устройства с профилем MIDP 2.0 и конфигурацией CLDC 1.0. Следует отметить поддержку мультимедийных функций, кириллицы и интерфейсов (API) Nokia UI и Nokia Sound. Эмулятор позволяет сглаживать шрифты, управлять контрастностью и яркостью экрана и настраивать массу других параметров. Есть возможность замедления выполнения мидлетов. Схема работы MidpX: 1. Запуская мидлет, пользователь передает управление консольному конвертеру. 2. Консольный конвертер генерирует исполняемый EXE-файл эмулятора. 3. EXE-файл автоматически выполняется в системе, а на экране компьютера мы видим виртуальный телефон с запущенным Java-приложением. Управление виртуальным телефоном сродни настоящему. Нажимать клавиши можно мышкой либо при помощи клавиатуры компьютера. В меню Options предусмотрен ползунок для регулировки громкости звука. Надеюсь, я помог тебе разобраться в премудростях MidletPascal, который не такой уже и сложный ведь пишем на родном Паскале. Автор статьи: Лопарев Роман aka Kastor

9 -= LoPC * team=- M ); bilet5 := menuappendstring( Билет 5 ); Итак, первой строкой мы создаём меню. Когда на дисплее показано меню, то больше ни какие элементы формы не могут быть отображены на экране, кроме команд. Процедура имеет два параметра: title:string — это название меню, т.е. текст, который будет показан перед меню. У меня это Select a bilet, что в переводе на великий и могучий означает выберете билет. menutype:integer — это тип меню. Может быть вот таким: -CH_IMPLICIT — это самое обыкновенное меню. -CH_EXCLUSIVE — при этом параметре, перед пунктом меню будет маленькая радио-кнопка, которая и осуществляет выбор. -CH_MULTIPLE — с этим параметром можно выбирать несколько пунктов меню Нам много не надо, так что я поставил параметр menutype равным CH_IMPLICIT. Этого будет достаточно. Но ты можешь поэксперементировать с другими параметрами. Дальше, я присваиваю каждой переменной результат функции menuappendstring. Эта функция вставляет в меню пункт, название которого указанно в единственном параметре функции. У нас это Билет 1, Билет 2 и т.д. Ну вот меню и создано. Но ничего не происходит. Надо создать команды, как это делать ты знвешь, но я всё же приведу пример:

10 -= LoPC * team=- M , CM_SCREEN, 1); addcommand(exit); repeat delay(100); clicked := getclickedcommand; until clicked = exit; Здесь всё очень просто : сначала идёт проверка, какой же пункт меню выбран? Проверка осуществлена с помощью функции menugetselectedindex, которая возвращает имя (не название, не title) выбранного пункта меню. И если выбран первый пункт, то выводим первый текст, если выбран второй — то второй текст и т.д. Ну а потом мы создаём команду выхода, чтоб можно было нормально покинуть приложение. Ну вот, прога готова! Тебе осталось только набить её своими билетами и смело идти на экзамен :) Да, кстати, прога не может возвратиться из выбранного билета обратно в меню. Это дело уже за тобой, сам доделывай, фантазируй. Ну а я вроде всё сказал, что хотел. Автор статьи: Васючков Андрей aka Soffrick

11 -= LoPC * team=- MidletPascal 10 Работа с ресурсами: подключение и чтение Здорова, юный кодер! Сегодня мы с тобой опять будем кодить для своей мобилы. И опять будем писать на MidletPascal — чудо-юдо языке программирования для сотовых телефонов. И разговор у нас пойдёт не много не мало о ресурсах твоей проги. Почему? Постараюсь объяснить: Во-первых, это просто необходимо, это основы работы с языком программирования. Во-вторых, это способ засунуть в твоё приложение музыку, картинки и прочий хлам (в одной из следующих статей я покажу тебе, как сделать что-то вроде плеера, ну или просто фоновой музыки для проги). В-третьих, это очень удобно. Рассмотрим пример: тебе надо написать шпоры на экзамен, потому что учить лень, а сдавать надо. :) На экзамене 40 биллетов. Просто так засунуть их в тело проги не хорошо. Потому что это не удобно — засоряется исходник; это долго — если в самом исходнике много лишних данных, то прога, естественно, работать будет медленнее; да и просто это не этично. Надо сделать 40 аккуратных файлов с ответами на экзаменационные вопросы, засунуть их как ресурсы в прогу и спокойно работать с ними! По крайней мере так ты не запутаешься в своём проекте — всё будет разложено по полочкам. Где и как? В папке с проектом есть каталог под названием «res». Там по дефолту храниться картинка — иконка проекта. Очень удобно держать все ресурсы в этом каталоге, потому что он специально для этого сделан. Но просто поместить туда файл и работать с ним не проканает. Надо сначала этот файл ресурсов подключить к нашему проекту. Делается это очень просто: выбирай в главном меню «Project->Import resource file. ». Появится обычный диалог выбора файла. Выбирай нужный и дави Открыть. Всё, ресурс в проекте, осталось тока написать прогу и скомпилировать её :))) Можно конечно, сделать для своего удобства отдельные каталоги под ресурсы, но меня устраивает стандартная папка res. А как поступишь ты, решать тебе. Работа. Давай напишем маленький примерчик для работы с ресурсами. Создавай текстовый файл data.txt, ну напиши там что-нибудь, например, Pupkin Zade RooleZZZ. Только напиши это не в одной строке, а в нескольких. Потом поймёшь почему. Подключай этот файл к проекту как ресурс, как это делать ты уже знаешь. Теперь в редакторе кода, измени сорец до вида: program Resourse; //Это название проги, пиши что хочешь var data : resource;//наш ресурс str : string; index : integer; data := OpenResource(‘/data.txt’);//открытие ресурса if (resourceavailable(data)) then //проверка str := ReadLine(data);//читаем строку CloseResource(data);//закрываем ресурс ShowForm; //создаём форму. index := FormAddString(‘Text :’ + str);//выводим инфу из ресурса Delay(10000);//задержка end.

12 -= LoPC * team=- M >

13 -= LoPC * team=- MidletPascal 12 Хранилище записей. Очень часто в приложении или игре возникает необходимость сохранить какую-либо информацию. К примеру, для игры это может быть таблица рекордов или текущий уровень, чтобы при последующем запуске игры, пользователь мог продолжить играть с прошлого достигнутого уровня; для приложения — это могут быть какие-то настройки и т.п. На компьютере в этих целях обычно пользуются записью в файл или в реестр. В мобильном телефоне нет реестра, да и доступа к файловой системе тоже во многих случаях нет, по-этому эти способы нам не подходят. Специально для этих целей в телефоне предусмотрена область памяти на встроенной флеш карте, названная Хранилищем Записей (Record Store или просто RMS). В компьютере записываемая информация никак не защищена. Любые данные, записанные в реестр или в файл, могут быть открыты и изменены другой программой. В телефоне же это не так. Каждая игра или программа имеет своё Хранилище Записей и другая программа не может получить к нему доступ ни на чтение ни на изменение данных. По-этому вы можете смело хранить в Хранилище практически любую информацию и при этом не волноваться за её сохранность и безопасность. При удалении приложения из телефона его Хранилище Записей тоже удаляется :-( Итак, вы усвоили, что каждое мобильное приложение имеет своё отдельное Хранилище Записей. Давайте разберемся подробнее, как же именно хранится там информация. Каждое Хранилище Записей состоит из одного или множества разделов, которые различаются по именам. То есть, к примеру, игра может иметь 2 раздела: score (в котором хранится таблица рекордов) и level (где хранится текущий уровень игры). Как вы понимаете, все названия разделов должны быть уникальными и состоять только из латинских букв или цифр. Максимальная длина имени раздела — 32 символа. Для того чтобы открыть раздел Хранилища служит функция OpenRecordStore. Эта функция принимает всего один аргумент — название раздела, и возвращает объект типа RecordStore. Если при попытке открытия раздела окажется, что раздела с таким именем нет, то ничего страшного не произойдет. Просто создастся новый пустой раздел с данным именем. Чтобы закрыть раздел Хранилища записей нужно вызвать процедуру CloseRecordStore. Чтобы удалить раздел в Хранилище Записей (и всю информацию в нем), используйте процедуру DeleteRecordStore. Итак, движемся дальше. Каждый раздел в Хранилище Записей имеет собственно записи, которые выглядят в виде обычных текстовых строк. Каждая такая строка имеет свой номер. Это напоминает хранение строк в массиве. Тут тоже наблюдается отличие от компьютера, где программа может хранить информацию в бинарном или текстовом формате, тут же используется только текст. Вы можете узнать количество записей в вашем хранилище, воспользовавшись функцией GetRecordStoreSize. Для чтения записи из хранилища, используется функция ReadRecordStoreEntry, которая принимает 2 аргумента: объект типа RecordStore и номер записи, а возвращает строку текста, которая хранится под данным номером. Чтобы добавить новую запись в раздел хранилища, используют функцию AddRecordStoreEntry, которая возвращает номер, под которым была сохранена данная запись. Функция GetRecordStoreNextId возвращает следующий незанятый номер записи, который будет использован в случае добавления записи функцией AddRecordStoreEntry. Чтобы изменить строку, хранящуюся в разделе, используйте процедуру ModifyRecordStoreEntry. Ну и наконец, чтобы удалить запись из раздела нужно вызвать процедуру DeleteRecordStoreEntry. Пример: Первая запись в хранилище всегда имеет номер 1. Вызов функции AddRecordStoreEntry добавит запись и присвоит ей номер 2. Следующей записи присвоится номер 3, и т.п. Если вы удалите запись под номером 1, и после этого добавите запись функцией AddRecordStoreEntry, новая запись будет сохранена под номером 4, а запись под номером 1 так и останется пустой (то есть, другими словами, дефрагментация записей в хранилище не делается). Вызов функции GetRecordStoreNextId вернет 5 (номер следующей незанятой записи), и GetRecordStoreSize вернет 3 (общее количество записей), потому что после удаления первой записи, в разделе осталось всего 3 из 4 записей.

14 -= LoPC * team=- M , CM_EXIT, 1)); repeat Delay(100) until GetClickedCommand <> EmptyCommand; end. Если вы хотите чтобы программа не запускалась скажем после 10 запусков, просто добавьте: if countint > 9 then Halt; ПРИМЕЧАНИЕ: MIDlet Pascal не умеет корректно сохранять записи на русском языке. Поэтому для хранения таких записей нужно воспользоваться специальной библиотекой или перекодировать строки текста в формат Win-1251, а после чтения их, перекодировать строки обратно в формат UTF-8. Также следует помнить, что операции с флеш памятью довольно медленные, что может привести к заметным задержкам в приложении при чтении/записи больших объемов информации. Автор статьи: Odd

15 -= LoPC * team=- MidletPascal 14 Музыка в твоей мобиле. Итак, наступило время немного поработать с музыкой в твоей мобиле. Конечно, это не будет плеер с каталогизацией альбомов и прочими наворотами. Мы просто попробуем понять работу с музыкой на языке MidletPascal. Поняв этот материал, ты сможешь оснастить свою прогу фоновой музыкой. А если речь зайдёт за игры, то тут без музыки и звуковых эффектов никуда! Ну, какая же игра, даже мобильная, без музыки? Вот, я тоже так думаю, так что не будем терять время и начнём! В одной из прошлых статей я рассказывал тебе про работу с ресурсами. Для понятия и реализации этого материала просто необходимо знать работу с файлами ресурсов. Если ты пропустил прошлую статью, то надо отыскать её и внимательно прочитать, иначе ничего не получится. Для работы с музыкой и звуками в MidletPAscal предусмотрено пять функций, которые мы с тобой сейчас и разберём: function OpenPlayer(resource:string; mimetype:string):boolean; Эта функция открывает указанный в первом параметре файл ресурса в аудио плеере. Функция вернёт false, если не сможет открыть файл. Ресурс не запустится на проигрывание, пока не будет выполнена функция startplayer (о ней немного позже). Второй параметр может принимать одно из следующих значений: -audio/x-wav — для проигрывания wav-файлов -audio/basic — для проигрывания au-файлов -audio/mpeg — для проигрывания mp3-файлов -audio/midi — для проигрывания MIDI-файлов Внимательно следи за поддерживаемыми форматами музыки. А то не хорошо получится, если твоя прога работает с mp3, а телефон клиента поддерживает только wav. Так же разработчики Midlet Pascal предупреждают, что музыкальные функции работают только на телефонах MIDP-2.0, а на более ранних версиях телефонов приложения, использующие эти функции, приведут к краху. function SetPlayerCount(loopCount:integer):boolean; Эта функция устанавливает количество раз, которое музыка должна проиграться. Если значение loopcount равно -1, то музыка будет проигрываться постоянно, т.е. повторяться. Функция должна быть использована после OpenPlayer, но перед startplayer. function StartPlayer:boolean; Функция начинает проигрывать файл, открытый функцией OpenPlayer. Она возвратит false, если не сможет начать воспроизведение, а если всё в норме, то вернёт true. function GetPlayerDuration:integer; Возвращает продолжительность музыки (в миллисекундах), воспроизводимую плеером.

16 -= LoPC * team=- MidletPascal 15 procedure StopPlayer; Останавливает музыку. Вот все инструменты, которые предлагает Midlet Pascal для работы с музыкой. Их, конечно, мало, но всё же они есть. Так что будем пользоваться тем, что есть. Вот небольшой пример, который проигрывает мелодию: OpenPlayer( /simple.mid, audio/midi ); SetPlayerCount(-1); StartPlayer; Delay(5000); end. Здесь много не хватает, например, проверки правильной работы каждой функции. Но это уже твоё дело, моё дело — только показать тебе основы, а дальше сам разбирайся, улучшай и пробуй! Можно вывести форму, установить на ней в текстовом поле длину музыки, название файла и прочее, прочее. Пока хватит твоей фантазии. Ну а пока разбирайся со всем прочитанным, желаю удачи! Остальное позже. Автор статьи: Васючков Андрей aka Soffrick

17 -= LoPC * team=- M ); Следует помнить, что чем больше картинок вы загрузите, тем более плавной и четкой будет анимация. Также хочу напомнить, чтобы загрузить изображения необходимо выбрать: Project>Import resource file. Midlet предлагает примитивный редактор изображений, что-то вроде Paint a, изображения можно потом поменять они находятся в папке res, которая лежит в директории с вашим проектом. Но стоит помнить, что Midlet Pascal поддерживает только формат PNG (с альфа-каналом). Еще следует учитывать и цветопередачу, ведь не стоит забывать, что у каждого телефона она может быть разной. Если вы захотите добавить, удалить или изменить изображения через Проводник, то делать это нужно при выключенном Midlet е или закрытом проекте, т.к. изображения будут заменены на старые, которые уже загружены в Midlet. В разделе var опишем переменные, которые в дальнейшем будем использовать.

18 -= LoPC * team=- M ,cm_exit,2); AddCommand(btn_exit); Таким образом, мы создадим две кнопки: одна запустит нашу анимацию, а при помощи другой кнопки мы закроем приложение. Перейдем к созданию анимации, а создавать ее будем с помощью процедуры, описание которой должно быть после секции «var». Для смены изображений нужен цикл и в этом нам поможет функция: Repeat //ваш код Until условие выхода; Эта конструкция запустит бесконечный цикл, до тех пор, пока не будет задействовано условие выхода из этого цикла. В первую очередь, необходимо определить область, которую будем использовать, (в данном случае используем всю, но следует учесть, что для разных эмуляторов, а также телефонов она будет различной!) — SetClip(0,0,200,200). Далее рисуем фон (происходит растяжение, если изображение меньше используемой области) и рисуем первое изображение (располагаем его в центре выделенной области), после этого увеличиваем счетчик. «Repaint» перерисует изображение фона и картинку, а далее небольшая пауза, это сделано, для того чтобы анимация была не слишком быстрой. В конце смотрим: если счетчик равен индексу последнего изображения, то обнуляем счетчик. Осталось проверить, нажата ли клавиша выхода. procedure animate_image; repeat SetClip(0,0,200,200); DrawImage(image_bk,0,0); DrawImage(image_m[i],70,75); repaint; Delay(170); i:=i+1; if i=6 then i:=0; get_btn:=getclickedcommand; until Get_btn = btn_exit;

19 -= LoPC * team=- M >150 then k:=-20; get_btn:=getclickedcommand; until Get_btn = btn_exit; i:=0; k:=-20; image_m[0]:=loadimage(‘/image_1.png’); image_m[1]:=loadimage(‘/image_2.png’); image_m[2]:=loadimage(‘/image_3.png’); image_m[3]:=loadimage(‘/image_4.png’);

20 -= LoPC * team=- M ,cm_exit,2); AddCommand(btn_start); AddCommand(btn_exit); repeat get_btn:=getclickedcommand; if get_btn= btn_start then animate_image; until Get_btn = btn_exit; end. Автор статьи: Jimmy Jonezz

21 -= LoPC * team=- M >

22 -= LoPC * team=- M then img:=oimg; x:=getw >

23 -= LoPC * team=- M >’ ‘ then all:=all+1; if all=9 then CheckFull:=true; function CheckGameEnd:boolean; CheckGameEnd:=false; //проверка, выиграл ли игрок if checkwin( X ) then CheckGameEnd:=true; ShowMess(‘You WIN!’); end else //проверка, выиграл ли компьютер if checkwin(‘o’) then CheckGameEnd:=true; ShowMess(‘You lose. ‘); end else //ничья? if CheckFull then CheckGameEnd:=true; ShowMess(‘Nobody win. ‘); Подходим к основным частям, а именно к определению кто именно выиграл, и добавлению «мозгов» игре, пусть совсем и небольших (одному играть ведь не интересно). Ну, если с определением кто выиграл: «компьютер» или Игрок понятно, — просматриваем позиции по горизонтали, вертикали и диагонали, по всем трем клеткам, то с искусственным интеллектом посложней, а именно надо просматривать все варианты ходов, предугадать, куда будет поставлен следующий крестик/нолик, в общем, максимально усложнить игроку варианты установки крестика. Но в эти дебри нам идти не суждено, да и не надо, мы поступим проще хаотичный ход компьютера будет сопровождаться поиском дух рядом стоящих ноликов. Так что рассчитывать на сложную игру не особо приходиться. Но при желании ты можешь прислать мне свою версию игровых «мозгов», посмотрим выйдет ли это у тебя лучше?

24 -= LoPC * team=- M >9)) then if p[pos]=’ ‘ then p[pos]:=c; Step:=true; //так создаются «мозги» для игры procedure CompStep; var tmp:boolean; tmp:=false; while not tmp do randomize; //смотри вертикальные варианты, //например если есть «O O» то можно поставить еще один нолик if not tmp then if (p[1]=’o’) and (p[2]=’o’) and (p[3]=’ ‘) then tmp:=step(‘o’,3) else if (p[1]<>‘ ‘) and (p[2]<>‘ ‘) and (p[3]=’ ‘) then tmp:=step(‘o’,3) else if (p[1]<>‘ ‘) and (p[2]=’ ‘) and (p[3]<>‘ ‘) then tmp:=step(‘o’,2) else if (p[1]=’ ‘) and (p[2]<>‘ ‘) and (p[3]<>‘ ‘) then tmp:=step(‘o’,1) else if (p[4]<>‘ ‘) and (p[5]<>‘ ‘) and (p[6]=’ ‘) then tmp:=step(‘o’,6) else if (p[4]<>‘ ‘) and (p[5]=’ ‘) and (p[6]<>‘ ‘) then tmp:=step(‘o’,5) else if (p[4]=’ ‘) and (p[5]<>‘ ‘) and (p[6]<>‘ ‘) then tmp:=step(‘o’,4) else if (p[7]<>‘ ‘) and (p[8]<>‘ ‘) and (p[9]=’ ‘) then tmp:=step(‘o’,9) else if (p[7]<>‘ ‘) and (p[8]=’ ‘) and (p[9]<>‘ ‘) then tmp:=step(‘o’,8) else

25 -= LoPC * team=- M ) and (p[8]<>‘ ‘) and (p[9]<>‘ ‘) then tmp:=step(‘o’,7) else //горизонтальные варианты if (p[1]<>‘ ‘) and (p[4]<>‘ ‘) and (p[7]=’ ‘) then tmp:=step(‘o’,7) else if (p[1]<>‘ ‘) and (p[4]=’ ‘) and (p[7]<>‘ ‘) then tmp:=step(‘o’,4) else if (p[1]=’ ‘) and (p[4]<>‘ ‘) and (p[7]<>‘ ‘) then tmp:=step(‘o’,1) else if (p[2]<>‘ ‘) and (p[5]<>‘ ‘) and (p[8]=’ ‘) then tmp:=step(‘o’,8) else if (p[2]<>‘ ‘) and (p[5]=’ ‘) and (p[8]<>‘ ‘) then tmp:=step(‘o’,5) else if (p[2]=’ ‘) and (p[5]<>‘ ‘) and (p[8]<>‘ ‘) then tmp:=step(‘o’,2) else if (p[3]<>‘ ‘) and (p[6]<>‘ ‘) and (p[9]=’ ‘) then tmp:=step(‘o’,9) else if (p[3]<>‘ ‘) and (p[6]=’ ‘) and (p[9]<>‘ ‘) then tmp:=step(‘o’,6) else if (p[3]=’ ‘) and (p[6]<>‘ ‘) and (p[9]<>‘ ‘) then tmp:=step(‘o’,3) else //если ничего не подошло выборочно ставим нолик tmp:=step(‘o’,9-random(9)); Осталось задействовать, то, что расписано нами в начале статьи, т.е. попробуем все это хозяйство объединить создадим игровой процесс: загрузим изображения крестика и нолика (картинки предварительно нужно загрузить в ресурсы), инициализируем конец игры, отчистим массив (в том случае если мы играли и захотим продолжить игру), следующим шагом будит рисование решетки, компьютер делает ход, а дальше выжидаем ход игрока, с последующей проверкой того, кто выиграл, чтобы определить конец игры, иначе продолжаем сначала, а именно с шага компьютера. procedure CreateGame; var i:integer; UserStep:boolean; GameEnd:boolean; //загружаем заранее чтобы не нагружать VM Ximg:=LoadImage(‘/Ximg.png’); Oimg:=LoadImage(‘/Oimg.png’); ShowCanvas; RemoveCommand(cmdOK); AddCommand(cmdExit); GameEnd:=false; For i:=1 to 9 do p[i]:= ; //пока не конец игры while not GameEnd do SetColor(255,255,255); FillRect(0,0,GetWidth, GetHeight); drawplace; //рисуем решетку

26 -= LoPC * team=- M ,i);//шагаем и рисуем крестик игрока i:=0; UserStep:=false; DrawAll; repaint; GameEnd:=CheckGameEnd; //суммируем результат, чтобы не стереть предыдущее событие //создаеи кнопарь продолжения игры AddCommand(cmdContinue); repaint; repeat delay(100); clicked := GetClickedCommand; until clicked <> EmptyCommand; //стартуем в новую игру и не забываем удалить кнопку продолжения RemoveCommand(cmdContinue); if clicked=cmdcontinue then CreateGame; Многое мы в этой статье не затронули: использование меню, переходы по разделам меню, вывод результатов у кого, сколько выигрышей и т.д. Все это не столь важно, ведь самое главное понять принцип, взаимодействия модулей, легкое манипулирование ими, а в остальном вы думаю, останетесь, довольны, ведь теперь можно добавить еще одну игру в свою коллекцию игр (если такая имеется). Автор статьи: Jimmy Jonezz, Автор кода: Che

Илон Маск рекомендует:  Что такое код getftime
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL