Автор: Пользователь скрыл имя, 05 Декабря 2011 в 21:59, дипломная работа
Разработать программу, моделирующую игру «Кости». Играющий называет любое число в диапазоне от 2 до 12 и ставку, которую он делает в этот ход. Программа с помощью датчика случайных чисел дважды выбирает числа от 1 до 6 («бросает кубик», на гранях которого цифры от 1 до 6). Если сумма выпавших цифр меньше 7 и играющий задумал число меньшее 7, он выигрывает сделанную ставку. Если сумма выпавших цифр больше 7 и играющий задумал число большее 7, он также выигрывает сделанную ставку. Если играющий угадал сумму цифр, он получает в четыре раза больше очков, чем сделанная ставка. Ставка проиграна, если не имеет место ни одна из описанных ситуаций. В начальный момент у играющего 100 очков. В программе должно присутствовать графическое изображение поверхности кубика при каждом ходе игрока.
ВВЕДЕНИЕ
ОСНОВНАЯ ЧАСТЬ
1 РАЗРАБОТКА ЭСКИЗНОГО И ТЕХНИЧЕСКОГО ПРОЕКТОВ ПРОГРАММЫ
1.1.Назначение и область применения
1.2.Технические характеристики
1.2.1. Постановка задачи
1.2.2. Описание алгоритма
1.2.3. Организация входных и выходных данных
1.2.4. Выбор состава технических и программных средств
2 РАЗРАБОТКА РАБОЧЕГО ПРОЕКТА
2.1 Разработка рабочего проекта
2.2 Написание программы
2.3 Текст программы
2.4 Тестирование программы
ЗАКЛЮЧЕНИЕ
ГЛОССАРИЙ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЯ
компонент Label2: Tlabel
Свойства:
Caption = 'Ставка:'
Событий нет.
компонент Label3: Tlabel
Свойства:
Caption = 'Число:'
Событий нет.
5 - компонент ImageKubik: Timage
Свойства:
AutoSize = True
Visible = False
Событий нет.
6 - компонент StatusBar: TstatusBar
Свойства:
Color = clWhite
Panels = <
item
Alignment = taCenter
Width = 125
item
Alignment = taCenter
Text = 'Выпало:'
item
Alignment = taCenter
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 – выбрать игрока.
2.2 Написание программы
Программную реализацию разработанных алгоритмов содержат обработчики событий. Все по порядку.
При создании главной формы игры – 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 Блок-схема алгоритма удаления игрока из общего списка
2.3 Текст программы
Текст программы для формы – FormGame:
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;
//-----------------------
//Ход игрока (бросить кубики)
//-----------------------
procedure TFormGame.BHodClick(Sender: TObject);
begin
Timer.Enabled:=True; //Включение таймера
StatusBar.Panels[0].Text: