
- •Саблукова н.Г. Программирование в среде delphi
- •Часть II
- •Создание проектов
- •Содержание
- •§1 Добавление графических изображений в проект
- •§2 Использование элементов анимации и мультипликации
- •Движение объектов
- •Задания
- •2.2 Изменение форм и видов объектов
- •Задания
- •2.3 Изменение размеров объектов
- •2.4 Пример программы движения объектов с элементами анимации и мультипликации типа «Тараканьи бега»
- •§3 Управление объектами
- •3.1 Управление объектом с помощью мыши
- •Создание проекта с использованием управления объектом с помощью мыши
- •Задания
- •3.3 Управление объектом с помощью клавиатуры
- •Задания
- •§4 Работа со строками
- •4.1 Строковый тип данных
- •4.2 Использование компонента tMemo для работы со строками
- •4.3 Работа со строками с помощью компонентов
- •Задания
- •5. Массивы
- •5.1 Одномерные массивы
- •Доступ к элементам массива
- •Задания
- •Многомерные массивы. Пример создания проекта с границами типа «Лабиринт»
- •Задания
- •6. Создание меню
- •6.1 Главное и вложенное меню
- •6.2 Создание текстового редактора с изменяемыми настройками типа «меню» и элементами диалога
- •7. Элементы мультимедиа
- •Литература
Задания
Создать проект “Произведение элементов массива”, предусматривающий заполнение массива случайными числами и возможность вывода в текстовое поле произведение всех элементов в массиве.
Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [-10,20]. Найти сумму элементов, имеющих нечетные индексы.
Подсчитать количество элементов массива, значения которых больше заданного числа А и кратных 5.
Найти номер первого отрицательного элемента, делящегося на 5 с остатком 2.
Многомерные массивы. Пример создания проекта с границами типа «Лабиринт»
Массивы могут иметь и более одного измерения. В таких случаях говорят о многомерных массивах. Многомерные массивы широко используются в математике, статистике и некоторых других прикладных науках (например, для матричных вычислений). Объявление двумерного массива выглядит следующим образом:
Var TwoDimensionalArray: Array [1..80,1..25] of Integer;
Переменной TwoDimensionalArray соответствует некоторая матрица или двумерный массив, причем каждому элементу донного массива может быть поставлена в соответствие некоторая позиция на экране компьютера (на экране помещается 80 столбцов с номерами от 1 до 80 и 25 строк с номерами от 1 до 25). Таким образом, каждый элемент массива может быть использован для хранения одного символа, отображенного в соответствующей позиции экрана.
Двумерные массивы часто используются в проектах с ограничением пространства. Примером такого проекта с границами является приложение «Лабиринт».
Пример. Создать проект “Лабиринт”, в котором объект может перемещаться только по свободному пространству лабиринта. |
Создадим графический интерфейс проекта, подобно тому, как изображено на рис. 42. Здесь на форме помещено пятьдесят семь компонентов TImage. Сами границы лабиринта (кирпичики) располагаются последовательно в объектах Image1-Image56. В компоненте Image57 находится изображение перемещаемого объекта.
Рис. 43 Графический интерфейс проекта
Каждому квадрату лабиринта (пустому или с кирпичиком) можно поставить в соответствие номер строки и столбца, в котором он находится, т.е. описать его с помощью двумерного массива.
Если объект может свободно перемещаться в квадрате, то значение массива равно 0, границам соответствует значение массива, равное единице. Например, для двух верхних границ строк обработчик события OnCreate у формы будет следующим:
var |
Form1: TForm1; |
M:array[0..9,0..9] of integer; |
… |
procedure TForm1.FormCreate(Sender: TObject); |
Begin |
m[0,0]:=1 |
m[0,1]:=1 |
m[0,2]:=1 |
m[0,3]:=1 |
m[0,4]:=1 |
m[0,5]:=1 |
m[0,6]:=1 |
m[0,7]:=1 |
m[0,8]:=1 |
m[0,9]:=1 |
|
m[1,0]:=1 |
m[1,1]:=0 |
m[1,2]:=0 |
m[1,3]:=0 |
m[1,4]:=1 |
m[1,5]:=0 |
m[1,6]:=0 |
m[1,7]:=0 |
m[1,8]:=0 |
m[1,9]:=1 |
… |
end; |
Для остальных строчек будет подобное описание.
Движение объекта управляется с помощью клавиатуры и проверки значения массива:
Procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); |
Begin |
x:=round(image57.Left/45) |
y:=round(image57.Top/45) |
if (key=37)and (m[y,x-1]=0)then image57.Left:=image57.Left-45 |
if (key=39)and (m[y,x+1]=0)then image57.Left:=image57.Left+45 |
if (key=38)and (m[y-1,x]=0)then image57.top:=image57.top-45 |
if (key=40)and (m[y+1,x]=0)then image57.top:=image57.top+45 |
end; |