--PAGE_BREAK-- 1.1 Компонент TMainMenu
TMainMenu позволяет поместить главное меню в программу. При помещении TMainMenu на форму это выглядит, как просто иконка. Иконки данного типа называют невидимым (невизуальным) компонентом, поскольку они невидимы во время выполнения программы. Создание меню включает три шага:
1) помещение TMainMenu на форму,
2) вызов Дизайнера Меню через свойство Items в Инспекторе Объектов,
3) определение пунктов меню в Дизайнере Меню.
Этот компонент доступен из модуля MENUS, и находится на странице Палитры компонентов Standard
Этот компонент представляет главное меню формы и наследует все методы и свойства TMenu. Особенность его в том, что в нем реализован сложный механизм объединения меню. Это необходимо по следующим причинам:
1. Если в приложении имеется несколько форм со своими меню, то для упрощения работы целесообразно соединить их в одно и управлять меню из главной формы.
2. Объединение меню нужно при работе с интерфейсом MDIи его подокнами.
3. Механизм объединения меню используется серверами OLE, запускаемыми по месту нахождения объекта OLE. Загружаясь, сервер дописывает осуществляемые им операции к меню другого приложения.
Для того чтобы реализовать объединение меню, у тех форм, меню которых будут присоединены к главному, необходимо установить в Trueсвойство: (Рb
)
property
AutoMerge
:
Boolean
.
При этом у главного меню оно должно оставаться равным False, иначе главное меню будет вообще невидимым. Объединение будет происходить автоматически при активизации новых форм или серверов OLE. Кроме автоматического режима, объединение меню можно выполнить при вызове метода: procedure
Merge
(
Menu
:
TMainMenu
).
1.2 Компонент TLabel
TLabel служит для отображения текста на экране. Можно изменить шрифт и цвет метки, если дважды щелкнуть на свойство Font в Инспекторе Объектов. Видно, что это легко сделать и во время выполнения программы, написав всего одну строчку кода.
Этот компонент доступен из модуля STDCTRLS, и находится на странице Палитры компонентов Standard[2].
Компонент представляет собой статический текст. С помощью этого компонента на рабочей поверхности формы можно отобразить информацию, сделать пояснения и показать названия других компонентов. Но он имеет и другую важную функцию — если в составе текста TLabelесть символы-акселераторы, информация об их нажатии может передаваться от TLabelдругому элементу управления.
Свойства компонента приведены в таблице 1:
Таблица 1 — Свойства компонента TLabel
Свойство
Описание
(Pb) property Caption: TCaption; TCaption = string[255];
Содержит строку с выводимым текстом.
(Pb) property Alignment: TAlignment;
Устанавливает правило выравнивания текста — по правому, левому краю или по центру клиентской области.
(Pb) property AutoSize: Boolean;
В случае Trueпроисходит автоматическое приведение размеров компонента к размерам текста и высоте шрифта.
(Pb) property FocusControl: TWinControl;
Определяет оконный компонент, которому посылаются сообщения о вводе акселератора.
(Pb) property Transparent: Boolean;
Прозрачность фона компонента. Если свойство установлено в True, то при перерисовке элемента управления не происходит закрашивание клиентской области. В противном случае — происходит закрашивание кистью bsSolidи цветом Color.
(Pb) property WordWrap: Boolean;
Определяет возможность разрыва слов в случае, если длина выводимого текста превышает ширину компонента.
продолжение
--PAGE_BREAK--1.3 Компонент TPanel
TPanel— управляющий, похожий на TGroupBox, используется в декоративных целях. Чтобы использовать TPanel, просто поместите его на форму и затем положите другие компоненты на него. Теперь при перемещении TPanel будут передвигаться и эти компоненты. TPanel используется также для создания панели инструментов и окна статуса.
Этот компонент доступен из модуля EXTCTRLS, и находится на странице Палитры компонентов Standard.
Этот компонент — является несущей конструкцией для размещения других элементов управления. В отличие от простой рамки (TBevel) панель сама является оконным элементом управления и родителем для всех размещенных на ней компонентов. Часто ее используют для создания панелей инструментов, строк состояния и т. п.
За внешнее оформление панели отвечают свойства:
(Pb) property Bevel Inner: TPanelBevel;
(Рb) property BevelOuter: TPanelBevel;
TPanelBevel = (bvNone, bvLowered, bvRaised) ;
(Pb) property BevelWidth: TBevelWidth;
TBevelWidth = 1..Maxint;
(Pb) property BorderWidth: TBorderWidth;
TBorderWidth = 0..Maxint ;
На границах панели размещаются две специальные окаймляющие рамки (bevels): Bevellnnerи BevelOuter. При помощи комбинации белого и серого цветов они имитируют трехмерность — приподнятость (bvRaised) или утоп-ленность (bvLowered). Обе рамки имеют ширину BevelWidth. Наружная — BevelOuter— расположена прямо по периметру панели, вторая — Bevellnner— внутри на расстоянии BorderWidthот нее. Обе могут быть невидимыми (bvNone), приподнятыми или утопленными[3].
Комбинируя сочетания bvLowered/bvRaised, можно создать вокруг панели «ров» или «вал».
Иллюзию трехмерности может подчеркнуть также стиль обрамления компонента:
(Pb) property BorderStyle: TBorderStyle;
TBorderStyle = bsNone… bsSingle;
Значение bsSingleозначает, что панель будет окаймлена черной линией единичной толщины (по периметру, снаружи от обеих рамок).
Выравнивание текста заголовка панели определяется при помощи свойства:
(
Pb
)
property
Alignment
:
TAlignment;
1.4 Компонент TImage
TImage — отображает графическое изображение на форме. Воспринимает форматы BMP, ICO, WMF. Если картинку подключить во время дизайна программы, то она прикомпилируется к EXE файлу.
Этот компонент доступен из модуля EXTCTRLS, и находится на странице Палитры компонентов Additional.
Этот компонент служит надстройкой над классом TPictureи замыкает всю иерархию графических объектов VCL. Он предназначен для показа на форме изображения: битовой карты (TBitmap), метафайла (TMetafile), значка (TIcon).
Свойство (Pb
)
property
Picture
:
TPicture; служит контейнером для графического объекта одного из перечисленных классов.
В качестве канвы используется канва объекта Picture. Graphic— только если поле Graphicссылается на объект класса TBitmap:
(
Pb
)
property
Canvas
:
TCanvas
;
Если это не так, то попытка обращения к свойству вызовет исключительную ситуацию EInvalidOperation, так как рисовать на метафайле или значке нельзя.
Следующие три свойства определяют, как именно Tpictureрасполагается в рабочей области компонента:
(
Pb
)
property
AutoSize
:
Boolean
;
— означает, что размеры компонента настраиваются по размерам содержащегося в нем графического объекта. Устанавливать его в Trueнужно перед загрузкой изображения из файла или буфера обмена;
(
Pb
)
property
Stretch
:
Boolean
;
— если это свойство установлено в True, то изображение «натягивается» на рабочую область, при необходимости уменьшая или увеличивая свои размеры. Если оно установлено в False, то играет роль следующее свойство;
(
Pb
)
property
Center
:
Boolean
;
— если это свойство установлено в True, изображение центрируется в пределах рабочей области. В противном случае — располагается в ее верхнем левом углу.
продолжение
--PAGE_BREAK--
2 Разработка программы 2.1 Постановка задачи
Разработать игровую программу «Морской бой», которая включает игровую панель, состоящую из двух полей для человека и компьютера. На поле расставляются 10 кораблей разного класса. Четыре корабля размером в одну ячейку, три корабля размером в две ячейки, два корабля размером в три ячейки, и один корабля размером в четыре ячейки. Поочередно противникам предоставляется возможность выстрела по чужому полю, результаты которого отображаются на нем. При попадании в корабль предоставляется возможность дополнительного выстрела. Победа присуждается игроку, потопившему все корабли противника.
Справочная информация содержит правила игры и автора работы.
Алгоритм реализации работы
2.2 Алгоритм реализации игровой программы
Запуск программы осуществляется следующим образом: необходимо открыть папку, содержащую данную игру, и найти исполняемый файл morb
.
exe. На этом файле следует выполнить двойной щелчок левой клавишей манипулятора мышь.
Проект программы состоит из файла проекта, содержащего необходимые конструкции для исполнения, и двух модулей Unit1 и Unit2 .
Модуль Unit2 предназначен для вывода окна, содержащего информацию о программе и об авторе.
Модуль Unit1 является основным модулем проекта, содержащим все необходимые для работы программы процедуры.
После запуска программы на экран выводится основная форма Form1 (рис.2), на которой расположены следующие объекты:
Рисунок 2 – Вид программы после запуска
Игра, т. е. работа программы начинается сразу после запуска, так же при запуске начинается случайная расстановка кораблей компьютера (См. приложение А). (процедура FormCreate)
Каждое из полей (игрока и компьютера) представляет собой матрицу 10 на 10 в самом начале заполненную нолями. К тому же поля как игрока так и компьютера представляют собой картинку которая изменяется при том или ином действии.
Расстановка кораблей противника происходит от 4х палубного к одно палубному.
Координаты четырехпалубного корабль выбираются случайно(переменная mи переменная n) случайно лишь с условием того чтобы он не выходил за границы поля при этом выбирается случайное горизонтальное или вертикальное положение (переменная z). При этом координаты корабля помечаются цифрами «2» в матрице.
Трехпалубные и двухпалубные корабли расстанавливаются, точно также только дополнительно идет сравнение на пересечение и соприкосновение кораблей друг с другом.
Однопалубным кораблям незачем проверка выхода за границы поля, поэтому проверка происходит только на пересечение и соприкосновение.
К тому же расстановка трехпалубных кораблей происходит в цикле до тех пор пока не будет расстановлено два корабля, двухпалубные – пока не буду расстановлены три корабля, и однопалубные – пока не будут расстановлены четыре корабля.
Первоначально на форму выводится сообщение «Расставьте корабли», это означает, что игроку следует расставить свои корабли перед началом работы.
Процедура rastkor.
При передвижении мыши по полю игрока ячейкам матрицы (в зависимости от расстанавливаемого корабля) присваивается значение 1. При этом при каждом изменении происходит прорисовка матрицы, для того чтобы пользователь мог видеть происходящие изменения.
При изменении ячейка матрицы со значением «0» рисуется белым квадратом, со значением «1» желтым.
При нажатии правой клавиши мыши происходит ротация корабля, проверка на ротацию происходит перед движением мыши.
Расстановка корабля происходит по нажатии левой клавиши мыши на поле игрока.
Процедура nash
Расстановка происходит лишь в том случае если расстанавливаемый корабль не выходит за рамки поля, не пересекается и не соприкасается не с одним из расстанавливаемых кораблей.
Также каждый из кораблей расстанавливается в зависимости от количества его палуб, т.е. четырехпалубный – один, трехпалубных – два, двухпалубных – три, однопалубных – четыре.
При этом ячейке матрицы поля игрока присваивается значение «2». После каждого нажатия происходит прорисовка поля игрока, для этого каждая ячейка с цифрой «2» закрашивается серым.
После того как все корабли расставлены (k11
Процедура vistrel.
Выстрел производится при нажатии на одну из клеток поля компьютера. Если ячейка имеет значение «0»(пустая клетка) то ячейке присваивается значение «3», ячейка имеет значение «2» то ячейке присваивается значение «4».
Затем происходит прорисовка поля компьютера. Клетка которой соответствует ячейка со значением «3» рисуется маленький квадрат, клетка которой соответствует ячейка со значением «4» проверяется ранен или убит корабль если убит то рисуется красный квадрат, если ранен то рисуется серый квадрат перечеркнутый красным крестом.
После происходит проверка выиграл ли игрок или нет, для этого матрица компьютера сканируется и если не находится ни одной ячейки со значением «2» то выходит сообщение –
«Поздравляю! Вы победили.»
Если не находится то проверяется если игрок опал в ячейку со значением «2» то ему предоставляется ещё один выстрел, и т. д. пока игрок не попадет в ячейку со значением «0».
Тогда наступает очередь хода компьютера.
Компьютер выбирает произвольную клетку из поля игрока и если её значение равно «0» то значение становится равным «3», если значение равно «2» от значение клетки становится равным «4».
Затем происходит прорисовка поля компьютера. Клетка, которой соответствует ячейка со значением «3» рисуется маленький квадрат, клетка, которой соответствует ячейка со значением «4» проверяется, ранен или убит корабль, если убит то, рисуется красный квадрат, если ранен то, рисуется серый квадрат, перечеркнутый красным крестом.
Компьютер стреляет, до тех пор пека не попадет, в клетку со значением «0».
После происходит проверка проиграл ли игрок или нет, для этого матрица игрока сканируется и если не находится ни одной ячейки со значением «2» то выходит сообщение –
«Вы проиграли.
Попробуйте ещёраз!»
Более подробно смотрите исходный текст программы Приложение 1.
продолжение
--PAGE_BREAK--