Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
230401_MU_-_Osnovy_algoritmizatsii_i_programmir...docx
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆
  1. Аналогично запрограммируйте соответствующие события для перетягивания двух других рисунков.

  2. Создайте еще один метод формы tForml — функцию ImagelnShape для проверки расположения рисунка (объекта Image) в середине некоторой геометрической фигуры (объ­екта Shape).

functionTForml.ImagelnShape (Image : TImage;

Shape : TShape) : Boolean;

begin

if(Image.Left >= Shape.Left) and

(Image.Left+Image.Width <= Shape.Left+Shape.Width) and (Image.Top >= Shape.top) and (Image.Top + Image.Height) <= (Shape.Top + Shape.Height) then

ImagelnShape :=True{Рисунок в середине фигуры}

else

ImagelnShape := False; {Рисуноквнефигуры}

end;

Функция ImagelnShape является методом класса Forml, поэто­му обращение к свойствам любых объектов формы Forml осуще­ствляется непосредственно с помощью имени этих объектов, например, Image.Тор. Декларацию функции вставьте в раздел описания формы typeTForml в раздел деклараций общедоступ­ных процедур после служебного слова public:functionImageInShape(Image:TImageShape:TShape):Boolean;

11*. Запрограммируйте кнопку "Готово", проверяющую пра­вильность расположения рисунков в середине фигур и вы­водящую информационное окно с сообщением "Правильно!" или "Неправильно!":

procedure TForml.BitBtnlClick(Sender: TObject); begin

{Останавливаемобатаймера}

Timer 1.Enabled := False; {Останавливаеммигания Labell}

{Останавливаем индикатор времени}

Timer2.Enabled := False;

if ImageInShape(Imagel,Shape2) and

ImageInShape(Image2,Shape3) and

ImageInShape(Image3,Shapel) then begin

{Считываемфайлгромкогоаплодирования}

MediaPlayerl.FileName := 'applause.wav";

MediaPlayerl.Open; {Открываемплеер}

MediaPlayerl.Play; {Воссоздаем звук}

{Открываем, окно сообщения "Правильно!"}

MessageDlg('11равильно!', mtlnformation, [mbOk], 0);

end else begin

MediaPlayerl.FileName := 'ding.wav';

MediaPlayerl.Open;

MediaPlayerl.Play; {Подаемзвук "ДИНГ"} MessageDlg('He правильно!', mtlnformation, [mbOk], 0);

{Включаем оба таймера и индикатор времени)

Timerl.Enabled := True;

Timer2.Enabled := True;

Gaugel.Progress := 100;

end;

11**.Запрограммируйте кнопку "Готово", проверяющую пра­вильность расположения рисунков в середине фигур:

procedureTForml.BitBtnlClick(Sender : Tobject);

varcheck 1, check2, check3 : integer;

begin

{Где находится первый рисунок?){В 1-ойфигуре)

if ImageInShape(Imagel,Shape 1) then checkl := 1; {Во 2-ойфигуре)

if ImageInShape(Imagel,Shape2) then checkl := 2; {В 3-ейфигуре)

if ImageInShape(Imagel,Shape3) then checkl := 3; {Гденаходитсявторойрисунок?) {В 1-ойфигуре)

if ImageInShape(Image2,Shape 1) then check2 := 1; {Во 2-ойфигуре)

if ImageInShape(Image2,Shape2) then check2 := 2; {В 3-ейфигуре)

if ImageInShape(Image2,Shape3) then check2 := 3; {Гденаходитсятретийрисунок?) {В 1-ойфигуре)

if ImageInShape(Image3,Shapel) then check3 := 1; {Во 2-ойфигуре)

if ImageInShape(Image3,Shape2) then check3 := 2; {В 3-ейфигуре)

if ImageInShape(Image3,Shape3) then check3 := 3;

{Еслирисункирасположеныправильно)

if (check[i, 1] = checkl) and (check[i, 2] = check2)

and (check[i, 3] = check3) then {считаемудачныепопытки)

score := score + 1; SetPicture; {Устанавливаемновыерисунки)

end;

12*.Запрограммируйте второй таймер, обеспечивающий инди­кацию времени выполнения от 100 до 0% со скоростью, об­ратно пропорциональной числу в SpinEditl.

Если пользователь не успел расположить рисунки в прямо­угольниках и нажать на кнопку "Готово" в заданное время, пода­ется звук "ДИНГ" и открывается информационное окно с сообще­нием "Попробуйте ещё раз!".

procedure TForml.Timer2Timer(Sender: TObject); begin

{Задаем скорость движения индикатора) timer2.interval := SpinEditl.value * 100;

{Работает индикатор времени) gaugel.progress := gaugel.progress - 1; ifgaugel.progress — 0 then{Если время исчерпано) begin

Timer 1.Enabled := False; Timer2.Enabled := False; MediaPlayerl.FileName := 'ding.wav'; MediaPlayerl.Open;

MediaPlayerl.Play; {Подаемзвук "ДИНГ") MessageDlg('Попробуйтеещераз!', mtlnformation,

[mbOk], 0);

Timer 1.Enabled := True; Timer2.Enabled := True; Gaugel.Progress := 100; end;

end;

12**.Запрограммируйте второй таймер, обеспечивающий дос­тупность кнопки "Готово" лишь в случае правильного раз­мещения всех рисунков в отведенных прямоугольниках и показывающий время со скоростью, обратно пропорцио­нальной числу к SpinEditl.

В случае, если пользователь не успел расположить рисунки в прямоугольниках и нажать на кнопку "Готово" за надлежащее время, подается звук "ДИНГ", попытка не засчитывается, и про­исходит переход к следующей серии рисунков.

procedure TForml .Timer2Timer(Sender: TObject); begin

{Задаемскоростьдвиженияиндикатора } timer2.interval := SpinEditl.value * 100; {Еслиодинизрисунковнаходитсявпервомпрямоугольнике) if ( ImageInShape(Imagel,Shapel) or

ImageInShape(Image2,Shape 1) or ImageInShape(Image3, Shape 1)) and {иодинизрисунковнаходитсявовторомпрямоугольнике) ( ImageInShape(Imagel,Shape2) or

ImageInShape(Image2,Shape2) or I m age I n S liape(Image3 ,Shape2)) and {иодинизрисунковнаходитсявтретьемпрямоугольнике) ( ImageInShape(Imagel ,Shape3) or

ImageInShape(Image2,Shape3) or

ImageInShape(Image3,Shape3)) {токнопка "Готово" становитсядоступной:} then BitBtnl.Enabled := True; {Работаетиндикаторвремени} gaugel.progress := gaugel.progress - 1; if gaugel.progress = 0 then {Есливремяисчерпано} begin

MediaPlayerl.FileName := "ding.wav'; MediaPlayerl .Open;

MediaPlayerl.Play; {Подаемзвук "ДИНГ"} SetPicture; {Меняемсериюрисунков}

end;

end;