Объектный подход реализации программных систем
Объектный подход как метод реализации программных систем. Проектирование и программная реализация стратегической системы, реализующей процессы создания и взаимодействия группы объектов. Разработка объектной модели. Назначение элементов интерфейса.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 11.05.2012 |
Размер файла | 4,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство Образования и науки Украины
Севастопольский национальный технический университет
Кафедра ИС
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту
на тему: “Объектный подход реализации программных систем”
по дисциплине "Объектно-ориентированное программирование"
Выполнили: Ст. гр. И-33д
Тихонов А.А., Костенко К.А.
Проверила:
Сметанина Т. И.
Севастополь 2011
Содержание
- Введение
- 1. Список исполнителей
- 2. Постановка задачи
- 3. Проектное решение (разработка объектной модели)
- 3.1 Абстрагирование и выделение объектов
- 3.2 Построение иерархии классов
- 3.3 Построение информационной модели
- 3.4 Описание жизненного цикла программы
- 3.5 Диаграмма переходов состояний
- 3.6 Диаграмма потоков данных и действий
- 3.7 Описание классов
- 3.8 Блок-схема основной программы
- 3.9 Блок-схема алгоритма игрового процесса
- 4. Программная реализация
- 4.1 Среда разработки
- 4.2 Описание программы
- 4.3 Критерии качества
- 4.4 Интерфейс пользователя
- 4.4.1 Введение
- 4.4.2 Описание назначение элементов интерфейса
- Заключение
- Библиографический список
- Приложение
Введение
Как известно, объектный подход - один из современных методов реализации программных систем (ПС). Наиболее показательна эффективность применения объектного подхода для больших ПС, со сложным характером взаимодействия значительного количества элементов.
Исследованиям этих вопросов и посвящена настоящая курсовая работа.
Тематика курсовой работы продиктована популярностью динамических моделей реального времени. Так как рассматриваемые модели учитывают влияние многих факторов на многие элементы системы, то разработка таких систем требует от проектировщика продуманных шагов и взвешенных решений.
Таким образом, цель настоящей курсовой работы - детальное проектирование и программная реализация стратегической системы, которая в соответствии с заданным вариантом реализует процессы создания и взаимодействия группы объектов.
Однако следует заметить, что преимущества объектно-ориентированного программирования в полной мере проявляются лишь при разработке достаточно сложных программ.
Объектно-ориентированный подход помогает справиться с такими сложными проблемами, как
уменьшение сложности программного обеспечения;
повышение надежности программного обеспечения;
обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;
обеспечение возможности повторного использования отдельных компонентов программного обеспечения.
Систематическое применение объектно-ориентированного подхода позволяет разрабатывать хорошо структурированные, надежные в эксплуатации, достаточно просто модифицируемые программные системы. Этим объясняется интерес программистов к объектно-ориентированному подходу и объектно-ориентированным языкам программирования. Объектно-ориентированный подход является одним из наиболее интенсивно развивающихся направлений теоретического и прикладного программирования.
1. Список исполнителей
Тихонов Алексей Анатольевич:
Разработка алгоритма основной программы
Разработка алгоритма игрового процесса
Реализация процедур запуска форм, отображающих игровой процесс, как с буквами, так и цифрами.
Реализация процедуры ReloadPole, которая отвечает за создание игрового поля и заполнения его элементами заданного массива.
Реализация процедуры FormCreate, отвечающей за создание и указание позиции окна, отображающего игровой процесс.
Реализация процедуры go, которая подсчитывает количество ходов.
Реализация процедуры ChekPole - проверка правильности выложенной последовательности.
Костенко Кирилл Александрович:
Разработка дизайна программы
Реализация процедуры Image1Click, которая осуществляет передвижение ячейки, содержащей значение последовательности, при нажатии на него левой кнопкой мыши.
Реализация процедуры SwitchCkick, которая позволяет пользователю изменить управление с мыши на клавиатуру и обратно.
Реализация процедуры FormKeyDown - отвечает за обозначение клавиш стрелок клавиатуры за управляющие, при игре на клавиатуре.
Реализация процедуры Direction - определяет направление перемещения ячейки в зависимости от пустой.
Реализация процедуры ResetClick - заново выполняет заполнение игрового поля элементами массива случайным образом.
объектный подход модель интерфейс
2. Постановка задачи
Целями курсового проектирования является изучение современного подхода к программированию на основе объектно-ориентированной технологии, приобретение навыков написания программ на языке с поддержкой ООП (С++, Java и Object Pascal) на примере написания программы согласно варианту задания.
Для достижения цели на разных этапах курсового проектирования должны
быть решены следующие задачи:
выбор варианта задания и языка реализации, детализация поставки задачи;
абстрагирование, разработка классов и их иерархии;
написание текста разработанных классов на выбранном языке;
тестирование и отладка программы;
разработка программных документов в соответствии с действующими стандартами.
По окончанию курса студенты должны овладеть объектно-ориентированным подходом решения практических задач, овладеть инструментами, сопровождающими разработку программных систем с использованием этого подхода. Существует множество объектов различного вида и типа, которые взаимодействуют между собой. Задача: перемещая и комбинируя определенным образом объекты, необходимо добиться заданного графически ожидаемого результата. Достижение результата представляется возможным в случае единственно правильного расположения и взаимодействия используемого множества объектов. Системными требованиями для данной курсовой работы является наличие операционной системы Windows 9x/Me/2000/XP/Vista/7, мышки и видеоадаптера.
3. Проектное решение (разработка объектной модели)
3.1 Абстрагирование и выделение объектов
В этом разделе описываются объекты, которые фигурируют в программе и то как они взаимодействуют друг с другом.
Описание объектов:
Игровое поле - поле, в котором отображаются ячейки, заполненные элементами массива случайным образом, поле, где происходят все действия.
Пустое поле - пустое поле, простой объект, за счет которого другие объекты могут перемещаться по игровому полю.
Поле с символом - объект, который содержит символ. Такими объектами заполнено все игровое поле. С такими объектами непосредственно взаимодействует пользователь, перемещает их, пытаясь выстроить их в последовательность.
3.2 Построение иерархии классов
В данном случае имеется один абстрактный класс, в котором описаны несколько процедур, они же используются основным классом. Объекты которого, в свою очередь используют классы, в которых содержатся объекты игрового процесса.
Иерархическая система данного продукта представлена на рисунке 3.1.
Рисунок 3.1 - Иерархия классов
3.3 Построение информационной модели
Информационная модель содержит в себе основные объекты и то, как они взаимодействуют друг с другом. Всё это представлено на рисунке 3.2
Рисунок 3.2 - Информационная модель
Связь - это набор отношений, которые систематически возникают при взаимодействии объектов. Поскольку в качестве способа представления объекта был выбран текстовый подход, то при изображении связей в качестве звеньев отображаются объекты без указания их атрибутов.
Связь R1 - типа один к одному. Игровое поле взаимодействует только с пустым полем. Связь формализована посредством одномерного целочисленного массива, в котором содержатся номера ячеек содержащих строковый порядковый номер ячейки.
Связь R2 - типа один ко многим. Пустое поле может взаимодействовать с полями, заполненными с символами, которые находятся рядом с ним.
Связь R3 - типа один к одному. Поле с символом взаимодействует с игровым полем.
Связь R4 - типа один к одному. Пустое поле взаимодействует с игровым полем.
Связь R5 - типа один к одному. Поле с символом взаимодействует с пустым полем.
Связь R6 - один ко многим. Игровое поле взаимодействует с полями, заполненными символами.
Действие начинается с создания случайной последовательности ячеек, содержащих символы численной последовательности, а так же буквенной, из которых в последствие нужно будет собрать правильную последовательность.
А специальный счетчик подсчитывает количество ходов, за которое пользователь собрал правильную последовательность.
3.4 Описание жизненного цикла программы
На рисунке 3.3 представлена диаграмма жизненного цикла данного основного игрового процесса.
Рисунок 3.3 - Диаграмма жизненного цикла игрового процесса
Как только начинается игра, программа ожидает совершения пользователем хода. После того, как пользователь сделал ход, программа ищет пустой элемент на игровом поле, и в зависимости от того, с какой ячейкой взаимодействовал пользователь, делает её перемещение.
Если ячейка находилась над пустой, то она соответственно движется вниз, занимая её место. По такому же принципу совершаются перемещения других ячеек, в зависимости от их расположения относительно пустой ячейки.
После каждого хода выполняется проверка на правильность выложенной последовательности.
В любое время пользователь может начать игру заново. Игровое поле заново заполнится случайными элементами.
3.5 Диаграмма переходов состояний
Модель состояния объектов или системы состоит из диаграммы переходов состояний (ДПС), а также из описания каждого звена на этой ДПС.
Модели состояний объектов выражают описание жизненного цикла объектов, то есть являются формальным описанием поведения объектов.
Каждая диаграмма состояний описывает все возможные состояния одного экземпляра определенного класса и возможные последовательности его переходов из одного состояния в другое, то есть моделирует все изменения состояний объекта как его реакцию на внешние воздействия.
Диаграмма состояний является графом специального вида, который представляет некоторый автомат. Вершинами графа являются возможные состояния автомата, изображаемые соответствующими графическими символами, а дуги обозначают его переходы из состояния в состояние. Диаграммы состояний могут быть вложены друг в друга для более детального представления отдельных элементов модели.
Диаграмма переходов состояний изображена на рисунке 3.4.
Рисунок 3.4 - Диаграмма переходов состояний игрового процесса
3.6 Диаграмма потоков данных и действий
Диаграмма потоков данных - это граф, на котором показано движение значений данных от их источников через преобразующие их процессы к их потребителям в других объектах.
Основные компоненты ДПДД:
внешние сущности, представляющее собой источник или приемник информации;
процессы преобразования входных данных в выходные в соответствии с определенным алгоритмом;
накопители данных, в которые можно помещать и извлекать информацию;
поток данных, определяющий информацию, передаваемую через некоторое соединение от источника к приемнику.
Такая диаграмма для данной программы изображена на рисунке 3.5.
Рисунок 3.5 - Диаграмма потоков данных и действий
3.7 Описание классов
В качестве отправной точки для создания пятнашек служат классы TIntro, TMian и TMain1, первый из которых описывает характеристики объектов, содержащихся в главном и двух игровых окнах. Ссылки на объекты, описанные в этом классе, есть в классах TMain и TMain1.
В классах TMain и TMain1 заданы массивы, содержащие последовательности, которыми поочередна заполняются ячейки пятнашек, а так же переменные, хранящие положение выделенной ячейки при игре на клавиатуре.
Класс TIntro:
WinText{При победе выводит сообщение на экран}
WholestepsText{Считает количество шагов, сделанных игроком}
Playkeyb{Индикатор для переключения на клавиатуру}
Playmouse{ индикатор для переключения на мышь}
Методы класса TIntro:
procedure Play - открывает форму, в которой реализована игра с последовательностью чисел.
procedure Play2 - открывает форму, в которой реализована игра с последовательностью букв.
procedure TIntro. FormCreate - отвечает за положение открывающейся формы. В данном случае по центру экрана.
Среди полей класса TMain можно выделить следующие:
Pjat: array [1.16] of integer;
steps, keybpos: integer;
keyb: string;
Есть массив, хранящий в себе ссылки на принадлежащие ему объекты, и соответственно имеющий к ним доступ посредством методов своего класса, а те в свою очередь обращаются к методам объектов типа TMain и TMain1.
Методы класса TMain:
procedure startpjat () - Задает массив, который в случайном порядке заполняет ячейки пятнашек.
procedure ReloadPole - Создает игровое поле и поля для заполнения случайными значениями из массива с помощью прямоугольников.
function CheckPole - Проверка правильности выложенной последовательности.
procedure TMain. FormCreate - отвечает за положение открывающейся формы. В данном случае по центру экрана. Так же выполняет заполнение ячеек значениями из массива и задает позицию выделенной ячейки при игре на клавиатуре.
procedure TMain. ResetClick - заново выполняет заполнение полей значениями массива в случайном порядке и создает игровое поле.
procedure go - подсчитывает количество ходов, сделанных пользователем и показывает это число под игровым полем.
procedure direction - Определяет, в какую сторону сместится ячейка в зависимости от свободной и от положения выделенной ячейки при ирге на клавиатуре.
procedure TMain. Image1Click - Определяет, в какую сторону сместится ячейка в зависимости от свободной ячейки и от положения курсора при ирге на мыши.
procedure TMain. SwitchClick - Переключает управление с мыши на клавиатуру.
procedure TMain. FormKeyDown - Определяет клавиши стрелочек для управления выделенной ячейкой.
Поля класса TMain1:
Pjat: array [1.16] of integer;
steps, keybpos: integer;
keyb: string;
Все процедуры в TMain и в TMain1 идентичны, кроме процедуры ReloadPole, в ней задается символьный массив от `a' до `o' и при заполнении ячеек эти символы используют индексы, которые заданы в массиве pjat.
3.8 Блок-схема основной программы
Блок-схема основной программы представлена на рисунке 3.6.
Рисунок 3.6 - Блок-схема основной программы
3.9 Блок-схема алгоритма игрового процесса
Данный раздел является основным. Именно в этом разделе происходят основные события.
Алгоритм данного раздела заключается в следующем:
Создание формы и игрового поля;
Заполнение ячеек пятнашек случайными цифрами из заданного массива;
Вывод заполненных ячеек на экран в хаотичном порядке;
Поиск пустого элемента;
Ввод направления перехода;
Перемещение элементов относительно пустого;
Проверка расположения символов последовательности;
Итог;
Схема алгоритма игрового процесса предоставлена на рисунке 3.7.
Рисунок 3.7 - Алгоритм игрового процесса
4. Программная реализация
4.1 Среда разработки
Программа была реализована в среде разработки Borland Delphi 7 c использованием стандартных компонент.
Delphi был выбран для реализации программы по следующим причинам:
Высокопроизводительный компилятор в машинный код.
Объектно-ориентированная модель компонент.
Визуальное (а следовательно и скоростное) построение приложений.
4.2 Описание программы
Дизайн и интерфейс программы интуитивно понятен. В программе предусмотрен удобный способ выбора типа игры. К тому же возможность менять управление с клавиатуры на мышь и обратно. Так же есть функция сброса игрового поля (начало игры заново).
4.3 Критерии качества
Фактор качества ПО - это нефункциональное требование к программе, которое обычно не описывается в договоре с заказчиком, но, тем не менее, является желательным требованием, повышающим качество программы.
В данном продукте учтены следующие факторы:
Понятность (При виде программы становится ясно, для чего она);
Полнота (Все части программы реализованы полностью);
Краткость (Лишней и дублированной информации не присутствует);
Портируемость (Лёгкая адаптация программы к другому окружению);
Согласованность (Используются одни форматы и обозначения);
Удобство использования (Интерфейс прост и доступен пониманию);
Сопровождаемость (Программа документирована и не запутана);
Надежность (Отказы и сбои в работе программы отсутствуют);
Безопасность;
4.4 Интерфейс пользователя
4.4.1 Введение
Прежде чем начать описание данной программы, необходимо определить его назначение. Настоящая программа представляет собой игру, повторяющую всем известные "Пятнашки". Главное окно программы представлено на рисунке 4.1.
Рисунок 4.1 - Главное окно программы
Здесь пользователю предоставлен выбор, с чем играть, последовательностью букв или цифр. При нажатии соответствующей кнопки выводится соответствующее окно с игрой.
При нажатии на кнопку "Цифры" появляется окно "Пятнашек" с полями, заполненными цифрами от одного до пятнадцати. Интерфейс окна предоставлен на рисунке 4.2.
Рисунок 4.2 - Окно "Цифры"
На рисунке видно, что в окне кроме игрового поля, в котором хаотично разбросаны цифры есть еще три кнопки.
4.4.2 Описание назначение элементов интерфейса
- Кнопка в виде игрового манипулятора осуществляет переключение управления с мыши на клавиатуру и обратно, так же, ели навести на неё курсор мыши, можно получить подсказку, что такое переключение можно произвести так же с помощью нажатия комбинации клавиш Ctrl+Tab.
- Кнопка в виде стрелочки осуществляет сброс игрового поля, тем самым начинает игру заново.
Кнопка закрывает программу полностью.
Для того чтобы выбрать другой тип игры, нужно просто закрыть окно, нажав на крестик.
При нажатии на кнопку "Буквы" в главном окне программы появляется окно "Пятнашек" с полями, заполненными буквами от "а" до "о". Интерфейс окна предоставлен на рисунке 4.3.
Рисунок 4.3 - Окно "Буквы"
На рисунке видно, что окно с "буквами" идентично окну с "цифрами". Буквы в игровом поле также расположены в хаотичном порядке.
Следует заметить, что в каждом из игровых окон, под игровым полем присутствует счетчик ходов. В конце игры пользователь сможет посмотреть, за сколько ходов он справился с задачей.
Программа проста и легка в использовании. При наведении на каждый из элементов окна появляется подсказка, помогающая пользователю понять, для чего тот или иной элемент нужен.
Заключение
Данная программа разработана в соответствии с постановкой задачи на курсовое проектирование по теме "Объектный подход" по дисциплине "Объектно-ориентированное программирование".
При написании программы были использованы методические указания по курсовому проектированию по дисциплине "Объектно-ориентированное программирование". Интерфейс программы удобен и прост в обращении. Тестирование программы подтвердило, что программа корректно выполняет обработку данных и демонстрацию взаимодействия объектов различных классов.
При построении программы были использованы основные идеи объектного подхода. Программа, реализующая данную объектную модель, написана в соответствии с основными принципами объектно-ориентированного программирования. В процессе написания программы были закреплены и усовершенствованы навыки работы в среде Delphi.
Настоящая программа представляет собой игру, повторяющую всем известные "Пятнашки". В разработанной объектной модели была приведена работа с тремя его классами. Программа компилируется без ошибок. Для компиляции использовался компилятор, поставляемый в сборке Embarcadero RAD Studio 2010. Всё это свидетельствует о работоспособности программы.
Библиографический список
1. Буч Г. Объектно-ориентированное проектирование с примерами применения: Пер с англ. - М.: Конкорд, 1992. - 519 с.
2. Доронина Ю.В. Конспект курса лекций по дисциплине "Объектно-ориентированное программирование"
3. Р. Вайнер, Л. Пинсон. Delphi 5 изнутри. - Киев: НПИФ "ДиаСофт", 2001.
4. И. Пол. Объектно-ориентированное программирование с использованием Delphi. - Киев: НПИФ "ДиаСофт", 1999.
5. Г. Шилдт. Самоучитель Delphi 5. BHV-Санкт-Петербург. 2000
6. П. Дарахвелидзе, Е. Марков Delphi - среда визуального программирования. - BHV-Санкт-Петербург 1996.
Приложение
Текст программы
Главное окно программы
unit Pre;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TIntro = class (TForm)
Start: TImage;
Exit: TImage;
Background: TImage;
PStart: TImage;
PExit: TImage;
PStart01: TImage;
Start01: TImage;
procedure FormCreate (Sender: TObject);
procedure StartMouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StartMouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ExitMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ExitMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Start01MouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Start01MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Intro: TIntro;
WinText,WholestepsText,playkeyb,playmouse: string;
implementation
uses Unit1,Unit2;
{$R *. dfm}
procedure Play;
begin
begin
WinText: ='Вы выиграли! ';
WholestepsText: ='Всего ходов: ';
end;
main. showmodal;
end;
procedure Play2;
begin
begin
WinText: ='Вы выиграли! ';
WholestepsText: ='Всего ходов: ';
end;
main1. showmodal;
end;
procedure TIntro. FormCreate (Sender: TObject);
begin
Intro. left: = (screen. Width-Intro. Width) div 2;
Intro. top: = (screen. Height-Intro. Height) div 2;
end;
procedure TIntro. StartMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Start. Visible: =False;
PStart. Visible: =True;
end;
procedure TIntro. StartMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Start. Visible: =True;
PStart. Visible: =False;
Play;
end;
procedure TIntro. ExitMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Exit. Visible: =False;
PExit. Visible: =True;
end;
procedure TIntro. ExitMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Exit. Visible: =True;
PExit. Visible: =False;
Halt;
end;
procedure TIntro. Start01MouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Start01. Visible: =False;
PStart01. Visible: =True;
end;
procedure TIntro. Start01MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Start01. Visible: =True;
PStart01. Visible: =False;
Play2;
end;
end.
Окно с числовым игровым полем
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TMain = class (TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Switch: TImage;
Reset: TImage;
Exit: TImage;
Image5: TImage;
PExit: TImage;
PReset: TImage;
PSwitch: TImage;
procedure FormCreate (Sender: TObject);
procedure Image1Click (Sender: TObject);
procedure FormPaint (Sender: TObject);
procedure FormKeyDown (Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure SwitchClick (Sender: TObject);
procedure ResetClick (Sender: TObject);
procedure ExitClick (Sender: TObject);
procedure SwitchMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure SwitchMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ResetMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ResetMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ExitMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ExitMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Main: TMain;
Pjat: array [1.16] of integer;
steps, keybpos: integer;
keyb: string;
implementation
uses pre;
{$R *. dfm}
procedure startpjat ();
var
i,q,w,a: integer;
begin
steps: =0;
main. label2. caption: ='0';
randomize;
pjat [1]: =random (16);
for i: =2 to 16 do
begin
a: =1;
while (a=1) do
begin
w: =0;
pjat [i]: =random (16);
for q: =i-1 downto 1 do
if (pjat [i] =pjat [q]) then w: =w+1;
if (w=0) then a: =2;
end;
end;
end;
procedure ReloadPole (canvas: TCanvas);
var i,q,w,x,y: integer;
begin
canvas. Rectangle (0,0, 201, 201);
if keyb='yes' then
begin
canvas. Brush. Color: =clGradientInactiveCaption;
case keybpos of
1: begin x: =0; y: =0; end;
2: begin x: =50; y: =0; end;
3: begin x: =100; y: =0; end;
4: begin x: =150; y: =0; end;
5: begin x: =0; y: =50; end;
6: begin x: =50; y: =50; end;
7: begin x: =100; y: =50; end;
8: begin x: =150; y: =50; end;
9: begin x: =0; y: =100; end;
10: begin x: =50; y: =100; end;
11: begin x: =100; y: =100; end;
12: begin x: =150; y: =100; end;
13: begin x: =0; y: =150; end;
14: begin x: =50; y: =150; end;
15: begin x: =100; y: =150; end;
16: begin x: =150; y: =150; end;
end;
canvas. Rectangle (x,y,x+51,y+51);
canvas. Brush. Color: =clWhite;
end;
w: =3;
for q: =0 to w do
for i: =0 to w do
begin
canvas. MoveTo (i*50,q*50);
canvas. LineTo ( (i) *50, (w-q+1) *50);
canvas. MoveTo (i*50,q*50);
canvas. LineTo ( (w-i+1) *50, (q) *50);
end;
w: =1;
for q: =1 to 4 do
for i: =1 to 4 do
begin
if (pjat [w] <>0) then
if (keyb='yes') and (keybpos=w) then
begin
canvas. Brush. Color: =clGradientInactiveCaption;
canvas. TextOut (i*50-30,q*50-30, inttostr (pjat [w]));
canvas. Brush. Color: =clWhite;
end else
canvas. TextOut (i*50-30,q*50-30, inttostr (pjat [w]));
w: =w+1;
end;
end;
function CheckPole (): string;
var i: integer;
begin
result: ='yes';
for i: =1 to 15 do if (pjat [i] <>i) then result: ='no';
if (pjat [16] <>0) then result: ='no';
end;
procedure TMain. FormCreate (Sender: TObject);
begin
startpjat ();
reloadPole (image1. Canvas);
main. left: = (screen. Width-main. Width) div 2;
main. top: = (screen. Height-main. Height) div 2;
keyb: ='no';
keybpos: =1;
end;
procedure TMain. ResetClick (Sender: TObject);
begin
startpjat ();
reloadPole (image1. Canvas);
end;
procedure go (i,cell: integer);
begin
pjat [i]: =pjat [cell];
pjat [cell]: =0;
steps: =steps+1;
reloadPole (main. image1. Canvas);
main. label2. Caption: =inttostr (steps);
if CheckPole='yes' then showmessage (pre. wintext);
end;
procedure direction (dire: string);
var cell: integer;
begin
if dire='sdown' then if (keybpos<=12) then keybpos: =keybpos+4;
if dire='sleft' then if (keybpos<>1) and (keybpos<>5) and (keybpos<>9) and (keybpos<>13) then keybpos: =keybpos-1;
if dire='sup' then if (keybpos>=5) then keybpos: =keybpos-4;
if dire='sright'then if (keybpos<>4) and (keybpos<>8) and (keybpos<>12) and (keybpos<>16) then keybpos: =keybpos+1;
if dire='space' then begin
cell: =keybpos;
if (pjat [cell-1] =0) and (cell>=2) and (cell<=17) then
go (cell-1,cell);
if (pjat [cell+1] =0) and (cell>=0) and (cell<=15) then
go (cell+1,cell);
if (pjat [cell-4] =0) and (cell>=5) and (cell<=20) then
go (cell-4,cell);
if (pjat [cell+4] =0) and (cell>=-3) and (cell<=12) then
go (cell+4,cell);
end;
reloadPole (main. image1. Canvas);
end;
procedure TMain. Image1Click (Sender: TObject);
var
x,y,cell: integer;
begin
if keyb='no' then
begin
x: =mouse. CursorPos. x-image1. left-main. Left-4;
y: =mouse. CursorPos. y-image1. top-main. top-30;
x: =x div 50;
y: =y div 50;
cell: =x*1+y*4+1;
if (pjat [cell-1] =0) and (cell>=2) and (cell<=17) then
go (cell-1,cell);
if (pjat [cell+1] =0) and (cell>=0) and (cell<=15) then
go (cell+1,cell);
if (pjat [cell-4] =0) and (cell>=5) and (cell<=20) then
go (cell-4,cell);
if (pjat [cell+4] =0) and (cell>=-3) and (cell<=12) then
go (cell+4,cell);
end;
end;
procedure TMain. SwitchClick (Sender: TObject);
begin
if (keyb='yes')
then
begin
keyb: ='no';
reloadpole (image1. Canvas);
end
else
begin
keyb: ='yes';
reloadpole (image1. Canvas);
end;
end;
procedure TMain. ExitClick (Sender: TObject);
begin
halt;
end;
procedure TMain. FormPaint (Sender: TObject);
begin
label1. Caption: =pre. WholestepsText;
if keyb='no'
then
if keyb='yes'
then
end;
procedure TMain. FormKeyDown (Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if keyb='yes'
then
case Key of
vk_down: direction ('sdown');
vk_left: direction ('sleft');
vk_up: direction ('sup');
vk_right: direction ('sright');
vk_space: direction ('space');
VK_TAB: SwitchClick (Sender);
end
else
case key of
VK_TAB: SwitchClick (Sender);
end;
end;
procedure TMain. SwitchMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Switch. Visible: =False;
PSwitch. Visible: =True;
end;
procedure TMain. SwitchMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Switch. Visible: =True;
PSwitch. Visible: =False;
end;
procedure TMain. ResetMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Reset. Visible: =False;
PReset. Visible: =True;
end;
procedure TMain. ResetMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Reset. Visible: =True;
PReset. Visible: =False;
end;
procedure TMain. ExitMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Exit. Visible: =False;
PExit. Visible: =True;
end;
procedure TMain. ExitMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Exit. Visible: =True;
PExit. Visible: =False;
end;
end.
Окно с буквенным игровым полем
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TMain1 = class (TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Switch: TImage;
Reset: TImage;
Exit: TImage;
Image5: TImage;
PExit: TImage;
PReset: TImage;
PSwitch: TImage;
procedure FormCreate (Sender: TObject);
procedure Image1Click (Sender: TObject);
procedure FormPaint (Sender: TObject);
procedure FormKeyDown (Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure SwitchClick (Sender: TObject);
procedure ResetClick (Sender: TObject);
procedure ExitClick (Sender: TObject);
procedure SwitchMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure SwitchMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ResetMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ResetMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ExitMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ExitMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Main1: TMain1;
Pjat: array [1.16] of integer;
steps, keybpos: integer;
keyb: string;
implementation
uses pre;
{$R *. dfm}
procedure startpjat ();
var
i,q,w,a: integer;
begin
steps: =0;
main1. label2. caption: ='0';
randomize;
pjat [1]: =random (16);
for i: =2 to 16 do
begin
a: =1;
while (a=1) do
begin
w: =0;
pjat [i]: =random (16);
for q: =i-1 downto 1 do
if (pjat [i] =pjat [q]) then w: =w+1;
if (w=0) then a: =2;
end;
end;
end;
procedure ReloadPole (canvas: TCanvas);
var i,q,w,x,y: integer;
mass58: array [1.15] of char;
begin
mass58 [1]: ='a';
mass58 [2]: ='b';
mass58 [3]: ='c';
mass58 [4]: ='d';
mass58 [5]: ='e';
mass58 [6]: ='f';
mass58 [7]: ='g';
mass58 [8]: ='h';
mass58 [9]: ='i';
mass58 [10]: ='j';
mass58 [11]: ='k';
mass58 [12]: ='l';
mass58 [13]: ='m';
mass58 [14]: ='n';
mass58 [15]: ='o';
canvas. Rectangle (0,0, 201, 201);
if keyb='yes' then
begin
canvas. Brush. Color: =clGradientInactiveCaption;
case keybpos of
1: begin x: =0; y: =0; end;
2: begin x: =50; y: =0; end;
3: begin x: =100; y: =0; end;
4: begin x: =150; y: =0; end;
5: begin x: =0; y: =50; end;
6: begin x: =50; y: =50; end;
7: begin x: =100; y: =50; end;
8: begin x: =150; y: =50; end;
9: begin x: =0; y: =100; end;
10: begin x: =50; y: =100; end;
11: begin x: =100; y: =100; end;
12: begin x: =150; y: =100; end;
13: begin x: =0; y: =150; end;
14: begin x: =50; y: =150; end;
15: begin x: =100; y: =150; end;
16: begin x: =150; y: =150; end;
end;
canvas. Rectangle (x,y,x+51,y+51);
canvas. Brush. Color: =clWhite;
end;
w: =3;
for q: =0 to w do
for i: =0 to w do
begin
canvas. MoveTo (i*50,q*50);
canvas. LineTo ( (i) *50, (w-q+1) *50);
canvas. MoveTo (i*50,q*50);
canvas. LineTo ( (w-i+1) *50, (q) *50);
end;
w: =1;
for q: =1 to 4 do
for i: =1 to 4 do
begin
if (pjat [w] <>0) then
if (keyb='yes') and (keybpos=w) then
begin
canvas. Brush. Color: =clGradientInactiveCaption;
canvas. TextOut (i*50-30,q*50-30,mass58 [Pjat [w]]);
canvas. Brush. Color: =clWhite;
end else
canvas. TextOut (i*50-30,q*50-30,mass58 [Pjat [w]]);
w: =w+1;
end;
end;
function CheckPole (): string;
var i: integer;
begin
result: ='yes';
for i: =1 to 15 do if (pjat [i] <>i) then result: ='no';
if (pjat [16] <>0) then result: ='no';
end;
procedure TMain1. FormCreate (Sender: TObject);
begin
startpjat ();
reloadPole (image1. Canvas);
main1. left: = (screen. Width-main1. Width) div 2;
main1. top: = (screen. Height-main1. Height) div 2;
keyb: ='no';
keybpos: =1;
end;
procedure TMain1. ResetClick (Sender: TObject);
begin
startpjat ();
reloadPole (image1. Canvas);
end;
procedure go (i,cell: integer);
begin
pjat [i]: =pjat [cell];
pjat [cell]: =0;
steps: =steps+1;
reloadPole (main1. image1. Canvas);
main1. label2. Caption: =inttostr (steps);
if CheckPole='yes' then showmessage (pre. wintext);
end;
procedure direction (dire: string);
var cell: integer;
begin
if dire='sdown' then if (keybpos<=12) then keybpos: =keybpos+4;
if dire='sleft' then if (keybpos<>1) and (keybpos<>5) and (keybpos<>9) and (keybpos<>13) then keybpos: =keybpos-1;
if dire='sup' then if (keybpos>=5) then keybpos: =keybpos-4;
if dire='sright'then if (keybpos<>4) and (keybpos<>8) and (keybpos<>12) and (keybpos<>16) then keybpos: =keybpos+1;
if dire='space' then begin
cell: =keybpos;
if (pjat [cell-1] =0) and (cell>=2) and (cell<=17) then
go (cell-1,cell);
if (pjat [cell+1] =0) and (cell>=0) and (cell<=15) then
go (cell+1,cell);
if (pjat [cell-4] =0) and (cell>=5) and (cell<=20) then
go (cell-4,cell);
if (pjat [cell+4] =0) and (cell>=-3) and (cell<=12) then
go (cell+4,cell);
end;
reloadPole (main1. image1. Canvas);
end;
procedure TMain1. Image1Click (Sender: TObject);
var
x,y,cell: integer;
begin
if keyb='no' then
begin
x: =mouse. CursorPos. x-image1. left-main1. Left-4;
y: =mouse. CursorPos. y-image1. top-main1. top-30;
x: =x div 50;
y: =y div 50;
cell: =x*1+y*4+1;
if (pjat [cell-1] =0) and (cell>=2) and (cell<=17) then
go (cell-1,cell);
if (pjat [cell+1] =0) and (cell>=0) and (cell<=15) then
go (cell+1,cell);
if (pjat [cell-4] =0) and (cell>=5) and (cell<=20) then
go (cell-4,cell);
if (pjat [cell+4] =0) and (cell>=-3) and (cell<=12) then
go (cell+4,cell);
end;
end;
procedure TMain1. SwitchClick (Sender: TObject);
begin
if (keyb='yes')
then
begin
keyb: ='no';
reloadpole (image1. Canvas);
end
else
begin
keyb: ='yes';
reloadpole (image1. Canvas);
end;
end;
procedure TMain1. ExitClick (Sender: TObject);
begin
halt;
end;
procedure TMain1. FormPaint (Sender: TObject);
begin
label1. Caption: =pre. WholestepsText;
if keyb='no'
then
if keyb='yes'
then
end;
procedure TMain1. FormKeyDown (Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if keyb='yes'
then
case Key of
vk_down: direction ('sdown');
vk_left: direction ('sleft');
vk_up: direction ('sup');
vk_right: direction ('sright');
vk_space: direction ('space');
VK_TAB: SwitchClick (Sender);
end
else
case key of
VK_TAB: SwitchClick (Sender);
end;
end;
procedure TMain1. SwitchMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Switch. Visible: =False;
PSwitch. Visible: =True;
end;
procedure TMain1. SwitchMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Switch. Visible: =True;
PSwitch. Visible: =False;
end;
procedure TMain1. ResetMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Reset. Visible: =False;
PReset. Visible: =True;
end;
procedure TMain1. ResetMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Reset. Visible: =True;
PReset. Visible: =False;
end;
procedure TMain1. ExitMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Exit. Visible: =False;
PExit. Visible: =True;
end;
procedure TMain1. ExitMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Exit. Visible: =True;
PExit. Visible: =False;
end;
end.
Размещено на Allbest.ru
Подобные документы
Описание проектного решения стратегической системы, этапы объектно-ориентированного анализа и проектирования. Описание связей между объектами. Программная реализация, построение модели состояний объекта. Руководство пользователя и описание программы.
курсовая работа [388,8 K], добавлен 17.11.2011Эффективность применения объектного подхода для программных систем. Детальное проектирование и реализация системы, реализующей процессы создания и взаимодействия объектов. Распознавание компьютером печатных букв с помощью многослойной нейронной сети.
курсовая работа [38,0 K], добавлен 09.03.2009Объектно-ориентированные возможности языка C++. Моделирование системы геометрических фигур, методика проектирования программных комплексов. Анализ предметной области, технология создания объектной модели. Упрощение классов при использовании наследования.
курсовая работа [668,8 K], добавлен 22.09.2011Понятие и внутренняя структура, стадии и объекты процесса проектирования баз данных. Требования, предъявляемые к данному процессу. Ограниченность реляционной модели. Группы CASE-средств. Анализ предметной области: функциональный и объектный подходы.
презентация [114,6 K], добавлен 19.08.2013Программная и техническая характеристика информационных систем предприятия. Требования к информационной и программной совместимости. Проектирование программного обеспечения с использованием специализированных программных пакетов. Разработка базы данных.
отчет по практике [1,3 M], добавлен 11.04.2019Краткая история UML. Объектный подход к разработке программных средств. Визуальная среда программирования С++ Builder. Сведения о диаграмме вариантов использования. Диаграмма классов программы "Вычисления нерабочих дней". Алгоритм работы программы.
курсовая работа [545,0 K], добавлен 31.10.2011Разработка объектно-ориентированной модели ООО "Мир Компьютеров". Описание предметной области. Разработка функциональной модели системы средствами BPwin. Проектирование информационной системы средствами Rational Rose. Сопровождение информационных сетей.
курсовая работа [843,4 K], добавлен 07.01.2015Назначение и цели создания системы. Разработка логической модели данных, выбор хранилища. Диаграмма классов для диспетчера и контент-менеджера, схема взаимодействия объектов системы. Описание программных модулей. Тестирование веб-базированной системы.
курсовая работа [5,4 M], добавлен 17.09.2013Объектно-ориентированная методология создания автоматизированных систем. Различные виды связей между элементами объектной модели. Фундаментальные понятия ООП: инкапсуляция, наследование, полиморфизм. Основные задачи транспортно-логистической компании.
курсовая работа [248,8 K], добавлен 28.03.2012Обзор программных средств для создания информационных систем. Анализ деятельности предприятия и задач, подлежащих автоматизации. Проектирование содержания и структуры веб-сайта, его программная реализация. Обеспечение безопасности при передаче данных.
дипломная работа [3,1 M], добавлен 21.01.2012