Я надеюсь, что Вы не впервые сели за 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 <= -200 then
begin
Stars[i].X := random(scr_W * 4) - scr_W * 2;
Stars[i].Y := random(scr_H * 4) - scr_H * 2;
Stars[i].Z := 1900; // Откидываем звезду далеко вперёд :)
end;
// Рисуем звёздочку в новом положении (цвет зависит от Z координаты)
SetPix(trunc(255 - 255 * (Stars[i].Z + 200) / 2100));
end;
// Выводим текст по центру экрана
SetColor(255, 0, 0);
DrawText(HELLO, (scr_W - GetStringWidth(HELLO))/2, 0);
// Всё что было нами нарисовано - выводим на дисплей
repaint;
until GetKeyClicked = KE_KEY0; // Закрыть приложение при нажатии "0"
end.
|
Теперь запустите эту программу на своём телефоне, и Вашему счастью не будет предела :)

|
К содержанию
|
|
![]() |
Скачать новую версию данного учебника в одном архиве
Курс находится в процессе разработки, поэтому архив постоянно обновляется! |