Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачи_Делфи.docx
Скачиваний:
11
Добавлен:
14.08.2019
Размер:
1 Мб
Скачать
☆

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;

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