Создание приложения 'Игра на запоминание'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    14,17 Кб
  • Опубликовано:
    2015-05-29
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Создание приложения 'Игра на запоминание'















Создание приложения «Игра на запоминание»

Введение

программа delphi компьютерный игра

Темой курсовой работы является создание компьютерной игры посредством среды программирования Delphi. В Delphi программирование обучающей программы мы будем видеть, как компонент TDrawGrid может использоваться, чтобы помочь нам развить игру «Memory» (Игра на запоминание).

В разделе Анализ постановки задачи говорится о том, что представляет из себя программа, её назначение и область применения. А так же приводятся теоретические сведения, которые использовались для реализации данной программы.

В разделе Обоснование инструментов разработки объясняются причины выбора языка программирования и описываются основные компоненты и методы, которые использовались в процессе создания программы.

В разделе Реализация программы описывается логическая и физическая структуры, а так же основные функции и элементы управления программы.

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

В разделе Применение содержатся инструкции по работе с программой, описание действий пользователя при применении программы, основные возможности использования программного приложения и основные преимущества программы.

В Заключении делается вывод о проделанной работе.

1. Анализ постановки задачи

1.1Назначение и область применения

программа delphi компьютерный игра

Данная игра предназначена для развития памяти. Игрок может выбирать уровни сложности (Difficulty level).

«Игра на запоминание» позволяет увеличить эффективность заученного и ведет к развитию памяти и интеллекта.

1.2Теоретические сведения

.2.1 Память

Память - познавательный процесс, обеспечивающий запечатление, хранение и воспроизведение опыта.

Многие исследователи, чтобы подчеркнуть функции памяти, предпочитают пользоваться терминами "запоминание" и "забывание" и избегают общего термина "память".

.2.2 Теории забывания

В объяснении феномена забывания сложились две противоположные теории. Согласно одной из них, гипотезе неупотребления, забывание является следствием постепенного разрушения со временем нейрофизиологических следов того, что было выучено. Запоминание, напротив, связано с сохранением таких следов. У этой теории немного сторонников, хотя сама идея неупотребления все еще присутствует, иногда неявно, в ряде трактовок памяти. Значительно более распространена теория интерференции, по которой объем забытого (соответственно сохраненного) материала определяется степенью взаимодействия вновь поступившей информации с уже сложившимися привычками и имеющимися знаниями. Возможно, эти две гипотезы в каких-то случаях одновременно приложим к описанию работы памяти.

.2.3 Измерение запоминания

Обычно при измерении памяти исследуются разные стороны этого процесса, в том числе:

простое запоминание нового материала

заучивание вновь знакомого материала, используемое для подсчета той экономии усилий, которую дает его частичное сохранение в памяти

- измерение способности восстанавливать правильную последовательность фрагментов материала, если они предъявлялись в нарушенном порядке

- степень узнавания исходной информации в случае ее смешения с новым или не связанным с ней материалом.

.2.4 Принципы запоминания

Среди наиболее хорошо изученных и важнейших принципов запоминания можно назвать следующие: забывание происходит быстрее всего сразу после заучивания, через некоторое время этот процесс замедляется; запоминание происходит тем лучше, чем выше уровень овладения материалом. При одинаковом уровне овладения материалом запоминанию способствует осмысленность запоминаемого или же более дробный способ подачи материала; запоминание тем лучше, чем больше повторяется заучиваемый материал; забывание происходит тем быстрее, чем более сходна (вплоть до почти полного совпадения) последующая деятельность с той, что была ранее, до заучивания нового материала; чем выше уровень овладения последующим материалом, тем быстрее происходит забывание предыдущего; материал вспоминается тем полнее, чем более сходна с изначальной ситуация в момент проверки уровня запоминания (включая желание индивида запомнить и воспроизвести материал).

2. Обоснование инструментов разработки

