Особенности работы в среде программирования Delphi
Delphi - среда быстрой разработки, в которой в качестве языка программирования используется типизированный объектно-ориентированный язык Delphi. Варианты программного пакета. Особенности работы, вид экрана после запуска. Описание структуры программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 25.11.2014 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Оглавление
- Введение
- Глава 1. Работа в Delphi
- Глава 2: Структура программы
- Глава 3. Описание структуры программы
- Заключение
- Рецензия
Введение
Delphi - что это?
В последнее время резко возрос интерес к программированию. Это связано с развитием и внедрением в повседневную жизнь информационно-коммуникационных технологий. Если человек имеет дело с компьютером, то рано или поздно у него возникает желание, а иногда и необходимость, программировать.
Среди пользователей персональных компьютеров в настоящее время наиболее популярно семейство операционных систем Windows и, естественно, что тот, кто собирается программировать, стремится писать программы, которые будут работать в этих системах.
Несколько лет назад рядовому программисту оставалось только мечтать о создании собственных программ, работающих в среде Windows, т.к. единственным средством разработки был Borland C++ for Windows, явно ориентированный на профессионалов, обладающих серьезными знаниями и опытом.
Delphi - это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi - строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.
Существует четыре варианта пакета Borland Delphi 7 Studio: Personal, Professional, Enterprise и Architect. Каждый из этих комплектов включает стандартный набор средств, обеспечивающих разработку высокоэффективных программ различного назначения, в том числе для работы с базами данных. Вместе с тем, чем выше уровень комплекта (от Personal до Architect), тем большие возможности он предоставляет программисту. Так, комплект Enterprise позволяет разрабатывать приложения работы с удаленными базами данных (например, InterBase), а комплект Personal - нет.
Историческая справка
Вряд ли венгерский изобретатель предполагал, что кубик рубик станет наглядным пособием для изучения таких наук, как математика и даже квантовая физика. Мы же просто попытаемся рассказать людям, которые весьма и весьма далеки от научных теорий, алгоритм приведения в порядок перепутанных граней этой головоломки, то есть как собрать кубик рубик.
Для удобства и наглядности восприятия материала необходимо ввести несколько важных обозначений, которые буду в дальнейшем использоваться. Ф - фасадная сторона, Т - тыл, П - правая, Л - левая, В - верх, Н - низ. В процессе сборки фасадная грань может меняться в зависимости от ситуации, а какого цвета она будет - это решение придется принимать самостоятельно. Цвет любой стороны всегда должны определять только центральные кубики, именно к ним необходимо будет присоединять еще восемь секторов того же цвета. В последующем мы будем обозначать их теми же символами, что и грани, только строчными буквами - ф, т, п, л, в, н. Кубики, составляющие ребра головоломки имеют два цвета, поэтому будем обозначать их двумя буквами - фп - фронтальный правый, пв - правый верхний, фн - фронтальный нижний и так далее. Угловые, имеющие три цвета - соответственно фпв, флн
язык программирование delphi программа
Теперь необходимо символизировать операции, которые необходимо будет выполнять в процессе сборки. Самая простая - это поворот грани по часовой стрелке на 90 градусов, обозначим как и сами грани - Ф, П. Л, В, Н, Т. Если предусматривается поворот на 90 градусов, но против часовой стрелки, то это будет выглядеть так: Ф`, П` и т.д. Двойной поворот - Ф2, П2… Но в процессе сборки потребуется перемещать и среднюю грань кубика, еще и с позиции различных сторон. Обозначим этот процесс, например, Сл - поворот среднего слоя со стороны левой грани. Буква О будет означать поворот всего куба, Оп - оборот относительно правой стороны. Можно использовать и матричную запись процесса сборки в виде схем со стрелками, указывающими направление поворота граней.
Определившись с условными обозначениями, можно переходить непосредственно к сборке кубика рубика. Рассмотрим так называемую послойную систему сборки, включающую в себя семь простых этапов.
Этап 1. Необходимо собрать крест верхней грани. Определяем ее цвет по центральному квадрату. Допустим он синего цвета. Теперь нам необходимо со всех сторон подогнать к нему квадраты того же цвета, чтобы получился крест. Находим расположение таких квадратов и поворотами соответствующих граней перемещаем их вниз. После чего, начинаем перемещать нижнюю грань таким образом, чтобы нужный нам сектор оказался под тем местом на верхней грани, куда он должен переместиться. Разворачиваем сторону, где он расположен на 180 градусов, и квадрат устанавливается на свое место на верхней грани. Аналогичным образом подгоняем все четыре квадрата, итог - крест на верхней стороне кубика. Алгоритм действий: Н - П - Ф` - П` или Ф` - Н`с - Ф - Нс.
Этап 2. Попробуем установить на свои места угловые квадраты верхней грани так, чтобы они совпадали одним из цветов с выбранной фасадной стороной. Начинаем обязательно с левого относительно фасада угла. В нашем случае /верхняя сторона синяя/, выбрав за фасад, например, красный цвет /то есть центральный кубик фасада - красный/, нужно в верхнем левом углу поставить квадрат таким образом, чтобы на верхней стороне оказался синий, а на фасадной - красный цвета. Подгоняется это все довольно просто, точно так же как указано в первом этапе. Необходимо следить только за верхним слоем под синей гранью, что происходит в остальных двух - пока Вас не должно беспокоить. Таким образом, полностью собирается верхняя синяя сторона кубика рубика и первый слой под ней, то есть линии верхнего слоя с каждой стороны имеют один и тот же цвет. Поворачиваем верхнюю грань так, чтобы цвета верхнего слоя совпадали с цветами центральных квадратов каждой боковой грани, образуя недорисованную букву "Т". Алгоритм действий: Л - Ф` - Ф` - П` - Н - Л` - Н` - Ф - Н - Н - П - Ф.
Этап 3. Сборка второго пояса. Чтобы перевести квадрат, выведенный на фасадную сторону в нужное место во втором поясе: либо слева либо справа, действие обозначается по начальным буквам На Лево, На Право, то есть НЛ и НП. В этом случае, как и на предыдущих этапах, нужный квадрат сначала отыскивается, затем переводится на сторону Н. Далее Н двигается до совпадения квадрата и той грани, на которой он должен занять место, и, повернув ее, поставить сектор на свое место. Произведя такие операции с каждым квадратом второго пояса, мы получим его полностью собранным по цветам. Алгоритм действий: Н - Л - Н` - Л` - Н` - Ф` - Н - Ф или Н` - П` - Н - П - Н - Ф - Н` - Ф`.
Этап 4. Составление креста на нижней грани. Процесс включает в себя операции по перемещению бортовых граней таким образом, чтобы в конечном результате не нарушился собранный ранее второй пояс кубика. Периодически меняя фасадные грани и повторяя последовательность действий, мы ставим все четыре квадрата нижней грани на сове место. Алгоритм действий: В - Ф - П - В - П` - В` - Ф`.
Этап 5. Ориентирование двух бортовых кубиков фасадной грани. При совершении последовательности операций не стоит бояться, что собранные пояса и верхняя грань изначально разрушаются. /ПСн/4. При правильном окончании процесса ориентирования все вернется на свои места. Алгоритм действий: П - Сн - В/В`, В2/ - /ПСн/4.
Этап 6. Устанавливаем нижние угловые кубики фасадной стороны. Здесь используется восьми - ходовой процесс, чистый алгоритм, позволяющий при нескольких повторениях автоматический установить кубики на свои места. После пятого этапа нетрудно заметить, что хотя бы один из искомых угловых квадратов стал на свое место, то есть все три цвета на нем соответствуют цветам примыкающих граней, хотя и не совпадают с ними. Поверните кубик рубик так, чтобы указанный сектор находится в левом нижнем углу фасадной грани, и производим алгоритмическую последовательность действий столько раз, сколько потребуется, чтобы все нижние угловые квадраты оказались на своих местах. В результате может получиться следующее: либо все они останутся не ориентированными по цвету, либо один - два угловых квадрата окажутся полностью на местах в конечной положении. Алгоритм действий: П` - Ф` - Л` - Ф - П - Ф` - Л - Ф или Ф` - Л` - Ф - П` - Ф` - Л - Ф - П.
Этап 7. Это окончательная ориентация установленных на свои места, но не совпадающих по цвету с прилежащими гранями, нижних угловых квадратов фасадной стороны. И снова он представляет собой неоднократно повторяемый алгоритм действий. При этом не стоит обращать внимание на разрушение уже собранных частей кубика рубика - при правильной последовательности манипуляций с гранями все возвращается на свои места. Ориентируйте кубик рубик в руках таким образом, чтобы квадрат, который нужно развернуть, оказался в правом верхнем углу фасадной грани. И тут снова в работу включается неизменный восьми - шаговый алгоритм действий, разворачивающий квадрат на 1/3 сектора. Если при первой последовательности манипуляций он не стал как надо - алгоритм повторяется. Еще один переворот на 1/3 сектора и последняя грань стала одного цвета. Итог - кубик рубик собран! Алгоритм действий: П - Ф` - П` - Ф - П - Ф` - П` - Ф. Повторяется от одного до трех раз.
Здесь приведен наиболее простой и распространенный способ как собрать кубик рубик. Но уже более 30 с момента его изобретения ученые и обыкновенные любители логических головоломок придумывают все новые и новые алгоритмы сборки. И пока предела этому разнообразию не наступает. Появились даже методы, позволяющие собрать кубик рубик буквально за несколько секунд, независимо от того, в каком хаотическом расположении находится его элементы. Но такие способы сборки требуют колоссального объема памяти и способности к абстрактному мышлению, которые достигаются кропотливыми тренировками или являются природным даром человека.
Глава 1. Работа в Delphi
Запускается Delphi обычным образом, т.е. выбором из меню Borland Delphi 7 команды Delphi 7 (рис.1).
Рис.1. Запуск Delphi
Вид экрана после запуска Delphi несколько необычен (рис.2). Вместо одного окна на экране появляются пять:
· главное окно - Delphi 7;
· окно стартовой формы - Form 1;
· окно редактора свойств объектов - Object Inspector;
· окно просмотра списка объектов - Object TreeView;
· окно редактора кода - Unitl. pas.
Окно редактора кода почти полностью закрыто окном стартовой формы.
Рис.2. Вид экрана после запуска Delphi
В главном окне (рис.3) находится меню команд, панели инструментов и палитра компонентов.
Окно стартовой формы (Forml) представляет собой заготовку главного окна разрабатываемого приложения.
Программное обеспечение принято делить на системное и прикладное. Системное программное обеспечение - это все то, что составляет операционную систему. Остальные программы принято считать прикладными. Для краткости прикладные программы называют приложениями.
Рис.3. Главное окно
Окно Object Inspector (рис.4) - окно редактора свойств объектов предназначено для редактирования значений свойств объектов. В терминологии визуального проектирования объекты - это диалоговые окна и элементы управления (поля ввода и вывода, командные кнопки, переключатели и др.). Свойства объекта - это характеристики, определяющие вид, положение и поведение объекта. Например, свойства width и Height задают размер (ширину и высоту) формы, свойства тор и Left - положение формы на экране, свойство caption - текст заголовка.
Рис.4. На вкладке Properties перечислены свойства объекта и указаны их значения
Рис.5. Окно редактора кода
В окне редактора кода (рис.5), которое можно увидеть, отодвинув в сторону окно формы, следует набирать текст программы. В начале работы над новым проектом это окно редактора кода содержит сформированный Delphi шаблон программы.
Глава 2. Структура программы
Работа над новым проектом, так в Delphi называется разрабатываемое приложение, начинается с создания стартовой формы. Так на этапе разработки программы называют диалоговые окна.
Стартовая форма создается путем изменения значений свойств формы Form1 и добавления к форме необходимых компонентов (полей ввода и вывода текста, командных кнопок).
Свойства формы (табл.1) определяют ее внешний вид: размер, положение на экране, текст заголовка, вид рамки.
Для просмотра и изменения значений свойств формы и ее компонентов используется окно Object Inspector. В верхней части окна Object Inspector указано имя объекта, значения свойств которого отображается в данный момент. В левой колонке вкладки Properties (Свойства) перечислены свойства объекта, а в правой - указаны их значения.
Таблица 1. Свойства формы (объекта mform)
Свойство |
Описание |
|
Name |
Имя формы. В программе имя формы используется для управления формой и доступа к компонентам формы |
|
Caption |
Текст заголовка |
|
Width |
Ширина формы |
|
Height |
Высота формы |
|
Top |
Расстояние от верхней границы формы до верхней границы экрана |
|
Left |
Расстояние от левой границы формы до левой границы экрана |
|
BorderStyle |
Вид границы. Граница может быть обычной (bsSizeable), тонкой (bs Single) или отсутствовать (bsNone). Если у окна обычная граница, то во время работы программы пользователь может при помощи мыши изменить размер окна. Изменить размер окна с тонкой границей нельзя. Если граница отсутствует, то на экран во время работы программы будет выведено окно без заголовка. Положение и размер такого окна-во время работы программы изменить нельзя |
|
Borderlcons Icon Color Font |
Кнопки управления окном. Значение свойства определяет, какие кнопки управления окном будут доступны пользователю во время работы программы. Значение свойства задается путем присвоения значений уточняющим свойствам biSystemMenu, biMinimaze, biMaximaze И biHelp. Свойство biSystemMenu определяет доступность кнопки Свернуть и кнопки системного меню, biMinimaze - кнопки Свернуть, biMaximaze - кнопки Развернуть, biHelp - кнопки вывода справочной информации Значок в заголовке диалогового окна, обозначающий кнопку вывода системного меню Цвет фона. Цвет можно задать, указав название цвета или привязку к текущей цветовой схеме операционной системы. Во втором случае цвет определяется текущей цветовой схемой, выбранным компонентом привязки и меняется при изменении цветовой схемы операционной системы Шрифт. Шрифт, используемый "по умолчанию" компонентами, находящимися на поверхности формы. Изменение свойства Font формы приводит к автоматическому изменению свойства Font компонента, располагающегося на поверхности формы. То есть компоненты наследуют свойство Font от формы (имеется возможность запретить наследование) |
При создании формы в первую очередь следует изменить значение свойства caption (Заголовок).
Аналогичным образом можно установить значения свойств Height и width, которые определяют высоту и ширину формы. Размер формы и ее положение на экране, а также размер других элементов управления и их положение на поверхности формы задают в пикселах, т.е. точках экрана. Свойствам Height и width надо присвоить значения 250 и 330 соответственно.
Форма - это обычное окно. Поэтому его размер можно изменить точно так же, как размер любого другого окна, т.е. захватом и перемещением (с помощью мыши) границы. По окончании перемещения границ автоматически изменятся значения свойств Height и width. Они будут соответствовать установленному размеру формы.
Рис.2. Установка значения свойства путем ввода значения
Положение диалогового окна на экране после запуска программы соответствует положению формы во время ее разработки, которое определяется значением свойств тор (отступ от верхней границы экрана) и Left (отступ от левой границы экрана). Значения этих свойств также можно задать путем перемещения окна формы при помощи мыши.
При выборе некоторых свойств, например, Borderstyle, справа от текущего значения свойства появляется значок раскрывающегося списка. Очевидно, что значение таких свойств можно задать путем выбора из списка (рис.3).
Некоторые свойства являются сложными, т.е. их значение определяется совокупностью значений других (уточняющих) свойств. Перед именами сложных свойств стоит значок "+", при щелчке на котором раскрывается список уточняющих свойств (рис.4). Например, свойство BorderIcons определяет, какие кнопки управления окном будут доступны во время работы программы. Так, если свойству biMaximize присвоить значение False, то во время работы программы кнопки Развернуть в заголовке окна не будет.
Рис.3. Установка значения свойства путем выбора из списка
Рис.4. Раскрытый список вложенных свойств сложного свойства BorderIcons
Рядом со значениями некоторых свойств отображается командная кнопка с тремя точками. Это значит, что для задания значения свойства можно воспользоваться дополнительным диалоговым окном. Например, значение сложного свойства Font можно задать путем непосредственного ввода значений уточняющих свойств, а можно воспользоваться стандартным диалоговым окном выбора шрифта.
В табл.2 перечислены свойства формы разрабатываемой программы, которые следует изменить. Остальные свойства оставлены без изменения и в таблице не приведены.
Таблица В2. Значения свойств стартовой формы
Свойство |
Значение |
|
Caption |
Скорость бега |
|
Height |
250 |
|
Width |
330 |
|
BorderStyle |
bsSingle |
|
BorderIcons. biMinimize |
False |
|
BorderIcons. biMaximize |
False |
|
Font. Size |
10 |
В приведенной таблице в именах некоторых свойств есть точка. Это значит, что надо задать значение уточняющего свойства. После того как будут установлены значения свойств главной формы, она должна иметь вид, приведенный на рис. В15.
Рис. 5. Так выглядит форма после установки значений свойств
События
Событие |
Происходит |
|
OnClick |
При щелчке кнопкой мыши |
|
OnDblClick |
При двойном щелчке кнопкой мыши |
|
OnMouseDown |
При нажатии кнопки мыши |
|
OnMouseUp |
При отпускании кнопки мыши |
|
OnMouseMove |
При перемещении мыши |
|
OnKeyPress |
При нажатии клавиши клавиатуры |
|
OnKeyDown |
При нажатии клавиши клавиатуры. События OnKeyDown и OnKeyPress - это чередующиеся, повторяющиеся события, которые происходят до тех пор, пока не будет отпущена удерживаемая клавиша (в этот момент происходит событие OnKeyUp) |
|
OnKeyUp |
При отпускании нажатой клавиши клавиатуры |
|
OnCreate |
При создании объекта (формы, элемента управления). Процедура обработки этого события обычно используется для инициализации переменных, выполнения подготовительных действий |
|
OnPaint |
При появлении окна на экране в начале работы программы, после появления части окна, которая, например, была закрыта другим окном, и в других случаях |
|
OnEnter |
При получении элементом управления фокуса |
|
OnExit |
При потере элементом управления фокуса |
Листинг 1. Процедура обработки события OnClick на кнопке Button1 (Вычислить)
// нажатие кнопки Вычислить
procedure TForm1. ButtonlClick (Sender: TObject);
var
dist: integer; // дистанция, метров
t: real; // время как дробное число
min: integer; // время, минуты
sek: integer; // время, секунды
v: real; // скорость
begin
// получить исходные данные из полей ввода
dist: = StrToint (Edit1. Text); t: = StrToFloat (Edit2. Text);
// предварительные преобразования
min: = Trunc (t); // кол-во минут - это целая часть числа t
sek: = Trunc (t*100) mod 100;
// кол-во секунд - это дробная часть
// числа t
// вычисление
v: = (dist/1000) / ( (min*60 + sek) /3600);
// вывод результата
label4. Caption: = 'Дистанция: '+ Edit1. Text
+ ' м' + #13 + 'Время: ' + IntToStr (min)
+ ' мин ' + IntToStr (sek) + ' сек ' + #13 +
'Скорость: ' + FloatToStrF (v,ffFixed,4,2) + ' км/час';
end;
Листинг 2. Процедура обработки события Onclick на кнопке Button2 (Завершить)
// нажатие кнопки Завершить
procedure TForm1. Button2Click (Sender: TObject);
begin
Form1. Close; // закрыть главное окно программы
end;
Глава 3. Описание структуры программы
Скриншоты
program kubik;
uses
Forms,
Main in 'Main. pas',
About in 'About. pas' {Form2},
Rules in 'Rules. pas' {Form3},
Resul in 'Resul. pas' {Form4},
OpenF in 'OpenF. pas' {Form1};
{$R *. RES}
begin
Application. Initialize;
Application. CreateForm (TMainF, MainF);
Application. CreateForm (TForm2, Form2);
Application. CreateForm (TForm3, Form3);
Application. CreateForm (TForm4, Form4);
Application. CreateForm (TForm1, Form1);
Application.run;
end.
unit About;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm2 = class (TForm)
Memo1: TMemo;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *. DFM}
end.
{$A+,B-,C+,D+,E-,F-,G+,H+, I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y-,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Buttons, ToolWin, Menus, Grids,About,Rules,Resul, ExtCtrls,OpenF;
type
TMainF = class (TForm)
DrawGrid1: TDrawGrid;
MainMenu1: TMainMenu;
StatusBar1: TStatusBar;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
SpeedButton2: TSpeedButton;
ToolButton2: TToolButton;
SpeedButton3: TSpeedButton;
ToolButton3: TToolButton;
SpeedButton4: TSpeedButton;
ToolButton4: TToolButton;
SpeedButton5: TSpeedButton;
ToolButton5: TToolButton;
SpeedButton6: TSpeedButton;
ToolButton6: TToolButton;
SpeedButton7: TSpeedButton;
ToolButton7: TToolButton;
SpeedButton8: TSpeedButton;
ToolButton8: TToolButton;
SpeedButton9: TSpeedButton;
ToolButton9: TToolButton;
SpeedButton10: TSpeedButton;
Game1: TMenuItem;
New1: TMenuItem;
Load1: TMenuItem;
Save1: TMenuItem;
Restart1: TMenuItem;
Results1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
Play1: TMenuItem;
Undo1: TMenuItem;
Redo1: TMenuItem;
Pause1: TMenuItem;
Help1: TMenuItem;
Rules1: TMenuItem;
About1: TMenuItem;
SpeedButton11: TSpeedButton;
Easy1: TMenuItem;
Normal1: TMenuItem;
Hard1: TMenuItem;
Image1: TImage;
Timer1: TTimer;
procedure Exit1Click (Sender: TObject);
procedure SpeedButton10Click (Sender: TObject);
procedure About1Click (Sender: TObject);
procedure SpeedButton9Click (Sender: TObject);
procedure Rules1Click (Sender: TObject);
procedure DrawGrid1DrawCell (Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
procedure DrawGrid1MouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SpeedButton5Click (Sender: TObject);
procedure Easy1Click (Sender: TObject);
procedure Normal1Click (Sender: TObject);
procedure Hard1Click (Sender: TObject);
procedure DrawGrid1MouseMove (Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure SpeedButton4Click (Sender: TObject);
procedure Restart1Click (Sender: TObject);
procedure SpeedButton7Click (Sender: TObject);
procedure Redo1Click (Sender: TObject);
procedure SpeedButton6Click (Sender: TObject);
procedure Undo1Click (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure SpeedButton11Click (Sender: TObject);
procedure Results1Click (Sender: TObject);
procedure SpeedButton8Click (Sender: TObject);
procedure Timer1Timer (Sender: TObject);
procedure Pause1Click (Sender: TObject);
procedure SpeedButton3Click (Sender: TObject);
procedure Save1Click (Sender: TObject);
procedure SpeedButton2Click (Sender: TObject);
procedure Load1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
st0 = 'Amounts of steps: ';
st1 = 'Time: ';
type
TBestresult = record
Name: string [16];
Time: integer;
Step: integer;
end;
tsav = record
neme: string [10];
stepd: integer;
timed: integer;
mas: array [0.3,0.3] of boolean;
end;
TBestForLevel = array [1.10] of TBestResult;
var
sa: TSav;
named: string;
fild: file of TSav;
MainF: TMainF;
ar,fi,un,re,ka: array [0.3,0.3] of boolean;
aCol,aRow: integer;
nach,moz,mog: boolean;
rect: Trect;
step,g,tep: integer;
ster,nam: string;
FileB: file of TBestforlevel;
Bestforlevel: TBestForLevel;
Bfl: TBestForLevel;
k,m,clok,rest: boolean; // for Pause
ctime: integer;
ti,st: string;
seve: boolean;
implementation
{$R *. DFM}
{запись лучшего результата в файл}
procedure Perebor (n: string);
var
i,k,j: integer;
begin
AssignFile (Fileb,'Best. res');
Reset (FileB);
seek (FileB,g-2);
read (FileB,BestForLevel);
bfl: = BestForLevel;
for i: = 10 downto 1 do begin
if step <= BestForLevel [i]. Step then
begin
k: = i;
for j: = k + 1 to 10 do begin
BestForLevel [j]. Name: = Bfl [j-1]. Name;
BestForLevel [j]. Step: = Bfl [j-1]. Step;
BestForLevel [j]. Time: = Bfl [j-1]. Time;
end;
for j: = 1 to k - 1 do begin
BestForLevel [j]. Name: = Bfl [j]. Name;
BestForLevel [j]. Step: = Bfl [j]. Step;
BestForLevel [j]. Time: = Bfl [j]. Time;
end;
BestForLevel [k]. Name: = n;
BestForLevel [k]. Step: = step;
BestForLevel [k]. Time: = ctime;
seek (FileB,g-2);
write (FileB,BestForLevel);
end;
end;
CloseFile (FileB);
end;
{проверка состояния игры - т. е нет ли выигрыша}
procedure Manipulate (x,y: integer);
var
i,j,kol: integer;
begin
kol: = 0;
for i: = 0 to 3 do
ar [x, i]: = not ar [x, i];
for i: = 0 to 3 do
ar [i,y]: = not ar [i,y];
ar [x,y]: = not ar [x,y];
for i: = 0 to 3 do begin
for j: = 0 to 3 do begin
ka [i,j]: = ar [i,j];
end;
end;
for i: = 0 to 3 do begin
for j: = 0 to 3 do begin
if not ar [i,j] then kol: = kol + 1;
end;
end;
if kol = 16 then begin
if step = 0 then exit;
clok: = false;
MainF. DrawGrid1. Enabled: = false;
MainF. StatusBar1. Panels [0]. Text: =st0+' 0';
MainF. StatusBar1. Panels [1]. text: =st1+IntToStr (0);
if MessageDlg ('Congratulation!!! You finish the Game!!! Will you save your result? ',mtCustom, [mbYes,mbNo],0) =mrYes then
begin
MainF. DrawGrid1. Repaint;
rest: = false;
AssignFile (Fileb,'Best. res');
Reset (FileB);
seek (FileB,g-2);
read (FileB,BestForLevel);
CloseFile (FileB);
if step > BestForLevel [10]. Step then MessageDlg ('Sorry! But your result very small for saving! ',mtCustom, [mbYes],0)
else begin
InputQuery ('Please. ','. Input your Name!!! ',nam);
Perebor (nam);
end;
end
else begin
exit;
end;
end;
end;
{создание новой игры; к - сложность, она выражается в том сколько оперций запутывания игрового поля произойдет при его создании}
procedure NewGame (k: integer);
var
j, i,r,c: integer;
begin
if MainF. SpeedButton8. ParentFont then begin
seve: = true;
step: = 0;
clok: = true;
ctime: = 00;
mog: = false;
moz: = false;
MainF. DrawGrid1. Enabled: = true;
MainF. DrawGrid1. Color: = clBlue;
MainF. DrawGrid1. Repaint;
MainF. StatusBar1. Panels [0]. Text: =st0+' 0';
for i: =1 to 3*k do
begin
r: =random (3);
c: =random (3);
manipulate (c,r);
Mainf. DrawGrid1. Repaint;
end;
for i: =0 to 3 do
begin
for j: =0 to 3 do
begin
fi [i,j]: =ar [i,j];
end;
end;
end;
end;
{выход из приложения}
procedure TMainF. Exit1Click (Sender: TObject);
begin
Close;
end;
{выход из приложения}
procedure TMainF. SpeedButton10Click (Sender: TObject);
begin
Close;
end;
{показывает форму информации о приложении}
procedure TMainF. About1Click (Sender: TObject);
begin
About. Form2. ShowModal;
end;
{показывает форму информации о приложении}
procedure TMainF. SpeedButton9Click (Sender: TObject);
begin
About. Form2. ShowModal;
end;
{показывает форму правил игры}
procedure TMainF.rules1Click (Sender: TObject);
begin
Rules. Form3. ShowModal;
end;
{перерисовка клетки на игровом поле}
procedure TMainF. DrawGrid1DrawCell (Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
begin
with DrawGrid1. Canvas do
begin
if ar [col,row] then Brush. Color: = clTeal
else Brush. Color: = clBlue;
FillRect (Rect);
end;
end;
{перерисовка клетки на игровом поле по клику на ней мышкой}
procedure TMainF. DrawGrid1MouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
a,b: integer;
i,j: integer;
begin
rest: = true;
step: = step + 1;
tep: = step;
str (step: 3,ster);
MainF. StatusBar1. Panels [0]. Text: =st0+ster;
moz: = true;
mog: = false;
DrawGrid1. MouseToCell (x,y,A,B);
for i: = 0 to 3 do begin
for j: = 0 to 3 do begin
un [i,j]: =ar [i,j];
end;
end;
Manipulate (A,B);
Mainf. DrawGrid1. Repaint;
end;
{показывет форму с лучшими результатами}
procedure TMainF. SpeedButton5Click (Sender: TObject);
var
i: integer;
begin
if g = 0 then g: = 2;
if g = 2 then Form4. Label1. Caption: = ' Easy';
if g = 3 then Form4. Label1. Caption: = ' Normal';
if g = 4 then Form4. Label1. Caption: = ' Hard ';
Form4. StrGrid. Cells [0,0]: ='The Name: ';
Form4. StrGrid. Cells [1,0]: ='Steps: ';
Form4. StrGrid. Cells [2,0]: ='Time: ';
AssignFile (Fileb,'Best. res');
Reset (FileB);
seek (FileB,g - 2);
read (FileB,BestForLevel);
for i: = 1 to 10 do begin
Form4. StrGrid. Cells [0, i]: = BestForLevel [i]. Name; // // // //
Form4. StrGrid. Cells [1, i]: = IntToStr (BestForLevel [i]. Step);
Form4. StrGrid. Cells [2, i]: = IntToStr (BestForLevel [i]. Time);
end;
CloseFile (FileB);
Resul. Form4. ShowModal;
end;
{создание новой игры с минимальной сложностью}
procedure TMainF. Easy1Click (Sender: TObject);
begin
g: = 2;
NewGame (g);
end;
{создание новой игры со средней сложностью}
procedure TMainF. Normal1Click (Sender: TObject);
begin
g: = 3;
NewGame (g);
end;
{создание новой игры с максимальной сложностью}
procedure TMainF. Hard1Click (Sender: TObject);
begin
g: = 4;
NewGame (g);
end;
{подменяет курсор при движении по игровому полю во время игры}
procedure TMainF. DrawGrid1MouseMove (Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
DrawGrid1. Cursor: =crHandPoint;
end;
{сбрасывает игровое поле в состояние при начале игры}
procedure Restartf;
var
i,j: integer;
begin
if rest then begin
step: =0;
str (step: 3,ster);
MainF. StatusBar1. Panels [0]. Text: =st0+ster;
moz: = false;
mog: = false;
with MainF. DrawGrid1. Canvas do
begin
for i: =0 to 3 do
begin
for j: =0 to 3 do
begin
ar [i,j]: = fi [i,j];
end;
end;
MainF. DrawGrid1. Repaint;
end;
end;
end;
{сбрасывает игровое поле в состояние при начале игры}
procedure TMainF. SpeedButton4Click (Sender: TObject);
begin
RestartF;
end;
{сбрасывает игровое поле в состояние при начале игры}
procedure TMainF. Restart1Click (Sender: TObject);
begin
RestartF;
end;
{возвращает отмененный с помощью undo ход}
procedure RedoN;
var
i,j: integer;
begin
mog: = true;
step: = step - 1;
tep: = step;
str (step: 3,ster);
MainF. StatusBar1. Panels [0]. Text: =st0+ster;
for i: =0 to 3 do begin
for j: =0 to 3 do begin
re [i,j]: = fi [i,j];
end;
end;
for i: =0 to 3 do begin
for j: =0 to 3 do begin
fi [i,j]: = un [i,j];
end;
end;
RestartF;
for i: =0 to 3 do begin
for j: =0 to 3 do begin
fi [i,j]: = re [i,j];
end;
end;
mog: = true;
step: = tep;
str (step: 3,ster);
MainF. StatusBar1. Panels [0]. Text: =st0+ster;
end;
{отменяет последний ход}
procedure UndoF;
var
i,j: integer;
begin
step: = step + 1;
tep: = step;
str (step: 3,ster);
MainF. StatusBar1. Panels [0]. Text: =st0+ster;
for i: =0 to 3 do begin
for j: =0 to 3 do begin
re [i,j]: = fi [i,j];
end;
end;
for i: =0 to 3 do begin
for j: =0 to 3 do begin
fi [i,j]: = ka [i,j];
end;
end;
RestartF;
for i: =0 to 3 do begin
for j: =0 to 3 do begin
fi [i,j]: = re [i,j];
end;
end;
moz: = true;
step: = tep;
str (step: 3,ster);
MainF. StatusBar1. Panels [0]. Text: =st0+ster;
end;
{возвращает отмененный с помощью undo ход}
procedure TMainF. SpeedButton7Click (Sender: TObject);
begin
if moz then
RedoN;
end;
{возвращает отмененный с помощью undo ход}
procedure TMainF. Redo1Click (Sender: TObject);
begin
if moz then
RedoN;
end;
{отменяет последний ход}
procedure TMainF. SpeedButton6Click (Sender: TObject);
begin
if mog then
UndoF;
end;
{отменяет последний ход}
procedure TMainF. Undo1Click (Sender: TObject);
begin
if mog then
UndoF;
end;
procedure TMainF. FormCreate (Sender: TObject);
var
i: integer;
begin
g: = 2;
seve: = false;
if not FileExists ('best. res') then begin
AssignFile (FileB,'best. res');
Rewrite (FileB);
for i: = 1 to 10 do begin
bestforlevel [i]. name: = 'UnKnown';
bestforlevel [i]. time: = 0;
bestforlevel [i]. step: = 9999;
end;
for i: = 1 to 3 do
write (FileB,Bestforlevel);
CloseFile (FileB);
end;
if not FileExists ('saving. sav') then begin
AssignFile (Fild,'saving. sav');
Rewrite (Fild);
CloseFile (FilD);
end;
Randomize;
end;
{начинает новую игру}
procedure TMainF. SpeedButton11Click (Sender: TObject);
begin
NewGame (g);
end;
{показывет лучшие результаты}
procedure TMainF. Results1Click (Sender: TObject);
var i: integer;
begin
if g = 0 then g: = 2;
if g = 2 then Form4. Label1. Caption: = ' Easy';
if g = 3 then Form4. Label1. Caption: = ' Normal';
if g = 4 then Form4. Label1. Caption: = ' Hard ';
Form4. StrGrid. Cells [0,0]: ='The Name: ';
Form4. StrGrid. Cells [1,0]: ='Steps: ';
Form4. StrGrid. Cells [2,0]: ='Time: ';
AssignFile (Fileb,'Best. res');
Reset (FileB);
seek (FileB,g - 2);
read (FileB,BestForLevel);
for i: = 1 to 10 do begin
Form4. StrGrid. Cells [0, i]: = BestForLevel [i]. Name; // // // //
Form4. StrGrid. Cells [1, i]: = IntToStr (BestForLevel [i]. Step);
Form4. StrGrid. Cells [2, i]: = IntToStr (BestForLevel [i]. Time);
end;
CloseFile (FileB);
Resul. Form4. ShowModal;
end;
{ставит игру на паузу - т. е перекрывет игровое поле картинкой и останавливает время}
procedure Pause;
begin
if MainF. SpeedButton8. ParentFont then begin
MainF. DrawGrid1. Visible: = false;
MainF. Image1. Visible: = true;
MainF. SpeedButton8. ParentFont: = false;
k: = moz;
m: = mog;
moz: = false;
mog: = false;
clok: = false;
rest: = False;
end
else begin
MainF. DrawGrid1. Visible: = true;
MainF. Image1. Visible: = false;
MainF. SpeedButton8. ParentFont: = true;
moz: = k;
mog: = m;
clok: = true;
rest: = true;
end;
end;
{ставит игру на паузу - т. е перекрывет игровое поле картинкой и останавливает время}
procedure TMainF. SpeedButton8Click (Sender: TObject);
begin
Pause;
end;
{считает время с начала текщуей партии}
procedure TMainF. Timer1Timer (Sender: TObject);
begin
if clok then begin
inc (ctime);
StatusBar1. Panels [1]. text: =st1+IntToStr (ctime);
end;
end;
{ствит игру на паузу - т. е перекрывет игровое поле картинкой и останавливает время}
procedure TMainF. Pause1Click (Sender: TObject);
begin
Pause;
end;
{сохраняет текущее состояние игры в файл}
procedure savve;
var
i,j,n: integer;
asa: Tsav;
begin
if seve then begin
clok: = false;
Form1. StringGrid1. RowCount: = Form1. StringGrid1. RowCount + 1;
InputQuery ('Enter the name for your save: ',' Please!!! ',named);
AssignFile (Fild,'Saving. sav');
Reset (Fild);
n: = FileSize (Fild);
i: = n;
seek (Fild,0);
if not n = 0 then begin
for i: =0 to n do begin
j: = i;
seek (FilD, i);
read (Fild,sa);
if sa. neme = named then begin
InputQuery ('The save with this name already exist! ','Input another name: ',named);
if sa. neme = named then j: = n+1;
Break;
end;
end;
end;
if i = n then seek (Fild,FileSize (Fild));
if j = n + 1 then seek (Fild, i);
asa. neme: = named;
asa. stepd: = step;
asa. timed: = ctime;
for i: = 0 to 3 do begin
for j: = 0 to 3 do begin
asa. mas [i,j]: = ar [i,j];
end;
end;
write (Fild,asa);
CloseFile (Fild);
clok: = true;
end;
end;
{загружает игру из файла}
procedure lodde;
var
i,n,j: integer;
a,b,k: integer;
l: string;
begin
AssignFile (Fild,'saving. sav');
Reset (Fild);
k: = FileSize (Fild);
Form1. StringGrid1. RowCount: = k;
CloseFile (Fild);
clok: = false;
AssignFile (Fild,'saving. sav');
Reset (Fild);
n: = FileSize (Fild);
if n = 0 then exit;
seek (Fild,0);
for i: = 0 to n-1 do begin
read (Fild,sa);
form1. StringGrid1. Cells [0, i]: = sa. neme;
end;
Form1. ShowModal;
seek (Fild,y1);
read (FilD,sa);
if sa. neme <> '' then begin
step: = sa. stepd;
ctime: = sa. timed;
for i: = 0 to 3 do begin
for j: = 0 to 3 do begin
ar [i,j]: = sa. mas [i,j];
fi [i,j]: = ar [i,j];
end;
end;
seve: = true;
MainF. StatusBar1. Panels [0]. Text: = st0+' '+ IntToStr (step);
MainF. DrawGrid1. Repaint;
MainF. DrawGrid1. Enabled: = true;
end;
CloseFile (Fild);
clok: = true;
end;
{сохраняет текущее состояние игры в файл}
procedure TMainF. SpeedButton3Click (Sender: TObject);
begin
savve;
end;
{сохраняет текущее состояние игры в файл}
procedure TMainF. Save1Click (Sender: TObject);
begin
savve;
end;
{загружает игру из файла}
procedure TMainF. SpeedButton2Click (Sender: TObject);
begin
lodde;
end;
{загружает игру из файла}
procedure TMainF. Load1Click (Sender: TObject);
begin
lodde;
end;
end.
unit OpenF;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids;
type
TForm1 = class (TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Label2: TLabel;
procedure StringGrid1MouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StringGrid1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x1,y1: integer;
implementation
{$R *. DFM}
procedure TForm1. StringGrid1MouseDown (Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StringGrid1. MouseToCell (x,y,x1,y1);
end;
procedure TForm1. StringGrid1Click (Sender: TObject);
begin
close;
end;
end.
unit Resul;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls;
type
TForm4 = class (TForm)
StrGrid: TStringGrid;
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *. DFM}
end.
unit Rules;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm3 = class (TForm)
Memo1: TMemo;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *. DFM}
end.
[Compiler]
A=1
B=0
C=1
D=1
E=0
F=0
G=1
H=0
I=1
J=1
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=0
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows; WinProcs=Windows; DbiTypes=BDE; DbiProcs=BDE; DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
SearchPath=
Packages=VCLX30; VCL30; VCLDB30; VCLDBX30; INETDB30; INET30; VCLSMP30; QRPT30; TEEUI30; TEEDB30; TEE30; DSS30; IBEVNT30
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1049
CodePage=1251
[Version Info Keys]
CompanyName=
FileDescription=
FileVersion=1.0.0.0
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=1.0.0.0
Comments=
Заключение
Я считаю, что при выполнении своей работы я достигла поставленной цели по разработке и введению в действие программы, написанной на языке Delphi.
Все задачи мною решены:
ь разработана структура моей программы.
ь в необходимом объеме самостоятельно освоены нужные программы: Delphi.
ь оформление удовлетворяет основным требованиям;
Программа протестирована.
В дальнейшем я хотела бы более подробно изучить язык программирования Delphi и еще какие-нибудь интересные языки, как Java, C++, и создать более интересные программы, а если быть более точным - игру для мобильного телефона.
Список используемой литературы
1. Самоучитель Delphi, Максим Кузнецов, Игорь Симдянов.560 стр., 2004 г. Издательство: BHV.
2. Самоучитель Delphi 4, Д. Котеров. Издательство - БХВ-Петербург Год издпния - 1/1/2001
3. Самоучитель Delphi 5. Колисниченко Д.Н., Наука и техника - 2005, 567 стр.
4. Фленов М.Е. Библия Delphi
5. Ковтанюк Ю.С. Программирование на Turbo Pascal
6. Ремнев Анатолий Курс Delphi для начинающих. Полигон нестандартных задач
Рецензия
На протяжении этого года работы с этой ученицей я отмечала повышенный интерес Вероники к программированию. Успешно изучив алгоритмический язык Pascal, она продолжила изучение других языков программирования, проявляя самостоятельность и творческий подход к делу.
Больших успехов Вероника достигла в изучении PHP и Delphi. У нее есть несколько самостоятельно написанных работ на этом языке.
Отличительной особенностью работы Мермер Вероники является ее телекоммуникационная направленность, обеспечивающая досуг и общение между одноклассниками по средствам игры. Такая возможность становится особенно важной после завершения учебы в школе.
Для разработки этой игры автор работы освоила в необходимом объеме такой язык программирования, как Delphi и протестировала эту игру.
Нет сомнения, что данная работа будет интересна всем, кто с помощью Delphi хочет организовать общение между друзьями.
Размещено на Allbest.ru
Подобные документы
Предмет объектно-ориентированного программирования и особенности его применения в средах Паскаль, Ада, С++ и Delphi. Интегрированная среда разработки Delphi: общее описание и назначение основных команд меню. Процедуры и функции программы Delphi.
курсовая работа [40,8 K], добавлен 15.07.2009Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.
курсовая работа [1,2 M], добавлен 04.08.2014Delphi как среда разработки программ, ориентированных на работу в Windows. Назначение и преимущество использования электронных учебников. Описание возможностей среды Delphi 5 для разработки электронного учебника. Варианты применения служб Internet.
дипломная работа [3,6 M], добавлен 13.07.2011Основные приемы работы в среде программирования Delphi. Особенности технологии создания простейших приложений. Работа с компонентами среды разработки приложений. Ввод, редактирование, выбор и вывод информации. Аспекты использования структуры ветвления.
методичка [619,9 K], добавлен 17.11.2011Особенности создания программы "Файловый менеджер" в среде объектно-ориентированного программирования Delphi. Назначение и основные функции программы, формулировка задачи. Описание программы, использованные компоненты, интерфейс и порядок применения.
контрольная работа [1,3 M], добавлен 19.06.2012Рассмотрение теории и технологии работы со средой программирования Delphi. Описание Описание интерфейса программы, структуры данных, генерации точек. Разработка задания по выявлению всех квадратов, которые могут быть образованы точками на плоскости.
реферат [21,0 K], добавлен 13.01.2015Характеристика системы программирования. Главные составные части Delphi. Интерфейс программного приложения. Результаты работы программы. Руководство системного программиста и оператора. Язык программирования Delphi, среда компилятора Borland 7.0.
курсовая работа [1,6 M], добавлен 29.05.2013Изучение общей структуры языка программирования Delphi: главные и дополнительные составные части среды программирования. Синтаксис и семантика языка программирования Delphi: алфавит языка, элементарные конструкции, переменные, константы и операторы.
курсовая работа [738,1 K], добавлен 17.05.2010История развития, характеристика, предназначение и особенности языка программирования Delphi. Разработка проекта создания кроссворда на объектно-ориентированном языке Delphi, который состоит из 19 вопросов по горизонтали и 16 вопросов по вертикали.
курсовая работа [970,5 K], добавлен 15.05.2014Анализ исходных данных. Определение структуры модуля для работы файлом. Разработка объектно-ориентированного приложения, использующего массив объектов, в среде Delphi. Модульная структура программного комплекса. Процедура сортировки методом вставки.
курсовая работа [2,2 M], добавлен 20.09.2014