- •Оглавление
- •Введение
- •Глава 1
- •Использование компонентов общего назначения: tLabel, tButton, tEdit, tShape, tTimer, tPanel
- •1.1.1. Проект «Калькулятор»
- •1.1.2. Проект «Таймер»
- •1.1.3. Проект «Светофор»
- •1.1.4. Проект «Движение шарика tShape с отражением»
- •Глава 2
- •2.1. Класс tCanvas, его свойства и методы
- •2.1.1. Рисование узоров
- •2.1.2. Рисование поля для различных игр
- •2.1.3. Рисование координатной сетки
- •2.1.4. Построение графиков элементарных функций
- •2.2. Класс tBitmap и работа с растровыми рисунками
- •2.2.1. Рисование на поле растрового рисунка
- •2.2.2. Движение двоичного образа по фоновой картинке
- •2.3. Компонент tImage и его использование
- •2.3.1. Проект «Движение компонента tImage»
- •2.3.2. Перемещение картинок
- •2.3.3. Проект «Движение компонента tImage
- •Глава 3
- •3.1. События от мыши
- •3.1.1. Проект «Попади в мишень»
- •3.1.2. Проект «Снежинки»
- •3.1.3. Проект «Крестики-нолики»
- •3.1.4. Движение образа по удерживанию левой кнопки мыши
- •3.1.5. Проект «Жизнь клеток»
- •3.2. События от клавиатуры
- •3.2.1. Код клавиши
- •3.2.2. Управляемое движение образа
- •3.2.3. Совмещение управляемого и неуправляемого движений.
- •Глава 4
- •4.1. Проект «Простейший графический редактор»
- •Глава 5
- •5.1. Создание кнопок
- •5.1.1. Проект «Лохотрон»
- •5.1.2. Игра «Пятнадцать»
- •5.2. Создание компонентов tImage
- •5.2.1. Проект «Угадай картинку»
- •5.2.2. Проект «Собери картинку»
- •Глава 6
- •6.1. Компоненты tStringGrid и tDrawGrid
- •6.1.1. Сортировка массива
- •6.1.2. Проект «Таблица успеваемости»
- •6.1.3. Система предварительной продажи билетов
- •6.1.4. Проект «Таблица рисунков»
- •6.1.5. Рисование в таблице tDrawGrid
- •6.2. Компоненты tListBox, tCombobox ,
- •6.2.1. Прорисовка изображений в списке tListBox
- •6.2.2. Проект «Зоомагазин»
- •6.2.3. Проект «Шуточная игра»
- •6.2.4. Проект «Редактирование списка вопросов»
- •Глава 7
- •7.1. Тест «Знаете ли вы загадки?»
- •7.2. Проект «Исторические даты»
- •Глава 8
- •8.1. Компоненты tOpenDialog, tSaveDialog – диалоги
- •8.1.1. Просмотр текстовых файлов
- •8.2. Добавление и удаление записей в файл и из файла
- •8.2.1. Проект «Журнал группы»
- •8.3. Файлы для проекта «Судоку»
- •Глава 9
- •9.1. Просмотр видеофильма с использованием
- •9.2. Простейшая мультипликация
- •Глава 10
- •10.1. Пример использования try… except
- •Глава 11
- •11.1. Оформление проекта
- •11.1.1. Проект «Бегущая строка»
- •11.1.2. Проект «Титры»
- •11.1.3. Общие рекомендации по оформлению
- •11.2. Рекомендации для отчета по проекту
- •11.3. Темы проектов
- •11.3.1. Головоломка «Сквэрворд»
- •11.3.2. Задача «Путешествие по маршруту»
- •11.3.3. Головоломка «Ходом коня»
- •11.3.4. Задача «Извилистый путь»
- •11.3.5. Головоломка «Фишки на поле»
- •Список литературы
- •630058, Новосибирск, ул. Русская, 35
Глава 2
Изучение графики и работа с изображениями
2.1. Класс tCanvas, его свойства и методы
2.1.1. Рисование узоров
П остановка задачи. Заполните экран каким-нибудь узором, например, ромбиками, как показано на рис. 8.
Реализация. Положим на форму две кнопки «Рисовать» и «Выход». Для рисования одного ромбика напишем процедуру
put_romb (i, k: integer; col: Tcolor) с входными параметрами i, k, где i – номер строки, k – номер столбца. Входной параметр col – это цвет.
Расположим ромбики так: верхний ряд состоит из десяти ромбиков, следующий – из девяти, последний – из одного ромбика. Закрасим ромбы, выбрав цвет случайным образом с помощью функции RGB.
Ниже приведен код основных процедур.
Рис. 8. Узор «Ромбы»
const
d1=15; //длина горизонтальной диагонали ромба
d2=30; //длина вертикальной диагонали ромба
{ Глобальные переменные }
var x0,y0: integer; // координаты центра левого верхнего ромба
procedure put_romb(i, k: integer; col: Tcolor); // Рисование
// ромба. Здесь i – номер строки, k – номер столбца
var x, y: integer;
begin
x:=x0+(k-1)*d1;
y:=y0+(i-1)*d2;
with Form1.Canvas do
begin
Pen.Color:=col;
Brush.Color:=col;
MoveTo(x+d1 div 2, y);
LineTo(x, y-d2 div 2);
LineTo(x-d1 div 2, y);
LineTo(x, y+d2 div 2);
LineTo(x+d1 div 2, y);
FloodFill(x, y, col, fsborder);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,k:integer;
col:TColor;
begin
for i:=1 to 10 do
begin
for k:=i to 10 do
begin
col:=RGB(random(256),random(256),random(256));
put_romb(i, k, col);
end;
x0:=x0 – d1 div 2;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
x0:=d1;
y0:=d2;
end;
Задание. Усовершенствуйте проект так, чтобы каждый горизонтальный ряд ромбов был нарисован своим цветом. Вместо ромбов используйте другие фигуры: треугольники, кружочки и т. п. Расположите ромбики не треугольником, а в виде квадрата.
2.1.2. Рисование поля для различных игр
Во многих игровых проектах таких, как «Крестики-нолики», «Сапер», «Морской бой» и других, игровое пространство представляет собой поле в клеточку заданного размера. Напишем свою процедуру DrawPole и будем использовать ее по мере необходимости. Входными параметрами для этой процедуры являются число клеток n по горизонтали (по вертикали то же самое), число h – размер одной клетки в пикселах и координаты левого верхнего угла поля (х0, у0). Рисовать будем на форме.
procedure DrawPole (n, h, x0, y0 : integer);
var i, j, x, y : integer;
begin
for i:= 1 to n do
begin
y:=y0 + (i – 1)*h;
for j:= 1 to n do
begin
x:=x0 + (j – 1)*h;
with Form1.Canvas do
begin
Pen.Color:= ClBlack;
Brush.Color:= ClWhite;
Brush.Style:= BsSolid;
Rectangle(x, y, x + h, y + h);
end;
end;
end;
end;
Для вызова процедуры DrawPole (n, h, x0, y0) надо задать константы n и h, а также начальные значения глобальных переменных x0, y0. Начальные данные зададим в методе формы Сreate.
procedure TForm1.FormCreate(Sender: TObject);
begin
x0:=10;
y0:=10;
end;
Метод формы Сreate не позволяет выводить изображение на форму, поэтому можно организовать вывод поля несколькими способами. Один из способов – вывести изображение по щелчку кнопки. Другой способ заключается в использовании события формы Paint. Рассмотрим второй способ. Выберите среди событий (Events) формы событие Paint и кликните дважды справа в выбранной строке. Откроется обработчик метода Paint, и в нем напишите:
DrawPole (n, h, x0, y0);
Результат работы программы приведен на рис. 9.
Рис. 9. Поле для игровых проектов
Задание. Положите на форму компонент TPaintBox, установите программным путем его размеры (свойства Width и Height), равными размерам поля. Выведите поле на PaintBox1. Как надо изменить формулы для нахождения х и у? Нужны ли в этом случае х0 и у0?