Особенности работы в среде программирования 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.2014

  • Delphi как среда разработки программ, ориентированных на работу в 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.