Оглавление
Введение 3
1. Разработка эскизного и технического проектов программы 5
1.1. Назначение и область применения 5
1.2. Технические характеристики 5
1.2.1. Постановка задачи 5
1.2.2. Описание алгоритма 7
1.2.3. Организация входных и выходных данных 13
1.2.4. Выбор состава программных и технических средств 13
1.3. Источники, использованные при разработке. 13
2.Разработка рабочего проекта 14
2.1. Разработка программы 14
2.2. Спецификация программы 34
2.3. Текст программы 36
2.4. Описание программы 36
2.5. Тестирование программы 38
3. Внедрение 39
Заключение 43
Библиографический список 44
Приложение 45
Введение.
При проектировании данной курсовой работы была решена задача по разработке приложения в Delphi. Delphi – визуальная среда проектирования, в основе которой лежит язык – Object Pascal. Delphi позволяет разрабатывать приложения работающие в операционной системе Windows. Программа, описанная в этом проекте, создана на Delphi 5.
Внешний вид среды программирования Delphi отличается от внешнего вида других языков программирования, в которых разрабатываются приложения под Windows. Borland Pascal for Windows 7.0, Word for Windows эти языки отличаются спецификацией – MDI (Multiple Document Interface) – определяет особый способ управления нескольких дочерних окнах внутри одного большого окна. Среда Delphi же следует другой спецификации, называемой Single Document Interface (SDI), и состоит из нескольких отдельно расположенных окон.
После запуска Delphi 5 на экране появляются сразу четыре окна:
Главное окно – Delphi 5 - Project 1.
Окно стартовой формы – Form 1.
Окно редактора свойств объектов – Object Inspector.
Окно редактора кода – Unit1.pas.
Создание приложений в Delphi можно разделить на два этапа: создание окна, то есть помещение необходимых компонентов на форму; и написание кода программы.
Целью этого проекта является создать приложение представляющее собой игру «Кости». В этой программе использованы лишь некоторые возможности Delphi.
Задание на курсовую работу
«Алгоритмические языки и программирование»
Студент группы: ОИН - 309 - 11
Вася Пупкин.
Направление: «Информатика», № контракта: 55535356595954584
Тема: Разработка приложения для Windows, представляющего собой компьютерную игру «Кости».
Условие задачи:
Разработать программу, моделирующую игру «Кости». Играющий называет любое число в диапазоне от 2 до 12 и ставку, которую он делает в этот ход. Программа с помощью датчика случайных чисел дважды выбирает числа от 1 до 6 (“бросает кубик”, на гранях которого цифры от 1 до 6). Если сумма выпавших цифр меньше 7 и играющий задумал число меньшее 7, он выигрывает сделанную ставку. Если сумма выпавших цифр больше 7 и играющий задумал число большее 7, он также выигрывает сделанную ставку. Если играющий угадал сумму цифр, он получает в четыре раза больше очков, чем сделанная ставка. Ставка проиграна, если не имеет место ни одна из описанных ситуаций. В начальный момент у играющего 100 очков. В программе должно присутствовать графическое изображение поверхности кубика при каждом ходе игрока.
Задание выдано __________________
1. Разработка эскизного и технического проектов программы
1.1. Назначение и область применения.
В данном задании необходимо разработать программу представляющую собой игру. Программа предназначена для развлечения. Область применения: досуг программиста. Поскольку ставится задача разработать приложение под Windows, то использоваться программа может только под управлением Windows 9x.
1.2. Технические характеристики.
1.2.1. Постановка задачи
В условии задачи указывается на необходимость использования датчика случайных чисел. Программа дважды («бросает кости») генерирует число от 1 до 6. Для этого используется генератор случайных чисел – процедура Randomize, и функция random(6). Переменная, отвечающая за выпавшее число, после присваивания ей функции “random(6)” будет в диапазоне от 0 до 5, поэтому к ней необходимо прибавить единицу. Например: а:=random(6)+1; (1<a<6).Необходимо отметить, что если в тексте программы перед использованием выше указанной функции не прописать: Randomize; (не «включить» генератор случайных чисел) значения функции random(6) будут повторяться каждый раз при запуске программы.
Следующим условием является вывод графического изображения поверхности кубика при каждом ходе игрока. Для решения этой задачи с помощью встроенной в Delphi 5.0 программы “Image Editor” был создан файл ресурсов «к.res». Файл ресурсов к.res содержит восемь рисунков (восемь растровых изображений – Bitmap), два из которых используются для красивого оформления приложения. Остальные отображают грани кубика. В программе объявлены переменные типа TBitmap.В них, с помощью метода LoadFromResourceName загружаются изображения из файла ресурсов. Далее эти переменные изображаются на компонентах – Image. Метод LoadFromResourceName имеет два параметра идентификатор программы и имя ресурса. В качестве идентификатора программы используется глобальная переменная Hinstance, имя ресурса должно быть представлено в виде строковой константы. Для того чтобы ресурсы были доступны программе необходимо в текст программы добавить директиву компилятору {$R k.res}. Эта строка помещается в начале текста модуля. При разработке приложений Delphi так же создаёт файл ресурсов, который содержит картинку исполняемого файла.
Следующим условием задачи является, определение выигрыша или проигрыша ставки. Для этого применена конструкция if … else. В данной задаче выигрыш ставки соответствует условиям:
Если сумма выпавших цифр меньше 7 и играющий задумал число меньшее 7, он выигрывает сделанную ставку.
Если сумма выпавших цифр больше 7 и играющий задумал число большее 7, он также выигрывает сделанную ставку.
Если играющий угадал сумму цифр, он получает в четыре раза больше очков, чем сделанная ставка. Все другие ситуации являются проигрышными.
При выполнении данного проекта условие задачи было дополнено.
Во-первых, чтобы игра заканчивалась не только банкротом игрока – введено условие победы в игре. Если игрок набрал тысячу или больше очков игра заканчивается победой игрока. Это реализовано с помощью конструкции if … else.
Во-вторых, в процессе игры (перед выводом графического изображения поверхности кубика) выводится движущееся изображение кубика. Благодаря чему у играющего создаётся впечатление, что он видит брошенные кости (движущиеся кости). Для этого с помощью программы Macromedia Flash MX PRO 2004 7.01 были созданы AVI-файлы. При воспроизведении этих файлов можно наблюдать, как меняется изображение поверхности кубика – эффект “брошенных костей”. При запуске, приложение запрашивает путь к AVI-файлам (прилагаются к проекту). В дальнейшем, после нажатия кнопки «Играть» (после броска кубиков), эти AVI-файлы проигрываются, после чего выводится изображение кубика (кости “остановились”). Для воспроизведения используются компоненты – MediaPlayer. Экранами для воспроизведения служат компоненты – Panel. Компоненты Panel и Image(компонент для вывода изображений) расположены в одном месте и в зависимости от действия программы (воспроизведение или вывод изображений) поочерёдно становятся видимыми – невидимыми. Это происходит так: игрок (после ввода числа и ставки) нажимает кнопку «Играть» компонент Image становится невидимым компонент Panel – видимым, воспроизводятся AVI-файлы, затем компонент Panel становится невидимым компонент Image – видимым, выводятся изображения кубиков.
В проекте использованы приемы, сопутствующие дружелюбному интерфейсу.
1.2.2. Описание алгоритма
При разработке программы необходимо решить ряд задач. Решение каждой задачи можно представить в виде отдельного блока (части), совокупность которых образует программу в целом. Обобщенная схема алгоритма представлена на рис.1.
Ввод пути к AVI-файлам и проверка правильности ввода. (Рис.2.)
Ввод числа и ставки, проверка правильности ввода. Генерация случайных чисел. Воспроизведение AVI-файлов и вывод графических изображений. (Рис.3.)
Определение проигрыша или выигрыша ставки. (Рис.4.)
Определение победы или поражения в игре. (Рис.5.)
Блок 1
Блок 2
Блок 3
Блок 4
Рис.1. Обобщенная схема алгоритма.
Ввод пути к AVI-файлам производится на главной форме (в диалоговом окне Project Options – Main Form), которая открывается после запуска приложения. Здесь же программа проверяет правильность этого пути с помощью инструкции Try. В случае ошибки (исключения “except”) программа выводит сообщение об этом и предлагает пользователю попробовать ещё, пользователь исправляет ошибку или выходит из программы. Если ошибки нет, открывается основная форма (игровое поле).
Да Нет
Открытие основной формы
Рис.2. Ввод пути и обработка возможных ошибок (блок 1).
«Выпадение» случайных чисел происходит с помощью генератора случайных чисел. Воспроизводятся AVI-файлы, затем в соответствии со случайными числами выводятся графические изображения кубиков.
Да
Да
Да
Да
st:=strtoint(edit2.text);
chislo:=strtoint(edit1.text)
Да
Да
r1.LoadFromResourceName(hinstance,'b'+inttostr(k1))
r2.LoadFromResourceName(hinstance,'b'+inttostr(k2));
image1.Canvas.Draw(0,0,r1);
image2.Canvas.Draw(0,0,r2);
Рис.3. Ввод числа и ставки, обработка ошибок ввода
Случайные числа вывод изображений (блок 2).
Определение проигрыша или выигрыша ставки, происходит путём сравнения числа (введенным пользователем) и сумой двух «случайных чисел». Если сумма двух «случайных чисел» равна числу загаданным пользователем, то ставка, увеличивается в четыре раза. Если сумма двух «случайных чисел» меньше семи и число, заданное пользователем меньше семи или сумма двух «случайных чисел» больше семи и число, заданное пользователем больше семи, то игрок выигрывает ставку. В остальных случаях игрок проигрывает ставку.
Bank:=bank+4*st
Да
Да
Bank:=bank+st
Bank:=bank-st
Рис.4. Определение проигрыша или выигрыша ставки (блок 3).
Определение победы или поражения в игре осуществляется путём сравнения количества очков в банке игрока с нолём и тысячей. Если количество очков равно 0 игрок проиграл. Он может начать заново или уйти побежденным. Если количество очков больше или равно 1000 игрок победил, о чём сообщает диалоговое окно.
Да
Да
Рис.5. Определение победы или поражения в игре (блок 4).
1.2.3. Организация входных и выходных данных
В данной программе предусматривается использование следующих входных данных: пути к AVI-файлам, число, загаданное игроком, ставка. Данные число и ставка с помощью функции StrToint() вносятся в переменные chislo и st (типа byte) соответственно. Входные данные - пути к файлам, присваиваются свойству FileName медиаплееров. Выходная данная – отображение текущего количества очков в банке игрока. Очки отображаются в виде строки, чтобы преобразовать число в строку использовалась функция IntTostr.
1.2.4. Выбор состава программных и технических средств
Для решения данной задачи целесообразно применить интегральную среду разработки программ – Delphi 5. Среда Delphi позволяет достаточно быстро разрабатывать приложения для Windows. Возможностей Delphi в визуальном оформлении окон программ с избытком достаточно для создания игры «Кости». Для полноценной работы Delphi 5 достаточно:
Pentium 100;
ОЗУ – не менее 8 Мб;
Жесткий диск не менее 500 Мб;
1.3. Источники, использованные при разработке
При разработке данной программы использовались материалы: рабочего учебника – Юнита №5 Лабзина Т.А.. Система программирования Delphi. Москва 2001; Самоучителя – Основы программирования в Delphi7 Никита Культин Санкт-Петербург 2003.
2.Разработка рабочего проекта
2.1. Разработка программы
Для разработки приложения используется визуальная среда программирования Delphi 5. Проект программы содержит пять окон:
Aboutbox 1 – окно справки (о программе).
Aboutbox 2 – правила игры.
Aboutbox 3– ввод пути к AVI-файлам. (main form)
Aboutbox 4 – сообщение об ошибке ввода пути к AVI-файлам.
Form 1 – основное окно программы (игровое поле).
Окно form1. Основное окно программы (игровое поле).
1
2
3
4 17
5
6 16
7 15
8 14
9 10 11 12 13
Компонент Form1.
Свойства:
Bordericons (biMaximize) – False.
BorderStyle – bsSingle;
Caption – Кости;
Color – clTeal;
Position – poDesktopCenter;
Visible – False;
События:
OnActivate – присваиваются начальные значения.
OnClose – запрос подтверждения на выход.
OnMouseMove – для красивого оформления компонентам присваиваются следующие значения:
button1.Default:=false;
button2.Default:=false;
button3.Default:=false;
button4.Default:=false;
edit1.Color:=clwindow;
edit2.color:=clwindow;
1 – компонент MainMenu (класс TMainMenu)
Свойства:
Items
Меню(N1) Справка(N2)
Играть(N3) Правила(N7) – ShortCut – F1.
Заново(N4) О программе(N8) – ShortCut – F2
Выход(N6)
Свойство Caption N6 (меняется во время выполнения программы).
Свойство Enabled N3 (меняется во время выполнения программы).
События: нет.
2 – Компонент Label1 (класс TLabel)
Свойства:
Caption – Введите число;
Font – жирный, размер 10;
События: нет.
3 – Компонент Edit1. (класс TEdit)
Свойства:
Hint – Число от 2 до 12;
MaxLength – 2 (значение меняется во время выполнения программы);
События:
OnKeyPress – защита от ввода недопустимых символов.
OnMouseMove – для красивого оформления. Свойству Color присваивается – clyellow.
4 – Компонент Label2 (класс TLabel)
Свойства:
Caption – Сделайте ставку;
Font – жирный, размер 10;
События: нет.
5 – Компонент Label3 (класс TLabel)
Свойства:
Caption – Банк;
Font – жирный, размер 10;
События: нет.
6 – Компонент L4 (класс TLabel)
Свойства:
Caption – 100 (меняется во время выполнения программы);
Font – жирный, размер 10, цвет красный;
Name – L4;
События: нет.
7 – Компонент Edit2 (класс TEdit)
Свойства:
Hint – Не ставьте больше чем в банке;
MaxLength – 3;
События:
OnKeyPress – защита от ввода недопустимых символов.
OnMouseMove – для красивого оформления. Свойству Color присваивается – clred;
8 – Компонент Button2 (класс TButton)
Свойства:
Caption – Заново;
Cursor – crHandPoint;
Font – жирный, размер 10;
Hint – Начать сначала;
События:
OnClick – присваиваются начальные значения (игра начинается заново);
OnMouseMove – для красивого оформления. Свойству Default присваивается значение True;
9 – Компонент Button3 (класс TButton)
Свойства:
Caption – Выход;
Cursor – crHandPoint;
Font – жирный, размер 10;
Hint – Exit;
События:
OnClick – Вызывается процедура закрытия формы;
OnMouseMove – для красивого оформления. Свойству Default присваивается значение True;
10 – Компонент Button1 (класс TButton)
Свойства:
Caption – Играть;
Cursor – crHandPoint;
Font – жирный, размер 10;
Hint – Бросить кости;
События:
OnClick – Проверяется правильность ввода числа и ставки, воспроизводятся AVI-фалы, генерируются случайные числа, выводится графическое изображение кубиков, определяется проигрыш или выигрыш ставки, определяется проигрыш или выигрыш в игре.;
OnMouseMove – для красивого оформления. Свойству Default присваивается значение True;
11 – Компонент Mp1 (класс TmediaPlayer)
Свойства:
Display – Panel2;
Name – Mp1;
Visible – False;
События: нет.
12 – Компонент L5 (класс TLabel)
Свойства:
Caption – (меняется во время выполнения программы);
Font – жирный, размер 10, цвет красный;
Name – L5;
События: нет.
13 – Компонент Mp2 (класс TmediaPlayer)
Свойства:
Display – Panel1;
Name – Mp2;
Visible – False;
События: нет.
14 – Компонент Button4 (класс TButton)
Свойства:
Caption – Играть;
Cursor – crHandPoint;
Font – жирный, размер 10;
Hint – Всё на кон.
События:
OnClick – Выполняется оператор присваивания: edit2.Text:=l4.Caption; Все очки ставятся на кон
OnMouseMove – для красивого оформления. Свойству Default присваивается значение True;
15 – Компонент Panel1 (класс TPanel)
Свойства:
Caption – ;
Height – 105;
Width – 105;
События: нет.
16 – Компонент Panel2 (класс TPanel)
Свойства:
Caption – ;
Height – 105;
Width – 105;
События: нет.
17 – Компонент Label4 (класс TLabel)
Свойства:
Caption – Выпавшие кости;
Font – жирный, размер 14;
События: нет.
Также на форме присутствуют компоненты:
TImage1 и TImage2 (закрыты компонентами TPanel1 и TPanel2 соответственно)
Свойства:
Height – 105;
Width – 105
Visible – меняется во время выполнения программы.
Panel3 – Panel9 эти компоненты не оказывают влияния на ход выполнения программы. Они лишь служат своеобразным орнаментом. Изменённые свойства – размер и цвет.
Окно AboutBox1 – окно справки (о программе).
1
2
3
4
5
6 7
Компонент AboutBox1.
Свойства:
Caption – О программе;
Color – clHighlight;
Name – AboutBox1;
Position – poMainFormCenter;
События: нет
1 – Компонент L1 (класс TLabel)
Свойства:
Caption - (меняется программно);
Font – размер 10, подчеркнутый, цвет темно-синий;
ParentColor – True;
События: нет;
2 – Компонент Image (класс TImage)
Свойства:
Изменённых свойств нет (только загружена картинка);
События: нет.
3 – Компонент Label1 (класс TLabel)
Свойства:
Caption – Среда разработки ------ Delphi 5;
Font – размер 10, подчеркнутый, цвет темно-синий;
ParentColor – True;
События: нет.
4 – Компонент Label2 (класс TLabel)
Свойства:
Caption – Цифровая подпись отсутствует;
Font – размер 10, подчеркнутый, цвет темно-синий;
ParentColor – True;
События: нет.
5 – Компонент Label3 (класс TLabel)
Свойства:
Caption – Версия -------- 1.1;
Font – размер 10, подчеркнутый, цвет темно-синий;
ParentColor – True;
События: нет.
6 – Компонент OkButton (класс TButton)
Свойства:
Изменены размеры.
События: нет
7 – Компонент Panel1 (класс TPanel)
Свойства:
Color – clSilver;
События: нет
Окно AboutBox2 – окно правила игры.
1 8 7
2
3 6
4 5
Компонент AboutBox2
Свойства:
Bordericons (biSystemmenu) – False.
Caption – Правила игры;
Color – clHighlight;
Name – AboutBox2;
Position – poMainFormCenter;
События:
OnActivate – Для красоты выводим картинку, также выводим информацию (правила игры).
OnMouseMove – Вызываем процедуру FormActivate, чтобы вернуть первоначальный вид окну после события OnMouseMove на кнопке OK.
1 – Компонент Lab2 (класс TLabel)
Свойства:
Caption – (меняется во время работы программы);
Font – размер 10;
Name – lab2;
ParentColor – True;
События: нет;
2 – Компонент Image (класс TImage);
Свойства:
Height – 73;
Width – 73;
События: нет;
3 – Компонент Lab1 (класс TLabel)
Свойства:
Caption – Удачи!!!;
Font – размер 40, цвет красный;
Name – lab1;
ParentColor – True;
Visible – False (меняется во время работы программы);
События: нет;
4 – Компонент OkButton (класс Tbutton)
Свойства:
Из всех свойств изменены только размеры.
События:
OnMouseMove – изменяем внешний вид окна, желаем удачи игроку.
5 – Компонент Lab4 (класс TLabel)
Свойства:
Caption – Выиграть;
Font – размер 12, цвет травяной;
Name – lab4;
ParentColor – True;
Visible – False (меняется во время работы программы);
События: нет;
6 – Компонент Image1 (класс TImage);
Свойства:
Height – 105;
Visible – False (меняется во время работы программы);
Width – 105;
События: нет;
7 – Компонент Lab3 (класс TLabel)
Свойства:
Caption – Попробуй;
Font – жирный, размер 12, цвет желтый;
Name – lab3;
ParentColor – True;
Visible – False (меняется во время работы программы);
События: нет;
8 – Компонент Panel (класс TPanel)
Свойства:
Caption - ;
Color – clScrollBar;
События: нет.
Окно Aboutbox 3– ввод пути к AVI-файлам. (main form)
1 19
18
2
3 17
4 5 16
6
7 15
8
9 14
10
13
11
12
Компонент AboutBox3
Свойства:
Bordericons (biSystemmenu) – False.
BorderStyle – bsSingle;
Caption – Information;
Color – clGray;
Name – AboutBox3;
Position – poDesktopCenter;
(В окне Project Options окно AboutBox3 сделано главной формой – main form).
События: нет.
1 – Компонент Label1 (класс TLabel)
Свойства:
Caption – Для правильной работы приложения;
Font – жирный, размер 12;
ParentColor – True;
События: нет;
2 – Компонент Label2 (класс TLabel)
Свойства:
Caption – введите путь к файлам;
Font – жирный, размер 12;
ParentColor – True;
События: нет;
3 – Компонент Label3 (класс TLabel)
Свойства:
Caption – kos.avi и kos1.avi;
Font – жирный, размер 12;
ParentColor – True;
События: нет;
4 – Компонент Med1 (класс TMediaPlayer)
Свойства:
Display – Med2;
Name – Med1;
Visible – False;
События: нет
5 – Компонент Label4 (класс TLabel)
Свойства:
Caption – Пропишите путь вручную: ;
Font – жирный, размер 12;
ParentColor – True;
События: нет;
6 – Компонент Edit1 (класс TEdit)
Свойства:
Color – clYellow;
События: нет.
7 – Компонент Label5 (класс TLabel)
Свойства:
Caption – Либо кликните по имени файла;
Font – жирный, размер 12;
ParentColor – True;
События: нет;
8 – Компонент Disk1 (класс TDriveComboBox)
Свойства:
Color – clYellow;
Name – Disk1;
События:
OnChange – Выполняется следующий оператор присваивания
dir1.Drive:=disk1.Drive;
для «связки дисков с папками».
9 – Компонент Dir1 (класс TDirectoryListBox)
Свойства:
Color – clBlack;
Font – цвет белый
Name – Dir1;
События:
OnChange – Выполняется следующий оператор присваивания
file1.Directory:=dir1.Directory;;
для «связки файлов с папками».
10 – Компонент File1 (класс TFileListBox)
Свойства:
Color – clBlack;
Font – цвет белый;
Mask – Kos.avi;
Name – File1;
События:
OnClick – Выполняется следующий оператор присваивания
edit1.Text:=file1.FileName;
путь к выбранному файлу прописывается в Edit1.
11 – Компонент Button1 (класс TButton)
Свойства:
Caption – ok;
Font – жирный, размер 14;
События:
OnClick – проверяется правильность пути к файлам. Программа пытается (Try) открыть плееры в случае ошибки (Except) пользователю выводится сообщение об ошибке. Если ошибки нет, показывается основная форма (игровое поле).
12 – Компонент Button2 (класс TButton)
Свойства:
Caption – Выход;
Font – жирный, размер 14;
События:
OnClick – закрывается приложение.
13 – Компонент File2 (класс TFileListBox)
Свойства:
Color – clBlack;
Font – цвет белый;
Mask – Kos1.avi;
Name – File2;
События:
OnClick – Выполняется следующий оператор присваивания
Edit2.Text:=file2.FileName;
путь к выбранному файлу прописывается в Edit2.
14 – Компонент Dir2 (класс TDirectoryListBox)
Свойства:
Color – clBlack;
Font – цвет белый
Name – Dir2;
События:
OnChange – Выполняется следующий оператор присваивания
File2.Directory:=dir2.Directory;;
для «связки файлов с папками».
15 – Компонент Disk2 (класс TDriveComboBox)
Свойства:
Color – clYellow;
Name – Disk2;
События:
OnChange – Выполняется следующий оператор присваивания
Dir2.Drive:=disk2.Drive;
для «связки дисков с папками».
16 – Компонент Edit2 (класс TEdit)
Свойства:
Color – clYellow;
События: нет.
17 – Компонент Med2 (класс TMediaPlayer)
Свойства:
Display – Med1;
Name – Med2;
Visible – False;
События: нет
18 – Компонент Panel2 (класс TPanel)
Свойства:
Caption – ;
Color – clBlack
События: нет
19 – Компонент Panel1 (класс TPanel)
Свойства:
Caption – ;
Color – clSilver
События: нет
Окно Aboutbox 4 – сообщение об ошибке ввода пути к AVI-файлам
1
2
3 4 5
Компонент AboutBox4
Свойства:
BorderIcons (bsSystemMenu) – False;
Caption – WARNING;
Color – clTeal;
Name – AboutBox4;
События: нет.
1 – Компонент Label1 (класс TLabel)
Свойства:
Caption – О Ш И Б К А ! ! !;
Color – clYellow;
Font – жирный, размер 14;
События: нет.
2 – Компонент Label4 (класс TLabel)
Свойства:
Caption – Не верный путь, либо указаны;
Color – clWhite;
Font – жирный, размер 14;
События: нет.
3 – Компонент Label3 (класс TLabel)
Свойства:
Caption –Попробуйте ещё раз;
Color – clLime;
Font – жирный, размер 14;
События: нет.
4 – Компонент Label3 (класс TLabel)
Свойства:
Caption – одинаковые имена файлов;
Color – clYellow;
Font – жирный, размер 14;
События: нет.
5 – Компонент OkButton (класс TButton)
Свойства:
Caption – ok;
Font – жирный, размер 14;
События: нет.
2.2. Спецификация программы
Исполняемый файл программы “Игра “Кости”” носит название Kosti.exe, расположен на дискете в директории My project. Исполняемый файл выделен иконкой. Программа использует AVI-файлы, которые также находятся на дискете. Состав проекта:
Наименование | Обозначение | Примечание |
Abbox1.dfm | Файл формы aboutbox1 | Содержит список всех компонентов на форме aboutbox1 |
Abbox2.dfm | Файл формы aboutbox2 | Содержит список всех компонентов на форме aboutbox2 |
Abbox3.dfm | Файл формы aboutbox3 | Содержит список всех компонентов на форме aboutbox3 |
Abbox4.dfm | Файл формы aboutbox4 | Содержит список всех компонентов на форме aboutbox4 |
Cursproj.dfm | Файл формы Form1 | Содержит список всех компонентов на форме Form1 |
Abbox1.pas | Файл программного модуля формы aboutbox1 | Определяет функциональность формы aboutbox1 |
Abbox2.pas | Файл программного модуля формы aboutbox2 | Определяет функциональность формы aboutbox2 |
Abbox3.pas | Файл программного модуля формы aboutbox3 | Определяет функциональность формы aboutbox3 |
Abbox4.pas | Файл программного модуля формы aboutbox4 | Определяет функциональность формы aboutbox4 |
Cursproj.pas | Файл программного модуля формы Form1 | Определяет функциональность формы Form1 |
Abbox1.dcu | Объектный файл для abbox1.pas | Откомпилированная версия abbox1.pas |
Abbox2.dcu | Объектный файл для abbox2.pas | Откомпилированная версия abbox2.pas |
Abbox3.dcu | Объектный файл для abbox3.pas | Откомпилированная версия abbox3.pas |
Abbox4.dcu | Объектный файл для abbox4.pas | Откомпилированная версия abbox4.pas |
Cursproj.dcu | ; padding-bottom: 0in; padding-left: 0.08in; padding-right: 0in;">Объектный файл для Cursproj.pas | Откомпилированная версия Cursproj.pas |
Kos.avi | Файл – видеозапись | Содержит меняющееся изображение кубиков |
Kos1.avi | Файл – видеозапись | Содержит меняющееся изображение кубиков |
K.res | Файл ресурсов | Содержит пиктограммы и графические изображения. |
Kosti.res | Файл ресурсов | Содержит пиктограмму программы (Mainicon) |
Kosti.cfg | Файл конфигурации проекта | Используется компилятором |
Kosti.dof | Файл параметров проекта | Содержит текущие установки проекта: настройки компилятора и компоновщика, имена служебных каталогов, условные директивы |
Kosti.dpr | Файл проекта | Связывает все файлы, из которых состоит приложения |
Kosti.exe | Файл программы | Исполняемый файл |
Полный листинг программы представлен в приложении (стр. 45).
2.4. Описание программы
Общие сведения
Программа «Кости» написана на интегральной системе программирования Delphi 5. Она функционирует как приложение под Windows 9x95982000МЕXP. Исполняемый файл программы носит название Kosti.exe. Программа использует AVI-файлы, которые были созданы с помощью Macromedia Flash MX PRO 2004 версии 7.0
Функциональное назначение
Программа «Кости» является игрой, следовательно, её основное назначение – развлечение. Ограничений нет.
Описание логической структуры
При разработке программы «Кости» не использовались сложные логические описания. Для выбора действий программы при тех или иных условиях была применена стандартная конструкция If…..Else. Эта конструкция применена для определения проигрыша или выигрыша, предотвращения ошибок, а также для корректировки ввода символов в поля ввода ставки и числа.
Используемые технические средства
Для работы программы достаточно Pentium 100, 8мб оперативной памяти, около 1мб свободного пространства на жестком диске, Windows 95982000МЕXP, мышь; дополнительные устройства (дисководы гибких дисков, CDROM, принтер и т.п.) программой не используются.
Вызов и загрузка
Для того чтобы вызвать программу, необходимо запустить исполняемый файл Kosti.exe, который находится на дискете в папке my project (он выделен иконкой). Так же для нормального функционирования программы необходимы AVI-файлы, которые также имеются в папке my project.
Входные данные
В данной программе используются следующие входные данные: пути к AVI-файлам, ставка, число. Все эти данные вводит пользователь1. После ввода пути к файлам программа проверяет их правильность и в случае правильности “даёт добро” на дальнейшее выполнение программы. Данные ставка и число вводятся пользователем в виде строк, поэтому для работы с ними (подсчет, сравнение, вывод и т.д.) используются функции Strtoint и Inttostr.
Выходные данные
К выходным данным в программе относится переменная bank. Она выводится в недоступное для ввода поле и показывает текущее количество очков игрока. Также к выходным данным можно отнести битовые образы, отображающие графическое изображение поверхности кубиков и воспроизведение AVI-файлов.
2.5. Тестирование программы
Данная программа написана в среде программирования Delphi 5. Среда программирования Delphi 5 позволяет легко протестировать программу. Для этого используется трассировка – выполнение программы по шагам, инструкция за инструкцией. Трассировка помогает программисту определить на каком этапе выполнения программы возникает ошибка. Для того чтобы начать трассировку, необходимо из меню Run выбрать команду Step over или Trace into. В результате в окне редактора кода будет выделена первая инструкция программы и выделится следующая. Чтобы выполнить выделенную инструкцию, необходимо из меню Run выбрать команду Step over (нажать клавишу <F8>) или Trace into (нажать клавишу <F7>).
В любой момент можно завершить трассировку и продолжить выполнение программы в реальном темпе (зависит от скорости работы процессора). Для этого надо из меню Run выбрать команду Run.
При тестировании программы «Кости», не контролируемых программой ошибок, не обнаружено.
3. Внедрение
Условия выполнения программы.
Для работы программы достаточно Pentium 100, 8мб оперативной памяти, около 1мб свободного пространства на жестком диске, Windows 95, дополнительные устройства (дисководы гибких дисков, CDROM, принтер и т.п.) программой не используются.
Выполнение программы
Для запуска программы необходимо открыть папку my project и запустить исполняемый файл Kosti.exe. В результате откроется окно программы (Aboutbox3) ввода пути к AVI-файлам. В этом окне необходимо ввести пути к файлам Kos.avi и Kos1.avi. Это можно сделать двумя способами: прописать путь в поля для ввода либо кликнуть на имени файла. (Для удобства нужно поместить exe-файл в ту же директорию, что и avi-файлы.) После нажатия кнопки OK (в случае правильного ввода) появляется основное окно программы (игровое поле). Здесь имеются два поля для ввода числа и ставки. Ввод в эти поля ограничен, т.е. игрок может вводить только цифры. В поле, помеченное как «Введите число» необходимо ввести число от двух до двенадцати; в поле, помеченное как «Сделайте ставку» необходимо ввести число, не превышающее количество очков в банке. После ввода числа и ставки в соответствующие поля игроку остается нажать кнопку «Играть». В случае правильного ввода числа и ставки проиграются AVI-файлы (впечатление брошенных кубиков) и появятся изображения кубиков соответствующие выпавшим. Если сумма выпавших цифр меньше 7 и играющий задумал число меньшее 7, он выигрывает сделанную ставку. Если сумма выпавших цифр больше 7 и играющий задумал число большее 7, он также выигрывает сделанную ставку. Если играющий угадал сумму цифр, он получает в четыре раза больше очков, чем сделанная ставка. В другом случае игрок проигрывает ставку.
Это продолжается пока у игрока есть очки или игрок смог набрать 1000 очков. Если игрок потерял все свои очки, он проиграл, а если набрал 1000 очков, он выиграл. О выигрыше (также как и о проигрыше) играющий узнает по сообщению программы.
В нижнем левом углу формы находится кнопка «выход». С её помощью можно в любой момент выйти из программы.
Сообщения оператору
В процессе выполнения программы могут возникнуть сообщения об ошибке или об окончании игры (победе или поражении).
- Первое сообщение об ошибке может возникнуть во время ввода пути к AVI-файлам. В случае ошибки возникнет следующее сообщение:
В этом случае следует нажать кнопку ОК и повторить ввод (см. выполнение программы).
- Следующее сообщение может возникнуть, если пользователь не введя число и ставку, нажал кнопку «играть».
Следует нажать ОК
И ввести число и ставку.
- Также программой предусмотрены ситуации, когда введено число, а ставка нет и когда введена ставка, а число нет. На каждую из этих ошибок предусмотрены сообщения оператору:
и
В обоих случаях пользователю необходимо кликнуть ОК и выполнить предписания сообщения.
- Если в поле ввода числа введена единица, появится соответствующее сообщение (т.к. сумма цифр двух костей не может быть равна одному)
В этом случае также следует
исправить ошибку.
- На случай если пользователь случайно нажал кнопку «выход», “крестик ” или соответствующий пункт меню, предусмотрено сообщение – подтверждение на закрытие программы.
Если пользователь действительно
хочет выйти следует нажать – Да,
если нет – Нет.
- Чтобы проинформировать пользователя о конце игры используются сообщения:
1. Игра закончилась победой игрока.
Следует нажать ОК. Далее кнопка «играть»
будет недоступна пока не будет нажата кнопка
«заново».
2. Игра закончилась поражением игрока.
Следует нажать ОК. Далее кнопка
«играть» будет недоступна
пока не будет нажата кнопка
«заново».
Заключение
При проектировании программного обеспечения на Delphi перед программистом открываются широкие возможности этой мощной среды программирования. Borland Delphi позволяет создавать самые различные программы: от простейших однооконных приложений до программ управления распределенными базами.
Программа, написанная мной в процессе разработки курсового проекта, является крошечным примером мультимедийных возможностей Delphi. В программе используются компоненты необходимые для воспроизведения AVI-файлов. В Delphi имеется компонент MediaPlayer!!!
С помощью Delphi можно написать программу – проигрыватель, типа Light Alloy; программу, которая будет управлять приводом CD-ROMа; и т.д.
При всех этих возможностях разработка программ не требует большого количества времени, так как среда Delphi “берет на себя большую часть рутинной работы, оставляя программисту работу по конструированию диалоговых окон и функций обработки событий”1.
Библиографический список
1. Лабзина Т.А. Юнита №5. Система программирования Delphi. Москва 2001 г. – 138 стр.
2. Пестриков В.М. , Маслобоев А.Н. Turbo Pascal 7.0. Санкт-Петербург; издательство НиТ, 2003 г. – 368 стр.
3. Культин Н. Основы программирования в Delphi 7; издательство БХВ-Петербург, 2003 г. – 598 стр.
4. Андреев А.Г. Delphi. Петербург, 2001 г. – 960стр.
5. Маленков И.С. Программирование. Петербург, 1998 г. – 340стр.
6. Абдулов К.П. Delphi и Windows. Москва, 2002 г. – 756стр.
Приложение
Текст программы.
unit Abbox1;
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
type
TAboutBox1 = class(TForm)
Panel1: TPanel;
ProgramIcon: TImage;
l1: TLabel;
Version: TLabel;
Copyright: TLabel;
OKButton: TButton;
Label1: TLabel;
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
AboutBox1: TAboutBox1;
implementation
{$R *.DFM}
procedure TAboutBox1.FormActivate(Sender: TObject);
// При активации формы присваиваем свойству Caption метки строку.
begin
l1.Caption:=' Курсовой проект. Игра "Кости". '+#13+
'Разработал студент группы Оин-309-11'+#13+
'Вася Пупкин';
end;
end.
unit abbox2;
// В этом модуле используются ресурсы. Поэтому указываем файл ресурсов.
{r k.res}
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
type
TAboutBox2 = class(TForm)
Panel1: TPanel;
image: TImage;
lab2: TLabel;
lab3: TLabel;
lab4: TLabel;
lab1: TLabel;
OKButton: TButton;
Image1: TImage;
procedure FormActivate(Sender: TObject);
procedure OKButtonMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
AboutBox2: TAboutBox2;
// Переменные, в которые будут загружены картинки.
baks,kub:tbitmap;
implementation
{$R *.DFM}
procedure TAboutBox2.FormActivate(Sender: TObject);
// Операторы, которые будут выполнены при активации формы.
// На работу программы особого влияния не оказывают.
// Сделано для красивого оформления.
begin
// Создаём битовый образ для вывода картинки.
kub:=tbitmap.Create;
// Загружаем картинку из файла ресурсов.
kub.LoadFromResourceName(hinstance,'kub');
// Выводим картинку
image.Canvas.Draw(0,0,kub);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Прячем пока ненужные компоненты.
lab1.Visible:=false;
lab3.Visible:=false;
lab4.Visible:=false;
image1.Visible:=false;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Показываем компонент с первой картинкой.
image.Visible:=true;
// Меняем цвет компонентов.
panel1.Color:=clscrollbar;
aboutbox2.Color:=clhighlight;
// Показываем метку и выводим информацию.
lab2.Visible:=true;
lab2.Caption:=' Правила просты - угадай сумму цифр'+#13+
'двух костей и выиграй ставку увеличенную'+#13+
'в 4 раза. Если и загаданное число и сумма '+#13+
'цифр костей больше 7 ставка - выирана.'+#13+
'Если и загаданное число и сумма цифр '+#13+
'костей меньше 7 ставка - также выиграна.'+#13+
'В других случаях ставка будет проиграна.' ;
end;
procedure TAboutBox2.OKButtonMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
// При движении указателя на кнопке "OK" для красоты меняем внешний вид
// окна.
begin
// Прячем ненужные компоненты.
lab2.Visible:=false;
image.Visible:=false;
// Показываем нужные.
lab1.Visible:=true;
lab3.Visible:=true;
lab4.Visible:=true;
image1.Visible:=true;
// Создаём битовый образ второй картинки.
baks:=tbitmap.Create;
// Загружаем вторую картинку из файла ресурсов.
baks.LoadFromResourceName(hinstance,'baks');
// Выводим вторую картинку.
image1.Canvas.Draw(0,0,baks);
// Меняем цвет компонентов.
panel1.Color:=clinactivecaption;
aboutbox2.Color:=clinactivecaptiontext;
end;
procedure TAboutBox2.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
// При движении указателя на форме меняем внешний вид окна на первоначальный.
// Для чего вызываем процедуру активации формы.
begin
formactivate(sender);
end;
end.
unit abbox3;
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls, MPlayer, FileCtrl;
type
TAboutBox3 = class(TForm)
Panel1: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label4: TLabel;
Button1: TButton;
Button2: TButton;
file1: TFileListBox;
dir1: TDirectoryListBox;
disk1: TDriveComboBox;
disk2: TDriveComboBox;
dir2: TDirectoryListBox;
file2: TFileListBox;
Panel5: TPanel;
Med1: TMediaPlayer;
Med2: TMediaPlayer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure disk1Change(Sender: TObject);
procedure dir1Change(Sender: TObject);
procedure disk2Change(Sender: TObject);
procedure dir2Change(Sender: TObject);
procedure file1Click(Sender: TObject);
procedure file2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
AboutBox3: TAboutBox3;
implementation
// Подключаем модули основной формы и Aboutbox-а сообщающего об ошибке.
uses Cursproj,abbox4;
{$R *.DFM}
procedure TAboutBox3.Button1Click(Sender: TObject);
// Обработка события Onclick кнопки 'Ok'.
begin
// Присваеваем свойствам "FileName" медиаплейеров свойства Text Edit-ов.
med1.FileName:=edit1.Text;
med2.FileName:=edit2.Text;
// Следующий блок программы - защита от неверного пути к AVI-файлам.
// Пытаемся открыть медиаплейеры. Если возникнет ошибка (исключение)
// будут выполнены операторы после служебного слова 'Except'.
try
med1.Open;
med2.Open;
except
// Вызываем окно сообщающее об ошибке.
aboutbox4.ShowModal;
// Выходим из процедуры, т.о. даем пользователю возможность повторить
// ввод пути.
exit;
end;
// Если ошибки не произошло.
// Закрываем медиаплейеры этого "Aboutbox-а". Это необходимо,
// что бы AVI-файлы были доступны медиаплейерам основной формы
med1.Close;
med2.Close;
// Вызываем основную форму (поле игры).
form1.show;
// Свойствам 'FileName' медиаплейеров основной формы присваеваем
// теперь точно верные пути к AVI-файлам.
form1.mp1.FileName:=aboutbox3.Edit1.Text;
form1.mp2.FileName:=aboutbox3.Edit2.Text;
// "Прячем" окно ввода путей к AVI-файлам.
aboutbox3.Hide;
end;
procedure TAboutBox3.Button2Click(Sender: TObject);
// Клик на кнопке 'Выход'
begin
// Закрываем форму.
Close;
end;
// Следующие процедуры обрабатывают события OnChange компонентов //FileListBox,
// DirectoryListBox, DriveListBox. Обрабатывают таким образом, что бы //связать
// их между собой, т.е. при смене диска менялись папки, при смене папки
// менялись файлы, а при выборе файла путь к нему прописывался в Edit-ах.
procedure TAboutBox3.disk1Change(Sender: TObject);
begin
dir1.Drive:=disk1.Drive;
end;
procedure TAboutBox3.dir1Change(Sender: TObject);
begin
file1.Directory:=dir1.Directory;
end;
procedure TAboutBox3.disk2Change(Sender: TObject);
begin
dir2.Drive:=disk2.Drive;
end;
procedure TAboutBox3.dir2Change(Sender: TObject);
begin
file2.Directory:=dir2.Directory;
end;
// При выборе файла, путь к нему прописывается в Edit1
procedure TAboutBox3.file1Click(Sender: TObject);
begin
edit1.Text:=file1.FileName;
end;
// При выборе файла, путь к нему прописывается в Edit2
procedure TAboutBox3.file2Click(Sender: TObject);
begin
edit2.Text:=file2.FileName;
end;
end.
unit abbox4;
// Модуль окна, которое информирует об ошибке ввода пути к AVI-файлам.
// Не описано ни одной процедуры. Все надписи внесены при установке
// свойств компонентов.
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
type
TAboutBox4 = class(TForm)
OKButton: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
var
AboutBox4: TAboutBox4;
implementation
{$R *.DFM}
end.
unit Cursproj;
//Указываем файл ресурсов.
{$r k.res}
interface
uses
//Стандартные модули.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, StdCtrls, ExtCtrls, MPlayer;
//Компоненты и процедуры использующиеся в программе.
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Button4: TButton;
Label2: TLabel;
Label3: TLabel;
l4: TLabel;
Image1: TImage;
Image2: TImage;
Label4: TLabel;
l5: TLabel;
Panel1: TPanel;
Panel2: TPanel;
mp1: TMediaPlayer;
mp2: TMediaPlayer;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Panel8: TPanel;
Panel9: TPanel;
procedure N8Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button3Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button4MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Edit2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//Переменные, в которые будут загружены картинки.
r1,r2,baks:tbitmap;
implementation
//Подключение модулей "ABOUTBOX-ов".
uses Abbox1, abbox2, abbox3;
{$R *.DFM}
procedure TForm1.N8Click(Sender: TObject);
begin
//Вызов окна о программе
aboutbox1.showmodal;
end;
procedure TForm1.N7Click(Sender: TObject);
begin
//Вызов окна правила игры
aboutbox2.showmodal;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
//Процедура защиты от ввода недопустимых символов в поле ввода числа
begin
//если введен символ "1", то следующим может быть только "0", "1" или "2"
if edit1.Text='1' then
begin
edit1.MaxLength:=2;
case key of
'0'..'2',#8:
else key:=chr(0); //иначе символ не отображать
end
end
else //Пока ничего не введено (ноль не отображается).
case key of
'1'..'9',#8: //отображать только цифры. Разрешено использовать Backspase.
else key:=chr(0);
end;
//Если введена цифра 2,3,4,5,6,7,8 или 9 максимальная длинна строки 1 символ.
if (edit1.Text='2') or (edit1.Text='3') or (edit1.Text='4')
or(edit1.Text='5') or (edit1.Text='6') or (edit1.Text='7')
or(edit1.Text='8') or (edit1.Text='9') then
edit1.MaxLength:=1
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
// Для поля ввода ставки запрет ненужных символов анологичен.
begin
edit2.MaxLength:=3;
if (edit2.Text='') or (strtoint(edit2.text)>strtoint(l4.caption)) then
case key of
'1'..'9',#8:
else key:=chr(0)
end
else
case key of
'0'..'9',#8:
else key:=chr(0)
end
end;
//Основная часть программы. Клик на кнопке 'Играть'.
procedure TForm1.Button1Click(Sender: TObject);
//Используемые переменные.
// St - ставка игрока.
// bank- переменная отвечающая за кол-во очков.
// Sum - сумма цифр двух костей.
// Chislo - число загаданное игроком.
// K1,k2 - выпавшие кости.
var sum,chislo,k1,k2:byte;st,bank:integer;
// "Перехват" возможных ошибок.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
begin
// Если не введены ни число ни ставка.
if (edit1.Text='') and (edit2.Text='') then
begin
// Выводится соответствующее сообщение и программа выходит из процедуры.
messagedlg('Введите число и ставку',mterror,[mbok],0);
edit1.SetFocus;
exit;
end;
// Если не введено число.
if edit1.Text='' then
begin
// Выводится соответствующее сообщение и программа выходит из процедуры.
messagedlg('Введите число',mterror,[mbok],0);
edit1.SetFocus;
exit;
end;
// Если не введена ставка.
if edit2.Text='' then
begin
// Выводится соответствующее сообщение и программа выходит из процедуры.
messagedlg('Сделайте ставку',mterror,[mbok],0);
edit2.SetFocus;
exit;
end;
// Если ставка равна нолю
if edit2.Text='0' then
begin
// Выводится соответствующее сообщение и программа выходит из процедуры.
messagedlg('Ноль это не ставка',mterror,[mbok],0);
edit2.SetFocus;
exit;
end;
// Преобразовываем строковые данные полей для ввода числа иставки и
// заносим в соответствующие переменные.
st:=strtoint(edit2.text);
chislo:=strtoint(edit1.text);
// Если игрок загадал единицу.
if chislo=1 then
begin
// Выводится соответствующее сообщение и программа выходит из процедуры.
messagedlg('Сумма цифр двух костей '+#13+
'не может быть равна - 1.',mterror,[mbok],0);
edit1.Text:='';
edit1.SetFocus;
exit;
end;
// Если игрок сделал ствку больше чем есть в банке.
if st>strtoint(l4.caption) then
begin
// Выводится соответствующее сообщение и программа выходит из процедуры.
messagedlg('В долг играть нельзя',mterror,[mbok],0);
edit2.SetFocus;
exit;
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// "Прячем" компоненты для вывода иллюстраций.
image1.Visible:=false;
image2.Visible:=false;
// "Показываем" компоненты (экраны) для вывода AVI-файлов.
panel1.Visible:=true;
panel2.Visible:=true;
// Открываем медиаплейеры и проигрываем AVI-файлы.
// Не предусматриваем исключения т.к. предусмотрели при закрытии
// формы для ввода путей к AVI - файлам.
mp1.Open;
// Задаём размеры области вывода AVI-файла.
mp1.DisplayRect:=rect(0,0,105,105);
// Воспроизведение
mp1.Play;
mp2.Open;
// Задаём размеры области вывода AVI-файла.
mp2.DisplayRect:=rect(0,0,105,105);
// Воспроизведение
mp2.Play;
// Устанавливаем задержку выполнения программы.
// Что-бы проиграть AVI-файл.
sleep(700);
// "Прячем" компоненты (экраны) для вывода AVI-файлов.
panel1.Visible:=false;
panel2.Visible:=false;
// "Показываем" компоненты для вывода иллюстраций.
image1.Visible:=true;
image2.Visible:=true;
// Включаем генератор случайных чисел.
randomize;
// "Бросаем" кубики.
// Присваеваем соответствующим переменным функцию random(6) и прибавляем 1.
k1:=random(6)+1;
k2:=random(6)+1;
// Заносим в переменную сумму цифр костей.
sum:=k1+k2;
// Создаём битовый образ для вывода изображения первого кубика.
r1:=tbitmap.Create;
// Загружаем картинку из файла ресурсов.
// Имя рисунка указываем с учётом выпавшей цифры.
r1.LoadFromResourceName(hinstance,'b'+inttostr(k1));
// Выводим картинку.
image1.Canvas.Draw(0,0,r1);
// Создаём битовый образ для вывода изображения второго кубика.
r2:=tbitmap.Create;
// Загружаем картинку из файла ресурсов.
// Имя рисунка указываем с учётом выпавшей цифры.
r2.LoadFromResourceName(hinstance,'b'+inttostr(k2));
// Выводим картинку.
image2.Canvas.Draw(0,0,r2);
{=========================================================}
// Следующая часть программы определяет проиграл или выиграл игрок.
// А так же величину выигрыша или проигрыша.
// Если загаданное число равно сумме выпавших костей.
if sum=chislo then
begin
// Ставку увеличиваем в 4 раза, прибавляем к имеющимся очкам в банке.
bank:=strtoint(l4.caption)+4*st;
// В поле для вывода кол-ва очей заносим теперешнее значение.
l4.Caption:=inttostr(bank);
// В метку для вывода информации
// выводим сообщение о выигрыше и его кол-во.
l5.Caption:='Невероятно!!! Вы угадали!!!'+#13+
'Выигрыш - '+inttostr(4*st);
end
else
// Следуюшее условие. Если и загаданное число и сумма цифр двух
// костей одновременно больше или меньше семи.
if (chislo<7) and (sum<7) or (chislo>7) and (sum>7) then
begin
// Ставку прибавляем к имеющимся очкам в банке.
bank:=strtoint(l4.caption)+st;
// В поле для вывода кол-ва очей заносим теперешнее значение.
l4.Caption:=inttostr(bank);
// В метку для вывода информации
// выводим сообщение о выигрыше и его кол-во.
l5.Caption:='Вы выиграли - '+inttostr(st)+#13+
'Вам определённо везёт!';
end
else
// Все остальные ситуации - проигрышные.
begin
// От имеющихся очей в банке отнимаем ставку.
bank:=strtoint(l4.caption)-st;
// В поле для вывода кол-ва очей заносим теперешнее значение.
l4.Caption:=inttostr(bank);
// В метку для вывода информации
// выводим сообщение о проигрыше и его кол-во.
l5.Caption:='Вы проиграли - '+inttostr(st)+#13+
'Попробуйте ещё!';
end;
// Определение победы или поражения в игре.
// Если кол-во очей в банке игрока превышает 1000, игрок победил.
if strtoint(l4.caption)>=1000 then
// С помощью диалогового окна с одной кнопкой
// выводим сообщение о победе в игре.
begin
messagedlg(' Вы обанкротили казино!!!'+#13+
'Вы можете начать заново.',mtcustom,[mbok],0);
// Свойству "доступность" кнопки и пункту меню 'Играть'
// присваеваем значение False.
n3.Enabled:=false;
button1.Enabled:=false;
end;
// Если кол-во очей в банке игрока равно 0, игрок проиграл.
// Заметим, что кол-во очей в банке не может быть отрицательным,
// т.к. игрок не может поставить больше чем есть в банке,
// поэтому не используем знак '<='.
if strtoint(l4.caption)=0 then
// выводим сообщение о поражении в игре.
begin
messagedlg(' Вы банкрот.'+#13+
' Начните заново или уходите побеждённым',mtcustom,[mbok],0);
// Свойству "доступность" кнопки и пункту меню 'Играть'
// присваеваем значение False.
n3.Enabled:=false;
button1.Enabled:=false;
// Для пробуждения азарта у игрока свойству Caption кнопки и
// пункту меню 'Выход' присваеваем не поднимающее дух выражение.
n6.Caption:='Уйти побеждённым';
button3.Caption:=' Уйти побеждённым';
end;
edit1.SetFocus;
end;
{=========================================================}
procedure TForm1.FormActivate(Sender: TObject);
// Операторы, которые выполняет программа при активации формы.
begin
// "прячем" компоненты (экраны) для вывода AVI-файлов.
panel1.Visible:=false;
panel2.Visible:=false;
// Создаём битовый образ.
baks:=tbitmap.Create;
// Загружаем картинку из файла ресурсов.
baks.LoadFromResourceName(hinstance,'baks');
// Для красивого оформления в компоненты для вывода иллюстраций, пока,
// до хода игрока, выводим рисунок.
image1.Canvas.Draw(0,0,baks);
image2.Canvas.Draw(0,0,baks);
// В метку для вывода сообщений о выигрыше или проигрыше выводим пожелание.
l5.Caption:=' Удачи!!!';
// Т.к. во время выполнения меняются надписи на кнопке и пункте меню
//'Выход', и в дальнейшем нам пригодится эта процедура присвоим
//"нормальные" надписи.
button3.Caption:='Выход';
n6.Caption:='Выход';
// По той же причине
n3.Enabled:=true;
button1.Enabled:=true;
// Присвоим нулевые значения полям для ввода числа и ставки
// и стартовое значение величены очей.
edit1.Text:='';
edit2.Text:='';
l4.Caption:='100';
end;
procedure TForm1.Button2Click(Sender: TObject);
// Клик на кнопке 'Заново'.
begin
// Необходимо начать игру с начала для этого просто вызовем процедуру:
FormActivate(Sender)
end;
procedure TForm1.Button4Click(Sender: TObject);
// Клик на кнопке 'Ва-банк'.
begin
// Все очки банка заносим в поле для ввода ставки.
edit2.Text:=l4.Caption;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
// Операторы которые выполняются при попытке закрыть приложение.
begin
// Стандартное Windows-кое окно с двумя кнопками (надписи на русском).
if MessageBox(Form1.Handle,
PChar('Хотите выйти?'),
PChar('КОСТИ'), 4)=mrYes then
// Клик на кнопке 'Да'
begin
// Параметру процедуры FormClose присваемваем значение cafree
// (освободить) закрыть.
action:=cafree;
// Нельзя забыть про спрятавшееся окно Aboutbox2
// если его не закрыть "от него" не освободится оперативная память.
aboutbox3.close;
end
else
// Иначе (клик на кнопке 'нет')
// Параметру процедуры FormClose присваемваем значение canone
// ничего не делать.
action:=canone;
end;
procedure TForm1.Button3Click(Sender: TObject);
// Клик на кнопке 'Выход'.
begin
// Вызываем процедуру закрытия формы.
close
end;
procedure TForm1.N6Click(Sender: TObject);
// Клик на пункте меню 'Выход'.
begin
// Вызываем процедуру закрытия формы.
close
end;
procedure TForm1.N3Click(Sender: TObject);
// Клик на пункте меню 'Играть'
// Дублирует кнопку 'Играть'.
begin
// Вызываем процедуру обработки события Onclick кнопки 'Играть'.
button1.Click
end;
procedure TForm1.N4Click(Sender: TObject);
// Клик на пункте меню 'Заново'
// Дублирует кнопку 'Заново'.
begin
// Вызываем процедуру обработки события Onclick кнопки 'Заново'.
button2.Click
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Следующие процедуры обрабатывают события MouseMove на разных компонентах,
// и для красивого оформления меняют их внешний вид.
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
button1.Default:=true;
end;
procedure TForm1.Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Button2.Default:=true;
end;
procedure TForm1.Button3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Button3.Default:=true;
end;
procedure TForm1.Button4MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Button4.Default:=true;
end;
procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
edit1.Color:=clyellow;
end;
procedure TForm1.Edit2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
edit2.Color:=clred;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
// Движение указателя мыши на форме возвращает внешний вид компонентов.
begin
button1.Default:=false;
button2.Default:=false;
button3.Default:=false;
button4.Default:=false;
edit1.Color:=clwindow;
edit2.color:=clwindow;
end;
end.
1 Macromedia Flash MX Professional 2004 - это интегрированная среда разработки
управляемых данными приложений, интерактивных презентаций и видеоматериалов
1 Такого неудобства для пользователя, как ввод пути к AVI-файлам, можно легко избежать с помощью программы создания установочных дисков, например - InstallShield Express. Но это выходит за рамки этого курсового проекта.
1 Культин Н. Основы программирования в Delphi 7; издательство БХВ-Петербург, 2003 г. Страница 1.