Создание приложения "Игра на запоминание"
Создание компьютерной игры посредством среды программирования Delphi. Инструменты разработки, компоненты и методы для разработки программы. Логическая и физическая структуры, основные функции и элементы управления программы, ее тестирование и отладка.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 26.07.2014 |
Размер файла | 27,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Создание приложения «Игра на запоминание»
Введение
программа delphi компьютерный игра
Темой курсовой работы является создание компьютерной игры посредством среды программирования Delphi. В Delphi программирование обучающей программы мы будем видеть, как компонент TDrawGrid может использоваться, чтобы помочь нам развить игру «Memory» (Игра на запоминание).
В разделе Анализ постановки задачи говорится о том, что представляет из себя программа, её назначение и область применения. А так же приводятся теоретические сведения, которые использовались для реализации данной программы.
В разделе Обоснование инструментов разработки объясняются причины выбора языка программирования и описываются основные компоненты и методы, которые использовались в процессе создания программы.
В разделе Реализация программы описывается логическая и физическая структуры, а так же основные функции и элементы управления программы.
Далее раздел Тестирование. Здесь освещаются подготовка определенных тестов и моделирование действий пользователя, при этом необходимо учитывать возможные неправильные действия пользователя.
В разделе Применение содержатся инструкции по работе с программой, описание действий пользователя при применении программы, основные возможности использования программного приложения и основные преимущества программы.
В Заключении делается вывод о проделанной работе.
1. Анализ постановки задачи
1.1 Назначение и область применения
программа delphi компьютерный игра
Данная игра предназначена для развития памяти. Игрок может выбирать уровни сложности (Difficulty level).
«Игра на запоминание» позволяет увеличить эффективность заученного и ведет к развитию памяти и интеллекта.
1.2 Теоретические сведения
1.2.1 Память
Память -- познавательный процесс, обеспечивающий запечатление, хранение и воспроизведение опыта.
Многие исследователи, чтобы подчеркнуть функции памяти, предпочитают пользоваться терминами "запоминание" и "забывание" и избегают общего термина "память".
1.2.2 Теории забывания
В объяснении феномена забывания сложились две противоположные теории. Согласно одной из них, гипотезе неупотребления, забывание является следствием постепенного разрушения со временем нейрофизиологических следов того, что было выучено. Запоминание, напротив, связано с сохранением таких следов. У этой теории немного сторонников, хотя сама идея неупотребления все еще присутствует, иногда неявно, в ряде трактовок памяти. Значительно более распространена теория интерференции, по которой объем забытого (соответственно сохраненного) материала определяется степенью взаимодействия вновь поступившей информации с уже сложившимися привычками и имеющимися знаниями. Возможно, эти две гипотезы в каких-то случаях одновременно приложим к описанию работы памяти.
1.2.3 Измерение запоминания
Обычно при измерении памяти исследуются разные стороны этого процесса, в том числе:
- простое запоминание нового материала
- заучивание вновь знакомого материала, используемое для подсчета той экономии усилий, которую дает его частичное сохранение в памяти
- измерение способности восстанавливать правильную последовательность фрагментов материала, если они предъявлялись в нарушенном порядке
- степень узнавания исходной информации в случае ее смешения с новым или не связанным с ней материалом.
1.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
Этот компонент представляет главное меню формы и наследует все методы и свойства TMenu. Особенность его в том, что в нем реализован сложный механизм объединения меню. Это необходимо по следующим причинам: Если в приложении имеется несколько форм со своими меню, то для упрощения работы целесообразно соединить их в одно и управлять меню из главной формы. Объединение меню нужно при работе с интерфейсом MDI и его подокнами. Механизм объединения меню используется серверами. OLE, запускаемыми по месту нахождения объекта OLE. Загружаясь, сервер дописывает осуществляемые им операции к меню другого приложения. Объединение меню происходит по специальным правилам, в основе которых лежит использование группового индекса (свойства GroupIndex) каждого объекта TMenuItem.У пунктов меню одного уровня, в частности всех подменю верхнего уровня в главном меню, свойство GroupIndex является неубывающим, т. е. у последующего пункта групповой индекс больше либо равен индексу предыдущего. Это требование отслеживается как на этапе разработки, так и на этапе исполнения. На уровне работы с серверами OLE предусмотрены дополнительные возможности по объединению меню. Если в компонент TOLEContainer загружен объект OLE, то в конец подменю Edit обычно добавляется подменю, из которого можно вызвать функции открытия и редактирования этого объекта. После активизации сервера он может не только вставлять свои подменю в главное, но и добавлять новые пункты к уже существующим подменю.
Конструктор меню 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. Реализация программы
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.
3.2 Функции и элементы управления
Так как данная программа-игра предназначена для развития памяти детей, студентов, то просто необходимо было предусмотреть различные уровни сложности. В данной программе предусмотрено 3 уровня сложности: Easy, Standart и Hard.
Используемые в программе процедуры и их описание:
- procedure LoadImages - Процедура загрузки изображения
var
i : integer;
begin
for i := 0 to 9 do
begin
Images[i] := TImage.Create(nil);
Images[i].Picture.LoadFromFile(ImagePaths[i])
end
end;
- procedure RandomizeThePermutationArray - это процедура, которая случайным способом разбрасывает картинки по таблице.
4. Тестирование
Данные испытания были проведены с целью выявления и устранения ошибок.
В ходе проверки игры была выявлена ошибка ввода значений со знаком (-) в SpinEdit. При работе с игрой с клавиатуры можно было вводить значения с (-). Для решения данной проблемы необходимо в SpinEdit данной программы вminValue поствать значение 1, чтобы избежать значений со знаком (-).
При повторном запуске программы введение значений со знаком (-) стало не доступным.
При вызове справки была замечена странная ошибка, связанная с нечитабельным текстом написанным кириллицей. Однако, в дальнейшем, эта ошибка была исправлена.
В ходе тестирования были обнаружены ошибки, которые с успехом были исправлены.
5. Применение
5 1 Назначение и условия применения программы
Данная программа демонстрирует возможности среды разработки Delphi при создании графических приложений, в частности мини-игр. Программа предназначена исключительно для развлечения.
5.2 Инсталляция
В комплект поставки программного обеспечения входит компакт-диск, на котором записан инсталлятор программы. Для использования данного программного обеспечения необходимо запустить программу установки с компакт-диска (файл «Setup.exe») и дождаться ее завершения. Программа не будет функционировать полностью, если установка проводиться от имени учетной записи, не имеющей прав администратора.
Для того чтобы удалить данное программное обеспечения с компьютера, необходимо выполнить деинсталляцию с помощью элемента «Установка и удаление программ» панели управления.
5.3 Выполнение
Для запуска программы необходимо двойным щелчком мыши щелкнуть по ярлыку «Memory» на рабочем столе или выбрав соответствующий ярлык из пункта меню «Пуск», который был создан в процессе установки.
Заключение
В ходе создания курсового проекта было разработана игра в среде программирования Delphi. Основные цели, поставленные перед созданием данного курсового проекта были реализованы.
Данная игра будет предназначена для общего пользования, для проведения досуга детей, школьников, студентов.
Также она может служить примером для студентов при изучении таблиц в Delphi.
Литература
1. Прищепов М.А. Программирование на языках Basic, Pascal и Object Pascal в среде Delphi / М.А. Прищепов, Е.В. Севернёва, А.И. Шакирин - Минск: «ТетраСистемс», 2006. - 313 с.
2. Справочник по компонентам Delphi [Электронный ресурс]. -2009. - Режим доступа: http://www.cyberguru.ru/programming/delphi/delphi-components-part1.html
Приложение
Код программы
MainUnit:
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ExtCtrls, Menus, StdCtrls;
type
TfrmMain = class(TForm)
DrawGrid: TDrawGrid;
MainMenu1: TMainMenu;
itemNewGame: TMenuItem;
Timer1: TTimer;
Edit1: TEdit;
N1: TMenuItem;
Newgame1: TMenuItem;
Restart1: TMenuItem;
Exit1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure itemNewGameClick(Sender: TObject);
procedure DrawGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure DrawGridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure Timer1Timer(Sender: TObject);
procedure Exit1Click(Sender: TObject);
end;
type
TCellMode = (ALREADY_MATCHED, CELL_VISIBLE, CELL_INVISIBLE);
const
MAX_IMAGES = 10;
var
frmMain: TfrmMain;
tick:integer;
Images : array [0..MAX_IMAGES-1] of TImage;
RandomPermutationArray : array [0..19] of integer;
PartnerOf : array [0..19] of integer;
ImageOfCell : array [0..19] of integer;
ModeOfCell : array [0..19] of TCellMode;
FirstCell, SecondCell : integer;
NumberOfVisibleCells, n : integer;
ImagePaths : 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');
implementation
{$R *.dfm}
procedure RedrawCell (index : integer);
var
Col, Row : integer;
begin
Row := index div 5;
Col := index mod 5;
frmMain.DrawGridDrawCell(frmMain, Col, Row, frmMain.DrawGrid.CellRect(Col,Row), [])
end;
procedure LoadImages;
var
i : integer;
begin
for i := 0 to MAX_IMAGES-1 do
begin
Images[i] := TImage.Create(nil);
Images[i].Picture.LoadFromFile(ImagePaths[i])
end
end;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i : integer;
begin
LoadImages;
for i := 0 to 19 do
RandomPermutationArray[i] := i;
Randomize;
itemNewGame.Click
end;
function LinearIndexOf (Row, Column : integer) : integer;
begin
Result := 5 * Row + Column
end;
procedure RandomizeThePermutationArray;
var
i, RandomPosition, Temp : integer;
begin
for i := 0 to 18 do
begin
RandomPosition := i + Random(19 - i) + 1;
Temp := RandomPermutationArray[i];
RandomPermutationArray[i] := RandomPermutationArray[RandomPosition];
RandomPermutationArray[RandomPosition] := Temp
end;
end;
procedure AssignPartnerships;
var
i : integer;
begin
for i := 0 to 19 do
if i mod 2 = 0 then
PartnerOf[RandomPermutationArray[i]] := RandomPermutationArray[i + 1]
else
PartnerOf[RandomPermutationArray[i]] := RandomPermutationArray[i - 1]
end;
procedure AssignImagesToCells;
var
i : integer;
begin
for i := 0 to 19 do
ImageOfCell[RandomPermutationArray[i]] := i div 2
end;
procedure InitializeCellModes;
var
i : integer;
begin
for i := 0 to 19 do
ModeOfCell[i] := CELL_INVISIBLE
end;
procedure TfrmMain.itemNewGameClick(Sender: TObject);
var
i : integer;
begin
timer1.Enabled:=true;
tick:=30;
RandomizeThePermutationArray;
AssignPartnerships;
AssignImagesToCells;
InitializeCellModes;
NumberOfVisibleCells := 0;
for i := 0 to 19 do
RedrawCell(i);
end;
procedure TfrmMain.DrawGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
index : integer;
begin
index := LinearIndexOf(ARow, ACol);
if ModeOfCell[index] = CELL_INVISIBLE then
begin
DrawGrid.Canvas.Brush.Color := clBlack;
DrawGrid.Canvas.FillRect(Rect)
end
else if ModeOfCell[index] = ALREADY_MATCHED then
begin
DrawGrid.Canvas.Brush.Color := clWhite;
DrawGrid.Canvas.FillRect(Rect)
end
else begin
DrawGrid.Canvas.StretchDraw(Rect, Images[ImageOfCell[index]].Picture.Graphic);
end
end;
procedure TfrmMain.DrawGridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
var
index : integer;
begin
index := LinearIndexOf(ARow, ACol);
if ModeOfCell[index] = ALREADY_MATCHED then
exit;
if NumberOfVisibleCells = 0 then
begin
FirstCell := index;
ModeOfCell[FirstCell] := CELL_VISIBLE;
RedrawCell(FirstCell);
inc(NumberOfVisibleCells)
end
else if (NumberOfVisibleCells = 1) and (FirstCell <> index) then
begin
SecondCell := index;
ModeOfCell[SecondCell] := CELL_VISIBLE;
RedrawCell(SecondCell);
if PartnerOf[SecondCell] = FirstCell then
begin
Sleep(100);
ModeOfCell[FirstCell] := ALREADY_MATCHED;
RedrawCell(FirstCell);
ModeOfCell[SecondCell] := ALREADY_MATCHED;
RedrawCell(SecondCell);
NumberOfVisibleCells := 0
end
else
inc(NumberOfVisibleCells)
end
else begin
if (FirstCell <> index) and (SecondCell <> index) then
begin
ModeOfCell[index] := CELL_VISIBLE;
RedrawCell(index);
end;
if FirstCell <> index then
begin
ModeOfCell[FirstCell] := CELL_INVISIBLE;
RedrawCell(FirstCell);
end;
if SecondCell <> index then
begin
ModeOfCell[SecondCell] := CELL_INVISIBLE;
RedrawCell(SecondCell);
end;
FirstCell := index;
NumberOfVisibleCells := 1
end
end;
procedure TfrmMain.Timer1Timer(Sender: TObject);
var
i: integer;
begin
n := 0;
tick:=tick-1;
edit1.text:=inttostr(tick);
if edit1.text='0' then
begin
timer1.Enabled:=false;
Showmessage('GAME OVER');
end;
for i := 0 to 19 do
begin
if ModeOfCell[i] = ALREADY_MATCHED then
n := n + 1;
end;
if n = 20 then
begin
timer1.Enabled:=false;
Showmessage('You Win');
end;
end;
procedure TfrmMain.Exit1Click(Sender: TObject);
begin
close;
end;
end.
Unit2:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, MainUnit, Spin;
type
TForm2 = class(TForm)
RadioGroup1: TRadioGroup;
SpinEdit1: TSpinEdit;
Button1: TButton;
procedure RadioGroup1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SpinEdit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
i: integer;
implementation
{$R *.dfm}
procedure TForm2.RadioGroup1Click(Sender: TObject);
begin
{case RadioGroup1.ItemIndex of
0:
tick := 60;
1:
tick := 45;
2:
tick := 30;
3:
if SpinEdit1.Value <> 0 then
tick := SpinEdit1.Value;
end;
Form2.Hide;
Application.ProcessMessages;
frmMain.Timer1.Enabled := true;
frmMain.RandomizeThePermutationArray;
frmMain.AssignPartnerships;
frmMain.AssignImagesToCells;
frmMain.InitializeCellModes;
NumberOfVisibleCells := 0;
for i := 0 to 19 do
frmMain.RedrawCell(i);}
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0:
tick := 60;
1:
tick := 45;
2:
tick := 30;
3:
if SpinEdit1.Value <> 0 then
tick := SpinEdit1.Value;
end;
Form2.Hide;
Application.ProcessMessages;
frmMain.Timer1.Enabled := true;
frmMain.RandomizeThePermutationArray;
frmMain.AssignPartnerships;
frmMain.AssignImagesToCells;
frmMain.InitializeCellModes;
NumberOfVisibleCells := 0;
for i := 0 to 19 do
frmMain.RedrawCell(i);
end;
procedure TForm2.SpinEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key = '-') then
Key := #0;
end;
end.
Unit3:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, XPMan;
type
TForm3 = class(TForm)
Button1: TButton;
Image1: TImage;
XPManifest1: TXPManifest;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
form3.Close;
end;
end.
Размещено на Allbest.ru
Подобные документы
Создание электронного учебника "Визуальные и не визуальные компоненты Delphi". Основные требования к организации интерфейса. Логическая структура и технические средства. Аппаратно–программный комплекс. Применение программы, тестирование и отладка.
курсовая работа [39,5 K], добавлен 03.12.2012Методика и основные этапы разработки стратегической игры, ее элементы и принцип работы программы. Порядок построения информационной модели. Диаграмма потоков данных и действий. Выбор языка программирования и его обоснование. Критерии качества среды.
курсовая работа [3,5 M], добавлен 11.12.2012Общая характеристика языков программирования. Краткий обзор C, C++, Java, PHP, Python, Delphi и Visual Basic. Процесс разработки программы игра "Крестики и нолики" с помощью AppWizard. Компиляция и компоновка модулей, определение интерфейса приложения.
курсовая работа [2,5 M], добавлен 27.05.2014Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.
курсовая работа [1,5 M], добавлен 17.01.2011История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.
курсовая работа [168,1 K], добавлен 27.09.2013Разработка игры "Угадай персонажа", ее суть и содержание. Запоминание новых персонажей и вопросов, коррекция базы данных. Использование языка программирования С++ и среды разработки Microsoft Visual Studio 2010. Алгоритмы и методы, структура программы.
курсовая работа [571,9 K], добавлен 14.07.2012Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++.
курсовая работа [639,0 K], добавлен 16.03.2012Особенности визуальной среды программирования Microsoft Visual Studio 2015 Enterprise. Средства объектно-ориентированного программирования. Этапы проектирования программного комплекса. Отладка и тестирование программы игры "Виселица".
курсовая работа [2,4 M], добавлен 31.01.2016Выбор состава технических и программных средств для создания данного приложения "Экзаменатор", использование среды разработки Borland Delphi. Основные компоненты и спецификация программы. Используемые технические средства, описание и запуск программы.
курсовая работа [540,8 K], добавлен 18.07.2012Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.
курсовая работа [572,7 K], добавлен 14.07.2012