Курсовая. Содержание Введение основная часть
Скачать 0.63 Mb.
|
Содержание Введение ………………………………………….…………………………..….5 1.Основная часть…………………………………………………………...…..7 1.1.История Python…………………………………………………………...…7 1.2.Компоненты Python используемые в программе………………….……9 1.2.1.Компонент TMainMenu …….……………………...………….…….……9 1.2.2.Компонент TLabel ………………………………………………………10 1.2.3.Компонент TPanel ………………………………………………………11 1.2.4.Компонент TImage ………………………………………………………11 1.2.5.Компонент TImageList ………………………………………………….12 1.2.6.Компонент TTimer ………………………………………………………12 2.Специальная часть …………………………………………………..………13 2.1.Постановка задачи ………………………...………………………………13 2.2.Алгоритм реализации игровой программы ………...…………………..14 2.3.Описание пользовательского интерфейса ………………………………20 2.4.Листинг программы……………………………………………….……...21 2.5.Блок – схема……………………………………………………….………33 Заключение ……………………………………………………….………….…34 Список использованной литературы ……………………………….……….36 Введение О Python (лучше произносить "питон", хотя некоторые говорят "пайтон") - предмете данного изучения, лучше всего говорит создатель этого языка программирования, голландец Гвидо ван Россум: "Python - интерпретируемый, объектно-ориентированный высокоуровневый язык программирования с динамической семантикой. Встроенные высокоуровневые структуры данных в сочетании с динамическими типизацией и связыванием делают язык привлекательным для быстрой разработки приложений (RAD, Rapid Application Development). Кроме того, его можно использовать в качестве сценарного языка для связи программных компонентов. Синтаксис Python прост в изучении, в нем придается особое значение читаемости кода, а это сокращает затраты на сопровождение программных продуктов. Python поддерживает модули и пакеты, поощряя модульность и повторное использование кода. Интерпретатор Python и большая стандартная библиотека доступны бесплатно в виде исходных и исполняемых кодов для всех основных платформ и могут свободно распространяться." В процессе изучения будет раскрыт смысл этого определения, а сейчас достаточно знать, что Python - это универсальный язык программирования. Он имеет свои преимущества и недостатки, а также сферы применения. В поставку Python входит обширная стандартная библиотека для решения широкого круга задач. В Интернете доступны качественные библиотеки для Python по различным предметным областям: средства обработки текстов и технологии Интернет, обработка изображений, инструменты для создания приложений, механизмы доступа к базам данных, пакеты для научных вычислений, библиотеки построения графического интерфейса и т.п. Кроме того, Python имеет достаточно простые средства для интеграции с языками C, C++ (и Java) как путем встраивания (embedding) интерпретатора в программы на этих языках, так и наоборот, посредством использования библиотек, написанных на этих языках, в Python-программах. Язык Python поддерживает несколько парадигм программирования: императивное (процедурный, структурный, модульный подходы), объектно-ориентированное и функциональное программирование. Можно считать, что Python - это целая технология для создания программных продуктов (и их прототипов). Она доступна почти на всех современных платформах (как 32-битных, так и на 64-битных) с компилятором C и на платформе Java. Может показаться, что, в программной индустрии нет места для чего-то другого кроме C/C++, Java, Visual Basic, C#. Однако это не так. Возможно, благодаря данному курсу лекций и практических занятий у Python появятся новые приверженцы, для которых он станет незаменимым инструментом. В последнее время компьютерные технологии начали свое стремительное развитие, появление мощнейших графических ускорителей и центральных процессоров способствовало не менее бурному развитию индустрии компьютерных игр. Выдающиеся разработки этой отрасли – это сложнейшие программы, как правило, с очень высокими требованиями к аппаратной части компьютера. Но, и существует великое множество небольших компьютерных игр, которые также популярны. Для возможности отдохнуть в перерыве от выполнения какой-либо работы оператору компьютера не всегда требуется новейшая компьютерная игра, а зачастую использовать её не позволяет маломощное оборудование офисного компьютера. Именно этой цели – отдыху от монотонной работы служит разработанная в рамках данного курсового проекта программа «крестики-нолики», которая и будет являться объектом моего исследования. Крестики-нолики – весьма известная игра, как у нас, так и в англоязычном мире, где она называется tic-tac-toe. Не требуется больших усилий, чтобы установить, что она ничейная: ноликами надо на угол отвечать ходом в цент и наоборот. Слишком уж мало игровое поле и мало вариантов совершения хода. Игроки по очереди ставят на свободные клетки поля 3х3 знаки (один всегда крестики, другой всегда нолики). Первый выстроивший в ряд 3 своих фигур по вертикали, горизонтали или диагонали, выигрывает. Первый ход делает игрок, ставящий крестики. Актуальность моей курсовой работы заключается в создании не сложной игры, составленной на языке Python , которую сможет использовать каждый пользователь, не смотря на маломощное оборудование своего компьютера. Главной задачей моей курсовой работы заключается в правильности составленных алгоритмов и функций компонентов. Потребуется создать полноценную правильно - функционирующую программу в среде Python и самостоятельно изучить некоторые процедуры и функции. Курсовая работа состоит из двух частей: основной и специальной. В основной части рассказана история Python, компоненты, используемые, при написании программы, также, описаны их свойства и возможности, имеются графические изображения данной программы. Специальная часть состоит из описании программы и игрового процесса. Имеется листинг программы и блок-схема. Завершает курсовую работу заключение и список используемой литературы, которая была использована при составлении курсовой работы и программы. 1.Основная часть 1.1.История Delphi Почему название "Delphi"? Оказывается, что проект под названием Delphi начинается с 1993 года. В 1995 году Borland возродила свою версию Паскаль, тогда было принято решение представить среду быстрой разработки приложений визуального программирования - Дельфи для языка Паскаль. Результатом такого решения было создание базы данных инструментов, и подключения центральной части нового продукта Паскаль (Turbo Pascal 1).Delphi 1 (1995) Очень быстрый машинный код компилятора, визуальный двусторонний инструменты и большая поддержка баз данных, тесная интеграция с Windows и компонентов технологии. Delphi 2 (1996) Разработка для Windows 95 (полная поддержка и интеграция). Улучшение database Grid, OLE Automation, поддержка типа Variant и Visual Form Interface. Delphi 3 (1997) Наиболее полный набор визуальных высокопроизводительных client and server development tools разработки для создания распределенного предприятия и веб-приложений. Новые возможности и усовершенствования в следующих областях: технологии Code Insight, DLL отладки компонента шаблоны, DecisionCube и TeeChart компоненты, технологии WebBroker, ActiveForm, компонент пакеты, а также интеграции с COM через интерфейсы. Delphi 4 (1998) Введено: стыковки, закрепление и ограничения компонентов. Новые функции включают AppBrowser, динамические массивы, перегрузка методов, Windows 98 поддержка, улучшение OLE и COM поддержки, а также расширенную поддержку баз данных. Полный набор профессиональных client and server development tools разработки для построения решений высокой производительности для распределенных вычислений. Delphi обеспечивает совместимость Java, высококлассные драйверы производительность базы данных, развитие CORBA, а также поддержка Microsoft BackOffice. Delphi 5 (1999)Высокая производительность для развития Интернет. Представлено множество новых функций и усовершенствований. Некоторые из них, среди многих других, являются: различные макеты рабочего стола, концепция кадров, параллельное развитие, перевод возможности, более интегрированный отладчик, новые возможности Интернет (XML), базы данных ADO и т.д.Delphi 6 (2000)Borland Delphi является первой среди быстрых разработкок приложений для Windows, что полностью поддерживает новые и новые Web Services. В Delphi, корпоративных или индивидуальных разработчиков может создать нового поколения приложений электронного бизнеса быстро и легко. Усовершенствование IDE, Интернет, XML, компилятор, COM / Active X. Delphi (под Windows) и Kylix (под Linux) – теперь поддерживается. Дополнительные аксессуары включают: поддержку Web Services, двигатель DBExpress, новых компонентов и классов ...Delphi 7 (2001)Borland Delphi 7 Studio предоставляет путь миграции для Microsoft. NET, чего разработчики долго ждали. В Delphi.Delphi 8За 8 лет в Delphi, Borland подготовил наиболее значимых Delphi релиз: Delphi 8 продолжает оказывать Visual Component Library (VCL) и Component Library для кросс-платформенной (CLX) разработка для Win32 (и Linux), а также новые функции.1.2. Компоненты Delphi используемые в программе 1.2.1. Компонент TMainMenu T MainMenu – позволяет поместить главное меню в программу. При помещении TMainMenu на форму это выглядит, как просто иконка (Рис.1). Иконки данного типа называют невидимым (невизуальным) компонентом, поскольку они невидимы во время выполнения программы. Невидимая иконка компонента TMainMenu Меню созданное дизайнером меню Невидимая иконка компонента TImageList Невидимая иконка компонента TTimer Панели на форме (компонент TPanel) Рис.1 Иконки компонентов на форме, созданное меню, компонент TPanel Создание меню включает три шага: помещение TMainMenu на форму; вызов Menu Designer (Рис.2); определение пунктов меню в Menu Designer. Рис.2 Menu Designer Этот компонент доступен из модуля MENUS, и находится на странице Палитры компонентов Standard. Этот компонент представляет главное меню формы и наследует все методы и свойства TMenu. Особенность его в том, что в нем реализован сложный механизм объединения меню. Это необходимо по следующим причинам: Если в приложении имеется несколько форм со своими меню, то для упрощения работы целесообразно соединить их в одно и управлять меню из главной формы. Объединение меню нужно при работе с интерфейсом MDI и его подокнами. Механизм объединения меню используется серверами OLE, запускаемыми по месту нахождения объекта OLE. Загружаясь, сервер дописывает осуществляемые им операции к меню другого приложения. Для того чтобы реализовать объединение меню, у тех форм, меню которых будут присоединены к главному, необходимо установить в True свойство: (Pb) property AutoMerge: Boolean; При этом у главного меню оно должно оставаться равным False, иначе главное меню будет вообще невидимым. Объединение будет происходить автоматически при активизации новых форм или серверов OLE. Кроме автоматического режима, объединение меню можно выполнить при вызове метода: procedure Merge(Menu: TMainMenu); 1.2.2. Компонент TLabel T Label – служит для отображения текста на экране (Рис.3). Можно изменить шрифт и цвет метки, если дважды щелкнуть на свойство Font в Инспекторе Объектов. Видно, что это легко сделать и во время выполнения программы, написав всего одну строчку кода. Текст в Лейблах формы Графическое изображение в компоненте TImage на форме Рис.3 TImage и TLabel на форме Этот компонент доступен из модуля STDCTRLS, и находится на странице Палитры компонентов Standard. Компонент представляет собой статический текст. С помощью этого компонента на рабочей поверхности формы можно отобразить информацию, сделать пояснения и показать названия других компонентов. Но он имеет и другую важную функцию – если в составе текста TLabel есть символы-акселераторы, информация об их нажатии может передаваться от TLabel другому элементу управления. 1.2.3. Компонент TPanel T Panel – управляющий, похожий на TGroupBox, используется в декоративных целях. Чтобы использовать TPanel, просто поместите его на форму и затем положите другие компоненты на него (Рис.1). Теперь при перемещении TPanel будут передвигаться и эти компоненты. TPanel используется также для создания панели инструментов и окна статуса. Этот компонент доступен из модуля EXTCTRLS, и находится на странице Палитры компонентов Standard. Этот компонент — является несущей конструкцией для размещения других элементов управления. В отличие от простой рамки (TBevel) панель сама является оконным элементом управления и родителем для всех размещенных на ней компонентов. Часто ее используют для создания панелей инструментов, строк состояния и т. п. На границах панели размещаются две специальные окаймляющие рамки (bevels): BevelInner и BevelOuter. При помощи комбинации белого и серого цветов они имитируют трёхмерность – приподнятость (bvRaised) или утопленность (bvLowered). Также рамки могут быть невидимыми (bvNone). Выравнивание текста заголовка панели определяется при помощи свойства: (Pb) property Alignment: TAlignment; 1.2.4.Компонент TImage T Image – отображает графическое изображение на форме. Воспринимает форматы BMP, ICO, WMF. Если картинку подключить во время дизайна программы, то она прикомпилируется к EXE файлу (Рис.3). Этот компонент доступен из модуля EXTCTRLS, и находится на странице Палитры компонентов Additional. Этот компонент служит надстройкой над классом TPicture и замыкает всю иерархию графических объектов VCL. Он предназначен для показа на форме изображения: битовой карты (TBitmap), метафайла (TMetafile), значка (TIcon). 1.2.5.Компонент TImageList T ImageList - представляет собой контейнер для хранения множества рисунков одинакового размера. Он может быть полезен при программном создании набора инструментальных кнопок, секций управляющего заголовка, при разработке программ, использующих анимационные эффекты, и вообще там, где требуется индексированный доступ к изображениям. Воспринимает форматы BMP, ICO. При помещении TImageList на форму это выглядит, как просто иконка (Рис.1). Иконки данного типа называют невидимым (невизуальным) компонентом, поскольку они невидимы во время выполнения программы. Этот компонент находится на странице Палитры компонентов Win 32. 1.2.6. Компонент TTimer T Timer (таймер) служит для отсчета интервалов реального времени. Его свойство interval определяет интервал времени в миллисекундах, который должен пройти от включения таймера до наступления события onTimer. Таймер включается при установке значения True в его свойство Enabled. Раз включенный таймер все время будет возбуждать события onTimer до тех пор, пока его свойство Enabled не примет значения False. При помещении TTimer на форму это выглядит, как просто иконка (Рис.1). Иконки данного типа называют невидимым (невизуальным) компонентом, поскольку они не видимы во время выполнения программы. Этот компонент находится на странице Палитры компонентов System. 2. Специальная часть 2.1. Постановка задачи Разработать игровую программу «Крестики-нолики», которая включает в себя игровую панель, состоящую из девяти клеток (панелей), образующих собой один большой квадрат. Игровая программа рассчитана на двух игроков. Противникам поочерёдно предоставляется ход, один играет символом «X», другой – «O». Выигрывает тот, кто первым заполнит ряд панелей своим символом: любой из трёх рядов по горизонтали или вертикали, либо любой ряд по диагонали. 2.2. Алгоритм реализации игровой части Запуск программы осуществляется следующим образом: необходимо открыть папку, содержащую данную игру, и найти исполняемый файл SGIRG.exe. Проект программы состоит из файла проекта, содержащего необходимые конструкции для исполнения, и трёх модулей Unit1, Unit2 и Unit3. Модуль Unit1 является основным модулем проекта, содержащим все необходимые для работы программы процедуры. После запуска программы на экран выводится основная форма Form1 (рис.4), на которой расположены: главное меню и игровое поле. Игра, т.е. работа программы, начинается сразу же после запуска, ход сначала предоставляется игроку, выбравшему символ «X». В первую очередь пишем процедуру очистки игрового поля – clean. Сначала для надёжности выключаем таймер, меняем стиль панели на начальный (Form1.Panel2.BevelInner:=bvNone) и очищаем заголовок (Form1.Panel2.Caption:=' '). Данную операцию расписываем на все девять панелей игрового поля. В конце возобновляем работу таймера. Рис.4 Вид программы после запуска Далее выполняем проверку на “мухлёж”, т.е. проверяем заголовок каждой панели игрового поля. Если заголовок панели пуст, то на данную панель разрешено нажимать, если же ему присвоено какое-либо значение («X» либо «O»), то при нажатии на данную панель ничего не будет происходить: if Panel2.Caption<>' ' then exit; При нажатии на панель, для большей красоты, меняем её стиль (Panel2.BevelInner:=bvLowered). Передо мной встал вопрос: как сделать чередование «X» и «O»?! Всё просто, чередование делаем с помощью условного оператора If. Если Tag равен нулю, то в заголовок данной панели записываем символ «X» и присваиваем в Tag единицу, в противном случае в заголовок записываем символ «O» и присваиваем в Tag ноль. Пример нажатой панели изображён на рисунке 5. if Form1.Tag=0 then begin Panel.Caption:='X'; Form1.Tag:=1; end else begin Panel.Caption:='O'; Form1.Tag:=0; end; Рис. 5 Вид нажатой панели в программе Таким же образом описываем каждую панель игрового поля. Следующим шагом написания программы является процедура проверки на выигрыш. В качестве данной процедуры используем компонент TTimer. Когда подпрограмма сталкивается с невозможностью выполнения последующих действий, она создает объект с описанием ошибки и прерывает нормальный ход своей работы с помощью оператора Raise. Данный оператор создает объект класса EOutOfMemory (класс ошибок исчерпания памяти) и прерывает нормальное выполнение программы. Вызывающие подпрограммы могут эту ситуацию перехватить и обработать. Для этого в них организуется так называемый защищенный блок: try // Защищаемые от ошибок операторы except // Операторы обработки исключительной ситуации end; Между словами try и except помещаются защищаемые от ошибок операторы. Если при выполнении любого из этих операторов возникает исключительная ситуация, то управление передается операторам между словами except и end, образующим блок обработки исключительных ситуаций. При нормальном (безошибочном) выполнении программы блок except...end пропускается. И так, дальнейшую разработку программы осуществляем в защищённом блоке. Проверяем стиль панелей по горизонтали, вертикали и диагонали. Если хоть один ряд имеет не начальный стиль панелей, то сравниваем заголовки панелей данного ряда. Если после проверки выясняется, что заголовки данного ряда не равны – игра продолжается, а если же выясняется, что равны, то открываем модальное окно с поздравлением (Рис.6) и присваиваем «X» или «O» (в зависимости от того, каким символом заполнен данный ряд) в лейбл формы поздравления: Form3.Label1.Caption:=Form1.Panel2.Caption; Form3.ShowModal; Рис.6 Модальное окно с поздравлением После закрытия модального окна поздравления делаем очистку игрового поля с помощью ранее описанной процедуры clean. Данная процедура проверки применяется ко всем восьми рядам панелей, и только после этого закрываем try. В случае если все панели игрового поля заполнены, а победитель не определился, то выводим сообщение: “Ничья, попробуйте ещё раз” (Рис.7). if (Panel2.BevelInner=bvLowered) and (Panel3.BevelInner=bvLowered) and (Panel4.BevelInner=bvLowered) and (Panel5.BevelInner=bvLowered) and (Panel6.BevelInner=bvLowered) and (Panel7.BevelInner=bvLowered) and (Panel8.BevelInner=bvLowered) and (Panel9.BevelInner=bvLowered) and (Panel10.BevelInner=bvLowered) then begin Form1.Timer1.Enabled:=False; ShowMessage ('Ничья, попробуйте ещё раз!'); clean; end; Рис.7 Сообщение в случае ничьи Программирование кнопки “Новая игра” в меню программы делается в одну строку. Кнопка программируется в событии OnClick, просто указывается процедура очистки игрового поля – Clean: procedure TForm1.NewMenuItemClick(Sender: TObject); begin clean; end; Программирование кнопки “Выход” в меню программы так же осуществляется очень просто. Кнопка программируется в событии OnClick и указывается процедура закрытия программы – Close: procedure TForm1.N4Click(Sender: TObject); begin Close; end; Программирование кнопки “О программе” также производится в событии OnClick и открывается модальное окно “О программе” (Рис.8), в котором описаны краткие сведения о программе и её создателе: procedure TForm1.AboutMenuItemClick(Sender: TObject); begin Form2.ShowModal; end; Рис.8 Модальное окно “О программе” Казалось бы, на этом можно закончить программирование модуля Unit1, но я заметила ещё одну очень интересную проблему. Эта проблема заключается в кнопке “максимизации” (развернуть на весь экран) программы. Я уже сделала так, чтобы окно программы не могло “растягиваться”: (Pb) property BorderStyle: bsToolWindow; но этого мало, т.к. при нажатии на кнопку “максимизации” окно программы растягивается на весь экран (вид программы становится не очень красивым!). Почитав немного литературы по Delphi я нашёла выход из проблемы!: procedure TForm1.FormCreate(Sender: TObject); var l:DWORD; begin l:=GetWindowLong(Self.Handle,GWL_STYLE); l:=l and not(WS_MAXIMIZEBOX); l:=SetWindowLong(Self.Handle,GWL_STYLE,l); end; Данная процедура блокирует кнопку “максимизации”, т.е. происходит “затухание” кнопки и все попытки нажать на неё становятся бесполезными. Модуль Unit2 предназначен для вывода окна, содержащего информацию о программе и об авторе (Рис.8). Данное окно (Form2) создаём следующим образом: Создаём новую форму – Form2; Ставим компонент TImage и загружаем на форму рисунок (Рис.3); Создаём на рисунке три Лейбла и пишем в их заголовки нужный текст. Далее делаем фон Лейблов прозрачным: (Pb) property Transparent: True; Модуль Unit3 предназначен для вывода окна, содержащего поздравления для победившего игрока и символ, которым он играл (Рис.6). Программирование окна (Form3) осуществляется следующим образом: Создаём ещё одну новую форму – Form3; Также как и на Form2 ставим компонент TImage и загружаем на форму рисунок; Создаём на рисунке три Лейбла: в двух пишем текст поздравления, а в третьем будет показываться символ, которым играл победитель (процедура вывода символа описана выше). Устанавливаем прозрачность фона Лейблов: (Pb) property Transparent: True; 2.3.Описание пользовательского интерфейса Файл → Новая игра – начало новой игры. Файл → Выход – выход из программы. Справка → О программе – Вывод дополнительной информации о программе и о её создателе. 2.4.Листинг программы unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, unit2, ExtCtrls, ComCtrls, unit3, StdCtrls, ImgList; type TForm1 = class(TForm) MainMenu1: TMainMenu; FileMenuItem: TMenuItem; NewMenuItem: TMenuItem; N3: TMenuItem; N4: TMenuItem; InformationMenuItem: TMenuItem; AboutMenuItem: TMenuItem; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; Panel5: TPanel; Panel6: TPanel; Panel7: TPanel; Panel8: TPanel; Panel9: TPanel; Panel10: TPanel; Timer1: TTimer; ImageList1: TImageList; procedure AboutMenuItemClick(Sender: TObject); procedure Panel2Click(Sender: TObject); procedure Panel5Click(Sender: TObject); procedure Panel8Click(Sender: TObject); procedure Panel3Click(Sender: TObject); procedure Panel6Click(Sender: TObject); procedure Panel9Click(Sender: TObject); procedure Panel4Click(Sender: TObject); procedure Panel7Click(Sender: TObject); procedure Panel10Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure NewMenuItemClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Implementation {$R *.dfm} procedure clean; // Процедура общего сброса ("Новая игра") begin Form1.Timer1.Enabled:=false; // Для надежности выключаем таймер Form1.Panel2.BevelInner:=bvNone; // Меняем стиль панели на начальный Form1.Panel2.Caption:=''; // Убираем заголовок панели Form1.Panel3.BevelInner:=bvNone; Form1.Panel3.Caption:=''; Form1.Panel4.BevelInner:=bvNone; Form1.Panel4.Caption:=''; Form1.Panel5.BevelInner:=bvNone; Form1.Panel5.Caption:=''; Form1.Panel6.BevelInner:=bvNone; Form1.Panel6.Caption:=''; Form1.Panel7.BevelInner:=bvNone; Form1.Panel7.Caption:=''; Form1.Panel8.BevelInner:=bvNone; Form1.Panel8.Caption:=''; Form1.Panel9.BevelInner:=bvNone; Form1.Panel9.Caption:=''; Form1.Panel10.BevelInner:=bvNone; Form1.Panel10.Caption:=''; Form1.Tag:=0; Form1.Timer1.Enabled:=true; // Возобновляем работу таймера end; procedure TForm1.AboutMenuItemClick(Sender: TObject); begin Form2.ShowModal; // Вызываем окно "О программе" end; procedure TForm1.Panel2Click(Sender: TObject); begin if Panel2.Caption<>'' then exit; // Проверка на заголовок панели (анти-мухлеж) Panel2.BevelInner:=bvLowered; // Присваиваем стиль при нажатии на панель if Form1.Tag=0 then // Меняем tag формы (для чередования X и O) begin Panel2.Caption:='X'; // если таг=0 тогда вписываем X Form1.Tag:=1; end else begin Panel2.Caption:='O'; // если таг=1 тогда вписываем O Form1.Tag:=0; end; end; procedure TForm1.Panel5Click(Sender: TObject); begin if Panel5.Caption<>'' then exit; Panel5.BevelInner:=bvLowered; if Form1.Tag=0 then begin Panel5.Caption:='X'; Form1.Tag:=1; end else begin Panel5.Caption:='O'; Form1.Tag:=0; end; end; procedure TForm1.Panel8Click(Sender: TObject); begin if Panel8.Caption<>'' then exit; Panel8.BevelInner:=bvLowered; if Form1.Tag=0 then begin Panel8.Caption:='X'; Form1.Tag:=1; end else begin Panel8.Caption:='O'; Form1.Tag:=0; end; end; procedure TForm1.Panel3Click(Sender: TObject); begin if Panel3.Caption<>'' then exit; Panel3.BevelInner:=bvLowered; if form1.Tag=0 then begin Panel3.Caption:='X'; Form1.Tag:=1; end else begin Panel3.Caption:='O'; Form1.Tag:=0; end; end; procedure TForm1.Panel6Click(Sender: TObject); begin if Panel6.Caption<>'' then exit; Panel6.BevelInner:=bvLowered; if form1.Tag=0 then begin Panel6.Caption:='X'; Form1.Tag:=1; end else begin Panel6.Caption:='O'; Form1.Tag:=0; end; end; procedure TForm1.Panel9Click(Sender: TObject); begin if Panel9.Caption<>'' then exit; Panel9.BevelInner:=bvLowered; if form1.Tag=0 then begin Panel9.Caption:='X'; Form1.Tag:=1; end else begin Panel9.Caption:='O'; Form1.Tag:=0; end; end; procedure TForm1.Panel4Click(Sender: TObject); begin if Panel4.Caption<>'' then exit; Panel4.BevelInner:=bvLowered; if Form1.Tag=0 then begin Panel4.Caption:='X'; Form1.Tag:=1; end else begin Panel4.Caption:='O'; Form1.Tag:=0; end; end; procedure TForm1.Panel7Click(Sender: TObject); begin if Panel7.Caption<>'' then exit; Panel7.BevelInner:=bvLowered; if Form1.Tag=0 then begin Panel7.Caption:='X'; Form1.Tag:=1; end else begin Panel7.Caption:='O'; Form1.Tag:=0; end; end; procedure TForm1.Panel10Click(Sender: TObject); begin if Panel10.Caption<>'' then exit; Panel10.BevelInner:=bvLowered; if Form1.Tag=0 then begin Panel10.Caption:='X'; Form1.Tag:=1; end else begin Panel10.Caption:='O'; Form1.Tag:=0; end; end; procedure TForm1.Timer1Timer(Sender: TObject); // Процедура проверки на выигрыш; begin try // защита от непредвиденных ошибок if (Panel2.BevelInner=bvLowered) and (Panel4.BevelInner=bvLowered) and (Panel3.BevelInner=bvLowered) then // Если панели нажаты, то проверяем заголовки if (Panel2.Caption=Panel3.Caption) and (Panel2.Caption=Panel4.Caption) then begin Form3.Label1.Caption:=Form1.Panel2.Caption; // Если выигрышная комбинация то присваиваем Х или О в Лейбл формы поздравления Form3.ShowModal; // Открываем окно поздравления ":-)" clean; // Очистка игрового поля end; if (Panel7.BevelInner=bvLowered) and (Panel5.BevelInner=bvLowered) and (Panel6.BevelInner=bvLowered) then if (Panel5.Caption=Panel6.Caption) and (Panel5.Caption=Panel7.Caption) then begin Form3.Label1.Caption:=Form1.Panel5.Caption; Form3.ShowModal; clean; end; if (Panel9.BevelInner=bvLowered) and (Panel10.BevelInner=bvLowered) and (Panel8.BevelInner=bvLowered) then if (Panel8.Caption=Panel9.Caption) and (Panel8.Caption=Panel10.Caption) then begin Form3.Label1.Caption:=Form1.Panel10.Caption; Form3.ShowModal; clean; end; if (Panel5.BevelInner=bvLowered) and (Panel2.BevelInner=bvLowered) and (Panel8.BevelInner=bvLowered) then if (Panel2.Caption=Panel5.Caption) and (Panel2.Caption=Panel8.Caption) then begin Form3.Label1.Caption:=Form1.Panel2.Caption; Form3.ShowModal; clean; end; if (Panel9.BevelInner=bvLowered) and (Panel3.BevelInner=bvLowered) and (Panel6.BevelInner=bvLowered) then if (Panel6.Caption=Panel3.Caption) and (Panel6.Caption=Panel9.Caption) then begin Form3.Label1.Caption:=Form1.Panel3.Caption; Form3.ShowModal; clean; end; if (Panel4.BevelInner=bvLowered) and (Panel7.BevelInner=bvLowered) and (Panel10.BevelInner=bvLowered) then if (Panel4.Caption=Panel7.Caption) and (Panel10.Caption=Panel4.Caption) then begin Form3.Label1.Caption:=Form1.Panel4.Caption; Form3.ShowModal; clean; end; if (Panel6.BevelInner=bvLowered) and (Panel2.BevelInner=bvLowered) and (Panel10.BevelInner=bvLowered) then if (Panel2.Caption=Panel6.Caption) and (Panel2.Caption=Panel10.Caption) then begin Form3.Label1.Caption:=Form1.Panel2.Caption; Form3.ShowModal; clean; end; if (Panel6.BevelInner=bvLowered) and (Panel8.BevelInner=bvLowered) and (Panel4.BevelInner=bvLowered) then if (Panel4.Caption=Panel6.Caption) and (Panel8.Caption=Panel4.Caption) then begin Form3.Label1.Caption:=Form1.Panel4.Caption; Form3.ShowModal; clean; end; except; end; if (Panel2.BevelInner=bvLowered) and (Panel3.BevelInner=bvLowered) and (Panel4.BevelInner=bvLowered) and (Panel5.BevelInner=bvLowered) and (Panel6.BevelInner=bvLowered) and (Panel7.BevelInner=bvLowered) and (Panel8.BevelInner=bvLowered) and (Panel9.BevelInner=bvLowered) and (Panel10.BevelInner=bvLowered) then begin Form1.Timer1.Enabled:=False; ShowMessage ('Ничья, попробуйте ещё раз!'); clean; end; end; procedure TForm1.NewMenuItemClick(Sender: TObject); begin clean; // Очистка игрового поля для новой игры end; procedure TForm1.FormCreate(Sender: TObject); var l:DWORD; // Процедура блокировки кнопки "Развернуть" begin l:=GetWindowLong(Self.Handle,GWL_STYLE); l:=l and not(WS_MAXIMIZEBOX); l:=SetWindowLong(Self.Handle,GWL_STYLE,l); end; procedure TForm1.N4Click(Sender: TObject); begin Close; // Выход из программы end; end. unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls; type TForm2 = class(TForm) Image1: TImage; Label1: TLabel; Label3: TLabel; Label2: TLabel; Label4: TLabel; procedure Image1Click(Sender: TObject); procedure Label1Click(Sender: TObject); procedure Label2Click(Sender: TObject); procedure Label3Click(Sender: TObject); procedure Label4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; Implementation {$R *.dfm} procedure TForm2.Image1Click(Sender: TObject); begin Close; // Закрытие окна при нажатии на него end; procedure TForm2.Label1Click(Sender: TObject); begin Close; end; procedure TForm2.Label2Click(Sender: TObject); begin Close; end; procedure TForm2.Label3Click(Sender: TObject); begin Close; end; procedure TForm2.Label4Click(Sender: TObject); begin Close; end; end. unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg; type TForm3 = class(TForm) Image1: TImage; Label3: TLabel; Label2: TLabel; Label1: TLabel; procedure FormShow(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Label1Click(Sender: TObject); procedure Label2Click(Sender: TObject); procedure Label3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; implementation uses Unit1; {$R *.dfm} procedure TForm3.FormShow(Sender: TObject); begin Form1.Timer1.Enabled:=False; // Выключаем таймер end; procedure TForm3.Image1Click(Sender: TObject); begin Close; // Закрытие окна при нажатии на него end; procedure TForm3.Label1Click(Sender: TObject); begin Close; end; procedure TForm3.Label2Click(Sender: TObject); begin Close; end; procedure TForm3.Label3Click(Sender: TObject); begin Close; end; end 2.5. Блок - схема Б лок схема нет да нет да Заключение Данный курсовой проект был выполнен в соответствии поставленной задачи, в среде Borland Delphi 7.0. Было проведено исследование компонентов программной среды Borland Delphi 7.0, которые использовались при создании программы, также использовалось множество процедур и функций. Была использована и изучена процедура блокировки кнопки “максимизации”. В результате выполнения данной курсовой работы, мной была разработана игровая программа под названием “Крестики-нолики”. Программа состоит из игрового поля 3х3, где игроки по очереди ставят знаки «Х» или «0» и главного меню, состоящем из «Меню» и «Справка». Игра, т.е. работа программы, начинается сразу же после запуска, первым ход делает игрок со знаком «Х». Первый выстроивший в ряд 3 из своих фигур по вертикали, горизонтали или диагонали, выигрывает. Моя программа «Крестики-нолики» несет развлекательный характер, но также и развивающийся, ведь продумывая определенный ход, можно изменить суть всей игры. Она не слишком простая и в то же время не слишком сложная, подойдет, как и взрослому человеку, так и ребенку дошкольного возраста. При открытии программы появляется окно, состоящее из поля 3х3. После заполнения поля, выйдет модальное окно с результатом, какой именно игрок победил. Так же можно узнать информацию о программе, то есть нужно выбрать в главном меню «Справка» далее «О программе». Появится модальное окно «О программе», в котором описаны краткие сведения о программе и её создателе. При создании программы использовались следующие компоненты: TMainMenu, TLabel, TPanel, TImage, TImageList, TTimer. Также использовались и другие программы: Adobe Photoshop CS v8.0 – использовался для создания дополнительных надписей на картинке для формы «О программе»; Microsoft Paint v5.1 – использовался для создания рисунков к данному курсовому проекту. Изначально я подумывала сделать данную программу с искусственным интеллектом, т.е. сделать возможной игру человека с компьютером, но потом передумала, т.к. компьютер ходил бы на бум, а разработка более серьёзного искусственного интеллекта пока не в моих силах. В процессе создания программы были использованы экранные формы, которые в дальнейшем были модифицированы и подстроены для наилучшего восприятия пользователя. Программа выполнена с графическим интерфейсом пользователя в среде Borland Delphi 7.0. Цели и задачи, поставленные, в курсовой работе выполнены. Программа работает без ошибок. Были и сложности в разработке программы, но после долгого упорства и тщательной работы они устранены. Работать в Delphi было очень интересно и познавательно, были использованы различные компоненты, изучены процедуры и функции. Также данная программа может быть модифицирована для расширения своих возможностей, т.е. можно увеличить игровое поле, так игра будет более сложнее и интереснее, можно сделать возможной игру человека с компьютером, компьютер с компьютером, можно добавить в главное меню другие компоненты, например «Помощь», «Руководство к программе» и т.д. Данная программа может быть применена в другие программы, как развлекательного и развивающего характера. Список использованной литературы А. Я. Архангельский Приемы программирования в Delphi Издательство: Бином-Пресс, 2004 г. ISBN 5-9518-0067-6 А. Жуков Изучаем Delphi Издательство: Питер, 2001 г. ISBN 5-272-00202-4 Батищев Р.В. «Методические указания к лабораторным работам» ГОУВПО ВГТУ. Давыдов В.Г., Программирование и основы алгоритмизации ,учебное пособие, Высш. шк. 2003-447с. Интернет портал «http://delphiworld.narod.ru.» Интернет портал «http://delphikingdown.ru.» Михаил Фленов «Библия Delphi» БХВ-Петербург, 2004г. 880с. Паскаль и Дельфи. А.Попов, М., 2004. Попов А. «Паскаль и Дельфи» Москва 2004. Чарльз Петцольд. Программирование. Издательско-торговый дом “Русская Редакция”, Москва 2002 - 576 с. . |