Разработка проекта «ИЗУЧАЕМ АНГЛИЙСКИЙ»

  • doc
  • 07.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 14. Разработка проекта «ИЗУЧАЕМ АНГЛИЙСКИЙ».doc

Практическая работа № 6

 

Тема: Разработка проекта «ИЗУЧАЕМ АНГЛИЙСКИЙ».

Работа с фигурами, таймером, мультимедийным   проигрывате­лем, двойными кнопками и индикатором состояния. Перетяги­вание объектов в окне программы

Цель работы. Разработать программу для проверки знаний  конкретных английских слов. Пользователь должен за ограниченное время методом перетягивания расположить три (или четы­ре серии по три) рисунка под соответствующими английскими словами (см. рис. 21). Применить индикатор времени выполнения задачи звуковые эффекты и привести анализы-итоги тестирования

Приобрести навыки работы с такими объектами: геометрическая фигура (Shape), таймер (Timer), мультимедийный проигрыватель  (MediaPlayer),   двойная  кнопка с  полем  редактирования ), индикаторы состояния (Gauge и ProgressBar).

Теоретические  сведенияРассмотрим назначения и свойства «которых новых объектов. Геометрическая фигура (Shape   пик­тограмма  на закладке Additional) предназначена для изобра­жения элементарных геометрических фигур и имеет, в частности такие свойства:

 

 

Описание свойства

Примеры значений

Brush

Характеристики цвета (Color) и стиля (Style) заливки

Brush-Color: clMaroori

Brush-Style: bsSolid (сплошной), bsVertical

Shape

Форма фигуры

stRoundRect (прямо­угольник с округленны­ми краями),

stEllipse, stSquare

Pen

Характеристики границы фигуры

Комплексное свойство

Таймер (Timer, пиктограмма  на закладке System) исполь­зуют для повторения фрагмента программы с определенной пе­риодичностью. Соответствующий фрагмент располагают в теле процедуры обработка события OnTimer таймера. Периодичность включения таймера в милисекундах задают свойством Interval.

Мультимедийный проигрыватель (MediaPlayer, пиктограмма  на закладке System) предназначен для проигрывания видео- и аудиофайлов. Управлять проигрывателем можно как с помощью традиционных кнопок Play, Pause, Stop, Next и т.п. на этапе вы­полнения программы, так и из программного кода путем выпол­нения методов этого объекта, например:

 

Рис 20,21

 MediaPlayerl.FileName :=

'полное имя видео- или аудиофайла';

  MediaPlayer1 .Open;

  MediaPlayerl .Play;

Двойная кнопка с полем редактирования (SpinEdit, пикто­грамма  на закладке Samples) предназначена для ввода и кор­ректировки целочислового значения некоторой величины во вре­мя работы программы. Свойства кнопки:

 

Свойство

Описание свойства

Примеры значений

EditorEnabled

Возможность прямого редактирования

True, False

Enabled

Возможность любого редактирования

True, False

Increment

Шаг изменения

1; 4 (целое число)

MaxValue

Максимальное значение

целое число

MinValue

Минимальное значение

целое число

Индикатор состояния (Gauge, пиктограмма  на закладке Samples, ProgressBar, пиктограмма  на закладке Win95) исполь­зуют для наглядной демонстрации состояния выполнение некото­рого процесса. Рассмотрим три свойства индикатора Gauge:

 

Свойство

Описание свойства

Примеры значение

Kind

Тип индикатора

gkHorizontalBar (гориз. строка),

gkPie (круговая диаграмма),

gkText (про­центное отображение)

Progress

Отображает состояние индикатора

Целое число между MaxValue и MinValue

ShowText

Дополнительно отображает состояние в процентах

True, False

Замечание.   Для   создания   сокращенной   версии   программы (лишь для одной серии из трёх рисунков и без показа результатов тестирования), выполните пункты хода работы, обозначен­ные одной звездочкой (*). Чтобы получить полную версию про граммы, выполните пункты с двумя звездочками (**). Пункты хода работы без звездочек выполните в обоих случаях.

Ход работы

1.            Загрузите среду визуального программирования Delphi.

2.            Поменяйте заголовок (Caption) формы с «Form1» на «Анг­лийский язык — тестирование».

3.      Откажитесь от всех системных кнопок формы, задав значения     False     во     всех     позициях     свойства     Borderlcons:

biSystemMenu, biMinimize, biMaximize и biHelp.

Работа с программой будет завершаться нажатием на кнопку Выход.

4.      Расположите   на   форме   объекты   так,   как показано на рис. 20. Задайте такие свойства объектов:

 

Объект

Свойство

Значение

Timerl

Interval

500

Timer2

Interval

100

MediaPlayerl

Visible

False

Gauge 1

 

 

 

 

 

 

 

 

BackColor

clInfoBk

Color

clBtnFace

Font

MS Sans Serif, Bold, 14, Yellow

ForeColor

clGreen

Kind

gkHorizontalBar

MaxValue

100

MinValue

0

Progress

100

SpinEditl

 

 

 

 

EditorEnabled

False

MaxValue

10

MinValue

1

Value

5

BitBtnl

 

 

Glyph

C:\ Program Files\ Borland\ Delphi x.O \IMAGES \BUTTONS\ check.bmp

Caption

Готово

BitBtn2

 

 

Glyph

C:\ Program Files\ Borland\ Delphi x.O \IMAGES \BUTTONS\ dooropen.brap

Caption

Выход

Shapel, Shape2,

Brush-Color

clInfoBk

Shape3

Shape

stRoundRect

Image 1, Image2, Image3

Stretch

True

Label1

Font-Color

Red

Font-Size

10

Caption

Обязательно нажмите на кнопку "Готово" после раз­мещения рисунков!!

Label2, label3, label4

Font-Color

Olive

Font-Size

16

 

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

5.      Дважды щелкните на первом таймере и запрограммируйте мигание сообщения «Обязательно нажмите на кнопку «Гото­во» после размещения рисунков!!» так:

procedure TForml.TimerlTimer(Sender: Tobject);

begin

{Если поле мигает}

if Label1.Visible = True then

Label1.Visible := False      {поле гасится,}

 else

{иначе — поле засвечивается}

Label1.Visible := True;

    end;

6.      Введите описание глобальных переменных программы:

var Forml : Tforml

{Эта строка уже есть в заготовке модуля]

shiftX, shiftY : integer;

7.           Введите описания глобальных констант и переменных программы:

const   k = 4;    {Количество обновлений содержания теста}

(Массив рисунков)

a: array [l..k, 1..3] of  string =( (‘books.wmf’, ’flover.wmf', 'bomb.wmf'),

('grape.wmf’, 'lemon.wmf’, 'PC.wmf’),

('pie.wmf’, 'pineapple.wmf, 'pumpkin.wmf’),
('sportmens.wmf’, 'telephone.wmf’, 'watermelon.wmf’)  );

(Массив слов)
b: array [l..k, 1..3] of string = ( ' books', ' flover ', 'bomb'), (' grape ', ' lemon ', 'PC'),

(' pie ', ' pineapple ', ' pumpkin '), (' sportmens ', ' telephone ', ' watermelon '));

check: array [l..k, 1..3] of integer = (

(2,   1,   3),         (Таблица отображения}

(3,   2,   1),         (массива рисунков а в }

(3,   1,   2),         (массив слов b. Здесь число-}

(1,   3,   2));      (номер рисунка к слову}

var

Forml : TForml;    (Эта строка уже есть в заготовке модуля)

 i, score : integer;

shiftX, shiftY : integer;

leftl, left2, left3 : integer;

top1, top2, top3 : integer;

8.      Запрограммируйте кнопку BitBtn2 как кнопку закрытия окна командой close.

Вставьте рисунки books.wmf’, ’flover.wmf', 'bomb.wmf' из папки z:\12kp1\!ПРАКТИКА!\Картинки\  в объекты Iniagel, Image2 и Image3 соответственно.

Свойствам Caption текстовых полей Label2, Labels и Label4 присвойте значения ' books', ' flover ', 'bomb' соответственно.

9.        3апрограммируйте процедуры: создания формы FormCreate, вставки в неё рисунков SetPicture, вывод информации о ре­зультате теста Information и кнопку BitBtn2:

procedure TForml.FormCreate(Sender: TObject);

begin

i := 0; (Номер обновления содержания теста)

score:=0; (Набранные, пользователем баллы)

(Сохраняем начальные координаты]

left1:=Image1.left;  (левых верхних углов)

left2:= Image2.left;  (трех рисунков в форме)

left3:= Image3.left;

top1 := Image1.Top;

top2 := Image2.Top;

top3 := Image3.Top;

SetPicture;   (Процедура i – той вставки рисунков)

procedure Information;

begin

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

Прекращаем мигание Labell }

Forml.Timer 1.Enabled := False;

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

Forml.Timer2.Enabled := False;

{Результат теста приводим к 100 баллам}

score := (score * 100) div k;

{Если результат > 90 - считываем файл громкого аплодирования}

if score > 90 then

Forml.MediaPlayerl.FileName := 'applause.wav';

{Если результат между 70 и 90 - считываем файл легкого аплодирования.}

if (score > 70) and (score < 90) then

Forml.MediaPlayerl.FileName := 'clap.wav';

{Иначе файл не считываем и аплодирования не будет}

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

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

{Открываем окно сообщения"Вы набрали ## баллов с 100}

MessageDlg('Bы набрали '+IntToStr(score)+' баллов из 100', mtInformation,[mbOk], 0);

{После щелчка на кнопке "Ok" информационного окна:}

{Закрываем окно программы — заканчиваем работу}

Forml.close;

end;

procedure TForml.BitBtn2Click(Sender: TObject);

begin

Information;

end;

Процедуры  Information   и  SetPicture   не  являются  методами класса Forml.    Поэтому изменение свойств любых объектов формы происходит в них путем явного указания имени формы Forml перед        именем        соответствующего        объекта,        например, Forml.Timerl.Enabled.     Декларации    процедур    Information     и  SetPicture  вставьте между описанием типа TForml   и  разделом подсоединенных модулей - uses:

procedure Information;

procedure SetPicture;

10.  Обеспечьте перетягивания первого рисунка на форме, запрограммировав обработки таких трех событий для объек­та Imagel: OnMouseDown (ЕслиНажатьМышь), OnMouseMove (ЕслиПеретягиватьМышь) и OnMouseUp (ЕслиОтпустить-Мышь). Для заполнения заготовок приведенных процедур воспользуйтесь закладкой Events окна инспектора объектов первого рисунка.

procedure TForml.ImagelMouseDown(Sender: TObject; Button: TMouseButton;   Shift: TShiftState; X, Y: Integer);

    begin

{Временная переменная Tag объекта Imagel =1, если}

 {клавиша мыши в этот момент нажата}

Imagel.Tag := 1;

shift := Y;       {Запоминаем координату (X; Y) точки}
shift := X;        {щелчка мыши в середине рисунка}

end;

procedure TForml.ImagelMouseMove(Sender: TObject; Shift: TshiftState; X,Y: Integer);

 begin

if Imagel.Tag = 1 then {Если нажата клавиша мыши}

begin

{Меняем координаты рисунка на величину изменения ко­ординаты указателя мыши (X; Y) с учетом его смещений в середине рисунка shiftX, shiftY}

Imagel.Top := Imagel.Top + Y - shiftY;

Imagel.Left := Imagel.Left + X - shiftX;

end;

    end;

procedure TForml.ImagelMouseUp(Sender : Tobject;

Button : TMouseButton;   Shift : TShiftState; X, Y : Integer);

begin

{Запоминаем, что клавиши мыши отпущены}

 Image 1. Tag := 0

end;

Обратите внимание, что программа не проверяет, какую имен­но клавишу мыши нажал пользователь, поэтому перетягивать картинки можно любой клавишей. Проверить клавиши мыши можно, проанализировав аргумент Button (типа TMouseButton) приведенных процедур: Button = {mbLeft (левая клавиша), mbRight (правая), mbMiddle (средняя)}. Координаты указателя мыши в пикселях передаются в процедуры с помощью аргументов X и Y типа integer.

11.    Аналогично   запрограммируйте   соответствующие   события
для перетягивания двух других рисунков.

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

function   TForml.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

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

else

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

end;

Функция ImagelnShape является методом класса Forml, поэто му обращение к свойствам любых объектов формы Forml осущг ствляется непосредственно с помощью имени этих объектен, например, Image.Top. Декларацию функции вставьте в раздел описания формы type TForml в раздел деклараций общедоступных процедур после служебного слова public:

function ImageInShape(Image:TImageShape:TShape):Boolean;

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

procedure TForml.BitBtnlClick(Sender: TObject);

begin

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

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

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

Timer2.Enabled := False;

if       ImageInShape(Imagel,Shape2) and ImageInShape(Image2,Shape3) and

ImageInShape(Image3 ,Shape1)

then  

begin

{Считываем файл громкого аплодирования]
MediaPlayerl.FileName := 'applause.wav';
MediaPlayerl.Open;    {Открываем  плеер]
MediaPlayerl.Play;           {Воссоздаем звук]

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

 MessageDlg(‘Правильно!', mtInformation, [mbOk], 0);

end

else 

begin

MediaPlayerl.FileName : = 'ding.wav';

MediaPlayerl .Open;

MediaPlayerl.Play;         {Подаем звук "ДИНГ"}

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

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

Timer1. Enabled := True;

Timer2.Enabled := True;

Gauge1.Progress := 100;

end;

end;

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

procedure TForml.BitBtnlClick(Sender : Tobject);

var

check1, check2, checks : integer;

begin

{Где находится первый рисунок?}

 {В 1-ой фигуре}

if ImageInShape(Imagel,Shapel) then checkl := 1;

{Во 2-ой фигуре}

if ImagernShape(Imagel,Shape2) then checkl := 2;

{В 3-ей фигуре]

if ImageInShape(Imagel,ShapeS) then checkl := 3;

(Где находится второй рисунок?}

{В 1-ой фигуре]

if ImageInShape(Image2,Shapel) then check2 := 1;

{Во 2-ой фигуре]

if ImageInShape(Image2,Shape2) then check2 := 2;

 {В 3-ей фигуре}

if ImageInShape(Image2,ShapeS) 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;

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

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

procedure TForml.Timer2Timer(Sender: TObject);

begin

{Задаем скорость движения индикатора]

 timer2.interval := SpinEditl.value * 100;

{Работает индикатор времени]

Gauge1.progress := Gauge1.progress - 1;

if Gauge1.progress = 0 then    {Если время исчерпано}

begin

Timer1.Enabled := False;

Timer2.Enabled := False;

MediaPlayerl.FileName := 'ding.wav';

MediaPlayerl .Open;

MediaPlayerl.Play;      {Подаем звук "ДИНГ"}

MessageDlg('Попробуйте еще раз!', mtlnformation, [mbOk], 0);

Timerl.Enabled := True;

Timer2.Enabled := True;

Gaugel.Progress := 100;

end;

end;

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

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

procedure TForml.Timer2Timer(Sender: TObject);

begin

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

ImageInShape(Image2,Shapel) or

ImageInShape(Image3,Shapel)) and

(и один из рисунков находится во втором прямоугольнике)

(                          ImageInShape(Imagel,Shape2) or

ImageInShape(Image2,Shape2) or ImageInShape(Image3,Shape2)) and

(и один из рисунков находится в третьем прямоугольнике}
                     
ImageInShape(Imagel,Shape3) or

ImageInShape(Image2,Shape3) or

ImageInShape(Image3,Shape3))

{то кнопка "Готово" становится доступной:}

 then       BitBtnl.Enabled := True;

{Работает индикатор времени}

Gauge1.progress := Gauge 1. progress - 1;

if Gauge1.progress = 0 then     

{Если время исчерпано}

begin

MediaPlayerl.FileName := 'ding.wav';

MediaPlayerl.Open;

MediaPlayerl.Play;    {Подаем звук "ДИНГ"}

SetPicture;                 {Меняем серию рисунков}

end;

end;

13.   Сохраните программу и проект в своей папке.

14.   Скопируйте музыкальные файлы ding.wav, applause.wav и
clap.wav   в   свою   папку   из   папки z:\12kp1\!ПРАКТИКА!\Музыка.

15**.Скопируйте все рисунки в свою пап­ку из папки z:\12kp1\!ПРАКТИКА!\Картинки\.

16.  Запустите   программу.   Перетягивайте   мышью   рисунки   на
середину соответствующих фигур.

17. Создайте ехе-файл программы и поупражняйтесь с ней.