- •Оглавление
- •Введение
- •Глава 1
- •Использование компонентов общего назначения: tLabel, tButton, tEdit, tShape, tTimer, tPanel
- •1.1.1. Проект «Калькулятор»
- •1.1.2. Проект «Таймер»
- •1.1.3. Проект «Светофор»
- •1.1.4. Проект «Движение шарика tShape с отражением»
- •2.1. Класс tCanvas, его свойства и методы
- •2.1.1. Рисование узоров
- •2.1.2. Рисование поля для различных игр
- •Глава 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
5.2. Создание компонентов tImage
5.2.1. Проект «Угадай картинку»
Постановка задачи. На форме в ряд расположены четыре разные картинки (рис. 30). Сначала они открыты какое-то время, потом закрываются. Около них появляется одна из спрятанных картинок. Надо угадать такую же картинку в этом ряду. Проект развивает зрительную память. Это простейший пример динамического создания массива компонентов TImage.
Рис. 30. Проект «Угадай картинку»
Реализация. Нарисуйте в графическом редакторе четыре картинки размером примерно 60 х 60. Положите на форму две кнопки «Старт» и «Выход». Положите компоненты ТTimer и ТImage для отдельной картинки. Форма проекта приведена на рис. 31.
Для размещения четырех картинок необходимо программным путем создать массив из четырех компонентов TImage.
Глобальные данные
const n=4;
dx=60;dy=70; // Размеры картинок
type mas=array [1..n] of string;
mas_int=array [1..n] of integer;
const fname:mas=('Вишня.bmp','яблоко.bmp','апельсин.bmp',
'ананас.bmp');
var x0,y0,i : integer;
nom_picture:integer;
Im:array [1..n] of TImage;
number : mas_int;
Рис. 31. Форма проекта «Угадай картинку»
Ниже приведен код основных процедур.
procedure pole;
var i,x,y:integer; {Поле}
begin
y:=y0;
for i :=1 to n do
begin
x:=x0+(i-1)*dx;
with Form1.canvas do
begin
pen.Color:=clblack;
pen.Width:=2;
brush.Color:=Form1.Color;
rectangle(x,y,x+dx,y+dy);
end;
end;
end;
procedure ris;
{Выбор случайной картинки и показ ее на экране}
begin
nom_picture:=random(4)+1;
Form1.Image1.Picture.LoadFromFile(fname[nom_picture]);
Form1.Image1.Left:=5;
Form1.Image1.Top:=20;
Form1.Image1.Transparent:=true;
Form1.Image1.Visible:=true;
end;
procedure zapolnenie; {Заполнение массива числами от 1 до 4}
var i,k:integer;
b:boolean;
begin
randomize;
b:=false;
for i:=1 to n do
number[i]:=0;
for i:=1 to n do
begin
b:=false;
repeat
k:=random(n)+1;
if number[k]=0 then
begin
number[k]:=i;
b:=true;
end;
until b;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
x0:=100;
y0:=20;
Timer1.Enabled:=false;
Timer1.Interval:=50;
randomize;
zapolnenie;
for i:=1 to n do // Создание массива TImage
begin
Im[i]:=TImage.Create(Form1);
Im[i].Parent:=Form1;
Im[i].Picture.LoadFromFile(fname[number[i]]);
Im[i].Height:=60;
Im[i].Width:=45;
Im[i].OnClick:=Imclick;
Im[i].left:=x0+(i-1)*dx+5;
Im[i].Top:=y0+5;
Im[i].Transparent:=true;
Im[i].Visible:=false;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin // Некоторое время видны все картинки
Timer1.Interval:=Timer1.Interval-1;
if Timer1.Interval=0 then
begin
Timer1.Enabled:=false;
pole; // Картинки закрываются
ris; // Видна одна случайная картинка
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; {Кнопка «Старт»}
begin
Label1.Caption:='';
Timer1.Enabled:=true;
Timer1.Interval:=50;
Image1.Visible:=false;
zapolnenie;
pole;
for i:=1 to n do
begin
Im[i].Picture.LoadFromFile(fname[number[i]]);
Im[i].Visible:=true;
end;
end;
procedure TForm1.ImClick(Sender: TObject);
var k:integer;
begin
k:=((Sender as TControl).Left-x0) div dx +1;
Label1.Caption:='';
If Im[k]<>Nil Then
Im[k].Hide;
im[k].Visible:=true;
if number[k]=nom_picture then
Label1.Caption:='Вы угадали'
else
Label1.Caption:='Не угадали';
end;
Задание. Усовершенствуйте проект так, чтобы можно было только один раз кликать на картинку, т. е. исключить возможность угадывания.