Для реализации данной программы я выбрал язык программирования Borland Delphi 7. Эта версия позволила объединить в рамках единой системы мощный алгоритмический потенциал языка, методы объектно-ориентированного программирования, графику, удобные средства тестирования и отладки программ, а также обеспечить хороший интерфейс для работы пользователя. В основе Delphi лежит язык Object Pascal, предоставляющий возможность полной реализации основных принципов ООП (инкапсуляция, наследование, полиморфизм) и обладающий встроенной обработкой исключительных ситуаций. Компонентная архитектура Delphi является прямым развитием поддерживаемой объектной модели. Все компоненты являются объектными типами (классами), обладающими возможностью неограниченного наследования. Компоненты Delphi поддерживают РМЕ-модель (Property, Method, Events - свойства, методы, события), позволяющую изменять поведение компонентов без необходимости создания новых классов. При создании данной программы я пользовался следующими компонентами и методами:

Компонент Image (находится на вкладке Additional) - cлужит для отображения графического растрового файла, иконки или метафайла. Компонент Image много богаче по своим возможностям и удобнее, чем PaintBox. Он имеет существенное преимущество: в нем не приходится думать о перерисовке изображения, испорченного из-за перекрытия данного окна другими. Все, связанное с обработкой событий OnPaint, в Image осуществляется автоматически. Кроме того с помощью Image проще, чем при непосредственном рисовании на канве формы, расположить в окне приложения несколько изображений и управлять ими. При этом отпадает необходимость сложных и нудных расчетов координат канвы формы, обеспечивающих требуемое взаимное расположение изображений, т.е. в полной мере проявляются преимущества визуального программирования. Так что, вероятно, во всех случаях лучше работать с канвой Image, чем с канвой формы.

Но помимо этих возможностей у компонента Image имеются свойства, позволяющие работать с различными типами графических файлов. Delphi поддерживает три типа файлов - битовые матрицы, пиктограммы и метафайлы. Все три типа файлов хранят изображения; различие заключается лишь в способе их хранения внутри файлов и в средствах доступа к ним. Битовая матрица (файл с расширением .bmp) отображает цвет каждого пикселя в изображении. При этом информация хранится таким образом, что любой компьютер может отобразить изображение с разрешающей способностью и количеством цветов, соответствующими его конфигурации.

Пиктограммы (файлы с расширением .ico) - это маленькие битовые матрицы. Они повсеместно используются для обозначения значков приложений, в быстрых кнопках, в пунктах меню, в различных списках. Способ хранения изображений в пиктограммах схож с хранением информации в битовых матрицах, но имеются и различия. В частности, пиктограмму невозможно масштабировать, она сохраняет тот размер, в котором была создана.

Метафайлы (Metafiles) хранят не последовательность битов, из которых состоит изображение, а информацию о способе создания картинки. Они хранят последовательности команд рисования, которые и могут быть повторены при воссоздании изображения. Это делает такие файлы, как правило, более компактными, чем битовые матрицы.

Компонент Image позволяет отображать информацию, содержащуюся в графических файлах всех указанных типов. Для этого служит его свойство Picture - объект типа TPicture.

Когда вы в процессе проектирования загрузили изображение из файла в компонент Image, он не просто отображает его, но и сохраняет в приложении. Это дает вам возможность поставлять ваше приложение без отдельного графического файла. Впрочем, как мы увидим позднее, в Image можно загружать и внешние графические файлы в процессе выполнения приложения.

Свойства компонента Image:

autoSize. Если он в true, то размер компонента Image будет автоматически подгоняться под размер помещенной в него картинки. Если же свойство AutoSize установлено в false, то изображение может не поместиться в компонент или, наоборот, площадь компонента может оказаться много больше площади изображения.

stretch. Оно позволяет подгонять не компонент под размер рисунка, а рисунок под размер компонента. Устанавливать Stretch в true может иметь смысл только для каких-то узоров, но не для картинок. Свойство Stretch не действует на изображения пиктограмм, которые не могут изменять своих размеров.

center. Установленное в true, центрирует изображение на площади Image, если размер компонента больше размера рисунка.

transparent (прозрачность). Если Transparent равно true, то изображение в Image становится прозрачным. Это можно использовать для наложения изображений друг на друга. Одно из возможных применений этого свойства - наложение на картинку надписей, выполненных в виде битовой матрицы. Эти надписи можно сделать с помощью встроенной в Delphi программы Image Editor. Учтите, что свойство Transparent действует только на битовые матрицы.

height (высота) и width (ширина). При загрузке разных изображений размер окна приложения может оказаться или слишком маленьким, и тогда вы увидите только часть изображения, или слишком большим, и тогда изображение будет некрасиво размещено в левом верхнем углу формы, оставляя много пустого пространства. При помощи этих свойств, эти недостатки можно устранить.

Компонент класса TSpinEdit ( находится на вкладке Samples) - предназначен исключительно для ввода целых чисел. Две кнопки, находящиеся в правой части компонента, предоставляют возможность пошагового изменения значения чисел. В этот компонент допускается ввод только цифр и знаков «плюс» (+) и «минус» (-).

Свойства компонента SpinEdit:

EditorEnabled. Разрешает или запрещает ручной ввод чисел.

Increment. Позволяет задать шаг изменения числа при нажатии кнопки увеличения или уменьшения. По умолчанию это свойство имеет значение 1.

MaxValue. Определяет максимально допустимое значение числа.

MinValue. Определяет минимально допустимое значение числа.

- Value. Возвращает текущее значение числа.

- Компонент DrawGrid используется для создания в приложении таблицы, которая может содержать графические изображения. Этот компонент подобен компоненту StringGrid, поскольку последний является производным от DrawGrid. Поэтому в DrawGrid присутствуют все свойства, методы, события компонента StringGrid, кроме относящихся к тексту, т.е. кроме свойств Cells, Cols, Rows, Objects.

Компонент TDrawGrid предоставляет программисту мощные возможности создания и обслуживания табличных структур данных. Он обеспечивает двухмерное представление данных, упорядоченных по столбцам и рядам, и избавляет программиста от многих рутинных аспектов, связанных с представлением и обслуживанием таблиц.

Чтобы таблица была работоспособной, в ней как минимум следует определить обработчик события OnDrawCell, которое возникает при необходимости прорисовать ту или иную ячейку. Для прорисовки используется табличное свойство Canvas.

Компонент DrawGrid имеют канву Canvas, на которой можно размещать изображения. Имеется метод CellRect, который возвращает область канвы, отведенную под заданную ячейку.

Изображение на канве компонента DrawGrid , как и на канве любого компонента, подвержено стиранию при перекрытии окна приложения другими окнами или, например, при сворачивании приложения.

-TTimer - находится на странице System

Этот не визуальный компонент предназначен для уведомления программы об истечении определенных промежутков времени. Компонент инкапсулирует системный таймер Windows и работает через посылку сообщений WM_TIMER.

Свойство:

- property Enabled: Boolean. Включает/выключает таймер, влияя на генерацию им событий. Будучи установлен в Enabled, таймер начинает генерировать события OnTimer через интервал времени.

- property Interval: Word. Измеряется в миллисекундах.

- property OnTimer: TNotifyEvent. После каждого истечения такого интервала инициируется обработчик, связанньш с событием, при этом программист получает очередной квант времени.

При активизации и де активизации таймера или изменении интервала в системе может не оказаться свободных таймеров. В этом случае генерируется исключительная ситуация EOutOfResources.

- TRadioGroup - находится на странице Standart

Готовая группа радиокнопок, содержащая все средства для управления ими. Каждая радиокнопка в группе наследует все свойства TRadioButton. Радиокнопки могут располагаться в несколько столбцов.

Свойство:

- property Columns: Integer; - устанавливает число столбцов с радиокнопками. Оно не должно превышать 16. Индекс нажатой радиокнопки в группе определяется свойством:

- property Itemlndex: Integer. Индекс исчисляется от 0. Если он равен -1, ни одна радиокнопка в группе не нажата.

property Items: TStrings. Набор строк с заголовками радиокнопок содержится в свойстве.

Доступ к методам и свойствам каждой радиокнопки пользователь компонента получить не может, т. к. сами объекты-радиокнопки содержатся в отдельном скрытом списке.

TMainMenu - находится на странице Standart

Конструктор меню Delphi поможет значительно упростить разработку меню. В нем имеются готовые шаблоны типовых подменю верхнего уровня: File, Edit и др. Можно также определить свои шаблоны.

TEdit - находится на странице Standart

Этот компонент не содержит собственного кода, в нем только опубликованы свойства его предка TCustomEdit. Он представляет собой редактируемую строку.

Свойства Edit:

-property AutoSize: Boolean. Если равно True, компонент изменяет свою высоту в зависимости от размера шрифта (свойство Font).

-property OEMConvert:Boolean. Определяет необходимость автоматического преобразования вводимых символов из кодировки OEM в ANSI и обратно. Такое свойство часто бывает нужно при обработке текста в кодировке MS-DOS.

- property AutoSelect:Boolean. Описывает реакцию редактирующего элемента при получении фокуса. Если оно установлено в True (по умолчанию это так), то при получении фокуса ввода весь текст в нем выделяется независимо от состояния свойства SelText. Если AutoSelect установлено в False, то при получении фокуса выделяется лишь то, что было выделено до его утери.

- property HideSelection:Boolean. После утери фокуса редактором выделенный в нем текст обычно теряет цветовое выделение. Чтобы оно оставалось, установите в False второе свойство:

- property MaxLength: Integer. Определяет максимальную длину текста редактора в символах. Если значение этого свойства равно 0, то ограничений на длину текста нет.

3. Реализация программы

.1 Логическая структура

Проект «Игра на запоминание» состоит из формы, модулей, установок параметра объекта, ресурсов и т.д. Многие из этих файлов автоматически создаются в Delphi во время построения приложения, а также некоторые создаются компиляторами.

Автоматически созданные файлы:

единственный «файл - проект» (Memory.dpr) содержит блок - программы, управляющий приложением вцелом. В нем содержатся операторы инициализации и запуска программного выполнения. Его расширение *.dpr;

три «файлов - формы» (MainUnit.dfm, Unit2.dfm, Unit3.dfm), данные формы являются основными окнами нашей программы, с которыми будет работать пользователь;

три «файлов - модулей», с расширением *.pas (MainUnit.pas, Unit2.pas, Unit3.pas), в нем содержится текст модуля для работы формы;

файл опции проекта (Memory.dof). В нем находятся процедуры нашего проекта;

файл конфигурации проекта (Memory.cfg). В нем хранится установка проекта, директивы компилятора и т.д;

файл ресурсов (Memory.res) содержит, используемые проектом пиктограмму и другие ресурсы;

файлы резервных копий (MainUnit.~ddp, MainUnit.~dfm, MainUnit.~pas, Unit2.~ddp, Unit2.dfm, Unit2.~pas, Unit3.~ddp, Unit3.dfm, Unit3.~pas).

Файлы, созданные компилятором:

файл memory.exe, использующий файл приложения. Если для выполнения файла не используется никакая библиотека, то этого файла достаточно для работы приложения;

файлы MainUnit.dcu,Unit2.dcu, Unit3.dcu - это откомпилированные файлы модулей MainUnit.pas, Unit2.pas, Unit3.pas.

.2 Функции и элементы управления

Так как данная программа-игра предназначена для развития памяти детей, студентов, то просто необходимо было предусмотреть различные уровни сложности. В данной программе предусмотрено 3 уровня сложности: Easy, Standart и Hard.

Используемые в программе процедуры и их описание:

procedure LoadImages - Процедура загрузки изображения

var

i : integer;

for i := 0 to 9 do[i] := TImage.Create(nil);[i].Picture.LoadFromFile(ImagePaths[i]);

procedure RandomizeThePermutationArray - это процедура, которая случайным способом разбрасывает картинки по таблице.

4. Тестирование

Данные испытания были проведены с целью выявления и устранения ошибок.

В ходе проверки игры была выявлена ошибка ввода значений со знаком (-) в SpinEdit. При работе с игрой с клавиатуры можно было вводить значения с (-). Для решения данной проблемы необходимо в SpinEdit данной программы вminValue поствать значение 1, чтобы избежать значений со знаком (-).

При повторном запуске программы введение значений со знаком (-) стало не доступным.

При вызове справки была замечена странная ошибка, связанная с нечитабельным текстом написанным кириллицей. Однако, в дальнейшем, эта ошибка была исправлена.

В ходе тестирования были обнаружены ошибки, которые с успехом были исправлены.

5. Применение

1 Назначение и условия применения программы

Данная программа демонстрирует возможности среды разработки Delphi при создании графических приложений, в частности мини-игр. Программа предназначена исключительно для развлечения.

.2 Инсталляция

В комплект поставки программного обеспечения входит компакт-диск, на котором записан инсталлятор программы. Для использования данного программного обеспечения необходимо запустить программу установки с компакт-диска (файл «Setup.exe») и дождаться ее завершения. Программа не будет функционировать полностью, если установка проводиться от имени учетной записи, не имеющей прав администратора.

Для того чтобы удалить данное программное обеспечения с компьютера, необходимо выполнить деинсталляцию с помощью элемента «Установка и удаление программ» панели управления.

.3 Выполнение

Для запуска программы необходимо двойным щелчком мыши щелкнуть по ярлыку «Memory» на рабочем столе или выбрав соответствующий ярлык из пункта меню «Пуск», который был создан в процессе установки.

Заключение

В ходе создания курсового проекта было разработана игра в среде программирования Delphi. Основные цели, поставленные перед созданием данного курсового проекта были реализованы.

Данная игра будет предназначена для общего пользования, для проведения досуга детей, школьников, студентов.

Также она может служить примером для студентов при изучении таблиц в Delphi.

Литература

1. Прищепов М.А. Программирование на языках Basic, Pascal и Object Pascal в среде Delphi / М.А. Прищепов, Е.В. Севернёва, А.И. Шакирин - Минск: «ТетраСистемс», 2006. - 313 с.

2. Справочник по компонентам Delphi [Электронный ресурс]. -2009. - Режим доступа: #"justify">Приложение

Код программы:MainUnit;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, ExtCtrls, Menus, StdCtrls;= class(TForm): TDrawGrid;: TMainMenu;: TMenuItem;: TTimer;: TEdit;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;FormCreate(Sender: TObject);itemNewGameClick(Sender: TObject);DrawGridDrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);DrawGridSelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);Timer1Timer(Sender: TObject);Exit1Click(Sender: TObject);;= (ALREADY_MATCHED, CELL_VISIBLE, CELL_INVISIBLE);

MAX_IMAGES = 10;: TfrmMain;:integer;: array [0..MAX_IMAGES-1] of TImage;: array [0..19] of integer;: array [0..19] of integer;: array [0..19] of integer;: array [0..19] of TCellMode;, SecondCell : integer;, n : integer;: array [0..MAX_IMAGES-1] of string

= ('img0.bmp', 'img1.bmp', 'img2.bmp', 'img3.bmp', 'img4.bmp', 'img5.bmp',

'img6.bmp', 'img7.bmp', 'img8.bmp', 'img9.bmp');

{$R *.dfm}RedrawCell (index : integer);, Row : integer;:= index div 5;:= index mod 5;.DrawGridDrawCell(frmMain, Col, Row, frmMain.DrawGrid.CellRect(Col,Row), []);LoadImages;: integer;i := 0 to MAX_IMAGES-1 do[i] := TImage.Create(nil);[i].Picture.LoadFromFile(ImagePaths[i]);TfrmMain.FormCreate(Sender: TObject);: integer;;i := 0 to 19 do[i] := i;;.Click;LinearIndexOf (Row, Column : integer) : integer;:= 5 * Row + Column;RandomizeThePermutationArray;, RandomPosition, Temp : integer;i := 0 to 18 do:= i + Random(19 - i) + 1;:= RandomPermutationArray[i];[i] := RandomPermutationArray[RandomPosition];[RandomPosition] := Temp;;AssignPartnerships;: integer;i := 0 to 19 doi mod 2 = 0 then

PartnerOf[RandomPermutationArray[i]] := RandomPermutationArray[i + 1]

PartnerOf[RandomPermutationArray[i]] := RandomPermutationArray[i - 1];AssignImagesToCells;: integer;i := 0 to 19 do[RandomPermutationArray[i]] := i div 2;InitializeCellModes;: integer;i := 0 to 19 do[i] := CELL_INVISIBLE;TfrmMain.itemNewGameClick(Sender: TObject);: integer;.Enabled:=true;:=30;;;;;:= 0;i := 0 to 19 do(i);;TfrmMain.DrawGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);: integer;:= LinearIndexOf(ARow, ACol);ModeOfCell[index] = CELL_INVISIBLE then.Canvas.Brush.Color := clBlack;.Canvas.FillRect(Rect)if ModeOfCell[index] = ALREADY_MATCHED then.Canvas.Brush.Color := clWhite;.Canvas.FillRect(Rect)begin.Canvas.StretchDraw(Rect, Images[ImageOfCell[index]].Picture.Graphic);;TfrmMain.DrawGridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);: integer;:= LinearIndexOf(ARow, ACol);ModeOfCell[index] = ALREADY_MATCHED then;NumberOfVisibleCells = 0 then:= index;[FirstCell] := CELL_VISIBLE;(FirstCell);(NumberOfVisibleCells)if (NumberOfVisibleCells = 1) and (FirstCell <> index) then:= index;[SecondCell] := CELL_VISIBLE;(SecondCell);PartnerOf[SecondCell] = FirstCell then

Sleep(100);

ModeOfCell[FirstCell] := ALREADY_MATCHED;

RedrawCell(FirstCell);

ModeOfCell[SecondCell] := ALREADY_MATCHED;

RedrawCell(SecondCell);

NumberOfVisibleCells := 0(NumberOfVisibleCells)begin(FirstCell <> index) and (SecondCell <> index) then[index] := CELL_VISIBLE;(index);;FirstCell <> index then[FirstCell] := CELL_INVISIBLE;(FirstCell);;SecondCell <> index then[SecondCell] := CELL_INVISIBLE;(SecondCell);;:= index;:= 1;TfrmMain.Timer1Timer(Sender: TObject);: integer;:= 0;:=tick-1;.text:=inttostr(tick);edit1.text='0' then.Enabled:=false;('GAME OVER');;i := 0 to 19 doModeOfCell[i] = ALREADY_MATCHED then:= n + 1;;n = 20 then.Enabled:=false;('You Win');;;TfrmMain.Exit1Click(Sender: TObject);;;.:Unit2;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls, MainUnit, Spin;= class(TForm): TRadioGroup;: TSpinEdit;: TButton;RadioGroup1Click(Sender: TObject);Button1Click(Sender: TObject);SpinEdit1KeyPress(Sender: TObject; var Key: Char);

{ Private declarations }

{ Public declarations };: TForm2;: integer;

{$R *.dfm}TForm2.RadioGroup1Click(Sender: TObject);

:

tick := 60;

:

tick := 45;

:

tick := 30;

:SpinEdit1.Value <> 0 then

tick := SpinEdit1.Value;;.Hide;.ProcessMessages;.Timer1.Enabled := true;.RandomizeThePermutationArray;.AssignPartnerships;.AssignImagesToCells;.InitializeCellModes;:= 0;i := 0 to 19 do

frmMain.RedrawCell(i);};TForm2.Button1Click(Sender: TObject);RadioGroup1.ItemIndex of

:

tick := 60;

:

tick := 45;

:

tick := 30;

:SpinEdit1.Value <> 0 then

tick := SpinEdit1.Value;;.Hide;.ProcessMessages;.Timer1.Enabled := true;.RandomizeThePermutationArray;.AssignPartnerships;.AssignImagesToCells;.InitializeCellModes;:= 0;i := 0 to 19 do

frmMain.RedrawCell(i);;TForm2.SpinEdit1KeyPress(Sender: TObject; var Key: Char);(key = '-') then:= #0;;.:Unit3;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls, XPMan;= class(TForm): TButton;: TImage;: TXPManifest;Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm3;

{$R *.dfm}TForm3.Button1Click(Sender: TObject);.Close;;.

Похожие работы на - Создание приложения 'Игра на запоминание'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!