Автор: Пользователь скрыл имя, 13 Декабря 2011 в 15:37, курсовая работа
Условие задачи:
Разработать программу, моделирующую игру «Кости». Играющий называет любое число в диапазоне от 2 до 12 и ставку, которую он делает в этот ход. Программа с помощью датчика случайных чисел дважды выбирает числа от 1 до 6 («бросает кубик», на гранях которого цифры от 1 до 6). Если сумма выпавших цифр меньше 7 и играющий задумал число меньшее 7, он выигрывает сделанную ставку. Если сумма выпавших цифр больше 7 и играющий задумал число большее 7, он также выигрывает сделанную ставку. Если играющий угадал сумму цифр, он получает в четыре раза больше очков, чем сделанная ставка. Ставка проиграна, если не имеет место ни одна из описанных ситуаций. В начальный момент у играющего 100 очков. В программе должно присутствовать графическое изображение поверхности кубика при каждом ходе игрока.
Введение 4
Глава 1. Разработка эскизного и технического проектов программы 5
1.1. Назначение и область применения 5
1.2. Технические характеристики 5
1.2.1. Постановка задачи 5
1.2.2. Описание алгоритма 7
1.2.3. Организация входных и выходных данных 9
1.2.4. Выбор состава технических и программных средств 10
Глава 2. Разработка рабочего проекта 11
2.1. Разработка программы 11
2.2. Написание программы 14
2.3. Спецификация программы 17
2.4. Текст программы 18
2.5. Тестирование программы 24
Глава 3. Внедрение 25
3.1. Условия выполнения программы 25
3.2. Выполнение программы 25
3.3. Сообщение оператору 25
Заключение 27
Список литературы 28
Приложение 1
Приложение 2
Text = 'Выигрыш:'
end>
SimplePanel = False
Событий нет.
7 - компонент LKredit: Tlabel
Свойства:
Alignment = taCenter
AutoSize = False
Caption = '100'
Событий нет.
8 - компонент BGamer: Tbutton
Свойства:
Caption = 'Игрок'
Событий:
OnClick = BgamerClick – выбор игрока
9 - компонент SEStavka: TspinEdit
Свойства:
EditorEnabled = False
MaxValue = 100
MinValue = 1
Value = 1
Событий нет.
10 - компонент BHod: Tbutton
Свойства:
Caption = 'Ход'
События:
OnClick = BhodClick – сделать ход
11 - компонент SEChislo: TspinEdit
Свойства:
EditorEnabled = False
MaxValue = 12
MinValue = 2
Value = 7
Событий нет.
12 - компонент BExit: Tbutton
Свойства:
Caption = 'Выход'
Собития:
OnClick = BexitClick – выход из игры
13 - компонент GroupBox1: TgroupBox
Событий нет.
Рис. 4
Окно выбора игрока
Компонент FormNew –окно выбора игрока
Свойства:
BorderStyle = bsDialog
Caption = 'Выбор игрока'
Position = poMainFormCenter
События:
OnCreate = FormCreate –заполнение списка именами игроков
1 - компонент GroupBox1: TGroupBox
Свойства:
Align = alClient
2 - компонент ListBox: TlistBox
3 – компонент BNew: TButton
Свойства:
Caption = 'Новый'
События:
OnClick = BnewClick – создание нового игрока
4 – компонент BDel: Tbutton
Свойства:
Caption = 'Удалить'
События:
OnClick = BdelClick – удаление выбранного игрока
5 - компонент BOK: TButton
Свойства:
Caption = 'Выбрать'
События:
OnClick = BOKClick – выбрать игрока.
Программную реализацию разработанных алгоритмов содержат обработчики событий. Все по порядку.
При создании главной формы игры – FormGame обрабатывается событие FormActivate. В ней вызывается второе окно, выбор игрока – FormNew. При создании формы второго окна обрабатывается событие FormCreate. В этой процедуре происходит заполнение списка именами игроков. Сначала очищается список, затем открывается файл, хранящий информацию об игроках. На этом этапе происходит проверка на возможность возникновения ошибки, при этом используется структура: try … except … end;. Ошибка может возникнуть при отсутствии файла с записями на диске. Если такая критическая ситуация возникнет то файл будет создан и в него запишется ‘0’, который будет означать количество записей об игроках в файле. После организован цикл считывания из файла и добавление имен игроков в список. В конце файл закрывается.
При закрытии формы FormGame обрабатывается событие FormClose, в котором происходит вызов процедуры перезаписи информации об игроках. Это нужно для того, чтобы сохранить измененную информацию о текущем игроке. При нажатии кнопки Bexit, возникает событие BexitClick, в котором происходит вызов процедуры FormClose.
Если будет нажата кнопка BGamer, то выполнится обработчик события этого нажатия – BGamerClick. В нем происходит вызов процедуры перезаписи информации об игроках и вызывает в модальном режиме окно выбора игрока.
Когда игрок сделает ставку и выберет число, на которое он поставил, то следует нажать на кнопку BHod. При этом будет обработано событие BhodClick. В процедуре включается таймер для «бросков» кубиков и в строку состояния выводится сообщение «Бросаю кубики».
Когда таймер включен. то через какой-то промежуток времени обрабатывается событие TimerTimer. В этом обработчике реализована вся главная часть программы. Сначала присваивается двум элементам массива значения от 1 до 6, затем происходит вывод картинок граней кубиков. Увеличивается значение переменной, хранящей количество вызовов процедуры TimerTimer. Если это значение равно 6, то таймер выключается, выводится строку состояния информация о выпавших числах кубиков и подсчитывается выигрыш игрока по заданному условию. Затем выигрыш либо прибавляется, либо отнимается от кредита игрока. Далее проверяется, если кредит игрока равен 0, то выводится сообщение о проигрыше, игрок удаляется и вызывается окно выбора игрока. Если кредит игрока больше 0, то определяются возможная максимальная ставка игрока и игра продолжается.
Все обработчики событий, возникающие в пределах окна выбора игрока, работают с файлами. Обобщенная блок-схема алгоритма работы с файлами приведена на рисунке 2.
Для создания нового игрока следует нажать на кнопку BNew. При этом будет обработано событие BNewClick. В этой процедуре открываются два файла: один для чтения, другой – временный файл, для записи. Из первого файла перезаписывается вся информация об уже существующих игроках во временный файл и добавляется имя нового игрока, а также начальные значения кредита и всего остального. После этого файлы закрываются, временный файл копируется в старый и удаляется, имя игрока добавляется в общий список и становится доступным для выбора.
В процедуре SaveGamer происходит перезапись старой информации об игроках и запись, о текущем игроке. Почти ничем эта процедура не отличается от вышеупомянутой, только вместо начальных значений (кредита и т. д.) в файл записываются текущие (набранные в ходе игры).
Когда игрок выбран из списка и нажата кнопка BOK, происходит обработчик события нажатия – BOKClick. В этой процедуре в файле перебираются все игроки пока очередь дойдет до выбранного из списка. Затем читаются поля этого игрока и объектам формы окна игры присваиваются значения, записанные в файле (кредит, максимальная ставка и т. д.). После файл закрывается.
Процедура
удаления игрока – BDelClick. Блок-схема
алгоритма удаления игрока приведена
на рисунке 5.
Рис. 5 Блок-схема алгоритма удаления игрока из общего списка
Исполняемый
файл программы «Кости» имеет
название Kosti.EXE. Его работоспособность
не зависит от расположения на диске. Наименования
файлов входящих в проект и краткая информация
об их содержании отображены в таблице
3.
Таблица 3
Наименование | Обозначение | Примечание |
Kosti.dof | Файл параметров проекта | Содержит текущие установки проекта: настройки компилятора и компоновщика, имена служебных каталогов, условные директивы |
Kosti.dpr | Файл проекта | Связывает все файлы, из которых состоит приложение |
Kosti.cfg | Файл, содержащий настройки проекта | Содержит информацию о том, какие окна открыты и в каких позициях они расположены. |
Kosti.res | Файл ресурсов | Содержит пиктограммы, графические изображения |
Unit1.pas | Файл программного модуля для формы FormGame | Определяет функциональность формы FormGame |
Unit1.dfm | Файл формы FormGame | Содержит список свойств всех компонентов, включённых в форму FormGame |
Unit1.dcu | Объектный файл для Unit1.pas | Откомпилированная версия Unit1.pas |
Unit2.pas | Файл программного модуля для формы FormNew | Определяет функциональность формы FormNew |
Unit2.dfm | Файл формы
FormNew |
Содержит список свойств всех компонентов, включённых в форму FormNew |
Unit2.dcu | Объектный файл для Unit2.pas | Откомпилированная версия Unit2.pas |
Текст
программы для формы –
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Spin, ComCtrls;
type
TFormGame = class(TForm)
ImageKubik: TImage;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
BHod: TButton; //Кнопка хода
BExit: TButton; //Выход из игры
Panel1: TPanel;
ImageTable: TImage;
SEStavka: TSpinEdit;
SEChislo: TSpinEdit;
LKredit: TLabel;
StatusBar: TStatusBar;
Timer: TTimer;
BGamer: TButton; //Кнопка выбора игрока
procedure BExitClick(Sender: TObject);
procedure BHodClick(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BGamerClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormGame: TFormGame;
Rotation:integer = 0; //Количество заходов в процедуру таймера
Kredit:longint; //Текущий кредит игрока
Kub:array [1..2] of integer; //Выпавшие значения кубиков
implementation
uses Unit2;
{$R *.DFM}
//----------------------------
//Выход из игры
//----------------------------
procedure TFormGame.BExitClick(Sender: TObject);
begin
Close; //Закрытие окна
end;
//----------------------------
//Ход игрока (бросить кубики)