Автор: Пользователь скрыл имя, 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
//----------------------------
procedure TFormGame.BHodClick(Sender: TObject);
begin
Timer.Enabled:=True; //Включение таймера
StatusBar.Panels[0].Text:='
StatusBar.Panels[1].Text:='
StatusBar.Panels[2].Text:='
end;
//----------------------------
//Вывод граней кубиков и подсчет выигрыша
//----------------------------
procedure TFormGame.TimerTimer(Sender: TObject);
var i:integer; //Для создания цикла
Viigresh:longint; //Выигрыш
begin
Randomize;
for i:=1 to 2 do Kub[i]:=random(6)+1; //Подбор случ. чисел
//Вывод граней кубиков
ImageTable.Canvas.CopyRect(
ImageKubik.Canvas,
Rect((Kub[1]-1)*60,0,(Kub[1]-
ImageTable.Canvas.CopyRect(
ImageKubik.Canvas,
Rect((Kub[2]-1)*60,0,(Kub[2]-
//Увеличение количества раз заходов в процедуру
Rotation:=Rotation+1;
if Rotation=6 then begin
Rotation:=0;
Timer.Enabled:=False; //Выключение таймера
Viigresh:=0; //Очистка значения выигрыша
//Подсчет выигрыша
if (Kub[1]+Kub[2] < 7) and (SEChislo.Value < 7) then Viigresh:=SEStavka.Value;
if (Kub[1]+Kub[2] > 7) and (SEChislo.Value > 7) then Viigresh:=SEStavka.Value;
if Kub[1]+Kub[2] = SEChislo.Value then Viigresh:=SEStavka.Value * 4;
StatusBar.Panels[1].Text:='
StatusBar.Panels[2].Text:='
SEStavka.MaxValue:=Kredit; //Макс ставка не превышает кредит
if Viigresh = 0 then begin
Viigresh:=Viigresh - SEStavka.Value; //Минусовой выигрыш
StatusBar.Panels[0].Text:='Ты проиграл!';
end else StatusBar.Panels[0].Text:='Ты выиграл!';
Kredit:=Kredit+Viigresh; //Увеличение кредита и
LKredit.Caption:=IntToStr(
//Если кредит кончился
if Kredit<=0 then begin
Application.MessageBox('Ты проиграл!!!', 'Проигрыш',MB_OK+MB_
FormNEw.BDelClick(nil); //Удаление игрока
FormNew.listbox.Refresh; //Перерисовка списка игроков
FormNew.ShowModal; //Вызов окна выбора игрока
end
else if SEStavka.Value > Kredit then begin
SEStavka.Value:=Kredit;
SEStavka.MaxValue:=Kredit; //Максимальное значение ставки
end;
end;
end;
//----------------------------
//Выбор игрока
//----------------------------
procedure TFormGame.FormActivate(Sender: TObject);
begin
FormNew.ShowModal; //Вызов окна выбора игрока
end;
//----------------------------
//Закрытие игры
//----------------------------
procedure TFormGame.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FormNew.SaveGamer; //Сохранение игроков
end;
//----------------------------
//Выбор игрока
//----------------------------
procedure TFormGame.BGamerClick(Sender: TObject);
begin
FormNew.SaveGamer; //Сохранение текущего игрока
FormNew.ShowModal; //Вызов окна выбора игрока
end;
end.
Текст
программы для формы –
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TFormNew = class(TForm)
GroupBox1: TGroupBox;
ListBox: TListBox;
BNew: TButton; //Создание нового игрока
BDel: TButton; //Удаление выбранного игрока
BOK: TButton; //Выбор выделенного игрока
procedure BOKClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BNewClick(Sender: TObject);
procedure SaveGamer;
procedure BDelClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormNew: TFormNew;
FO, FS:TextFile; //Файлы для чтения и записи
S, NameGamer:string; //Для чтения строчек из файла и имя игрока
i, j,
KolGamer:integer; //Количество игроков
implementation
uses Unit1;
{$R *.DFM}
//----------------------------
//Перезапись файла игроков
//----------------------------
procedure TFormNew.SaveGamer;
begin
AssignFile(FO, 'Players.dat'); AssignFile(FS, '1.dat');
Reset(FO); Rewrite(FS);
//Чтение количества игроков
Readln(FO, S); KolGamer:=StrToInt(S);
Writeln(FS, S); //Запись во временный файл
//Цикл перебора всех игроков в файле
for i:=1 to KolGamer do
if i<>ListBox.ItemIndex+1 then //Если игрок не текущий
for j:=1 to 6 do begin Readln(FO, S); Writeln(FS, S); end
else begin
for j:=1 to 6 do Readln(FO, S); //Пропуск 6 строчек
//Запись новых значений о текущем игроке
Writeln(FS, NameGamer);
Writeln(FS, IntToStr(Kredit));
Writeln(FS, IntToStr(FormGame.SEStavka.
Writeln(FS, IntToStr(FormGame.SEChislo.
Writeln(FS, IntToStr(Kub[1]));
Writeln(FS, IntToStr(Kub[2]));
end;
//Закрытие файлов и удаление временного
CloseFile(FO); CloseFile(FS);
CopyFile('1.dat', 'Players.dat',False);
DeleteFile('1.dat');
end;
//----------------------------
//Выбор игрока из списка
//----------------------------
procedure TFormNew.BOKClick(Sender: TObject);
begin
if ListBox.Items.Text='' then exit; //Если список чист
AssignFile(FO,'Players.dat');
Reset(FO); //Открытие файла для чтения
//Чтение количества игроков
Readln(FO, S); KolGamer:=StrToInt(S);
//Если игрок выбран то идет перебор в файле
if ListBox.ItemIndex<>0 then
for i:=1 to ListBox.ItemIndex do for j:=1 to 6 do Readln(FO, S);
//Если доходит очередь до игрока, выбранного из списка, то
//заполняются значениями объекты окна игры
with FormGame do begin
Readln(FO, S); NameGamer:=S;
Readln(FO, S); Kredit:=StrToInt(S);
LKredit.Caption:=IntToStr(
Readln(FO, S); SEStavka.Value:=StrToInt(S); SEStavka.MaxValue:=Kredit;
Readln(FO, S); SEChislo.Value:=StrToInt(S);
for i:=1 to 2 do begin Readln(FO, S); Kub[i]:=StrToInt(S); end;
//Вывод граней кубиков
ImageTable.Canvas.CopyRect(
ImageKubik.Canvas, Rect((Kub[1]-1)*60,0,(Kub[1]-
ImageTable.Canvas.CopyRect(
ImageKubik.Canvas, Rect((Kub[2]-1)*60,0,(Kub[2]-
StatusBar.Panels[1].Text:='
StatusBar.Panels[0].Text:='';
StatusBar.Panels[2].Text:='
end;
//Закрытие файла и окна выбора игрока
CloseFile(FO);
ModalResult:=mrOK;
end;
//----------------------------
//Заполнение списка игроков
//----------------------------
procedure TFormNew.FormCreate(Sender: TObject);
begin
ListBox.Clear; //Очистка списка
try
AssignFile(FO,'Players.dat');
Reset(FO); //Открытие файла для чтения
//Чтение количества игроков в файле
Readln(FO,S); KolGamer:=StrToInt(S);
if KolGamer>0 then for i:=1 to KolGamer do begin
Readln(FO, S); //Чтение имени игрока
ListBox.Items.Add(S); //Добавление имени в список
for j:=1 to 5 do Readln(FO, S); //Пропуск 5 строчек
end;
CloseFile(FO); //Закрытие файла
except
on EInOutError do begin //Если файл не существует
AssignFile(FO,'Players.dat');
Rewrite(FO);
Writeln(FO,'0');
CloseFile(FO);
end;
end;
ListBox.ItemIndex:=0;
end;
//----------------------------
//Создание нового игрока
//----------------------------
procedure TFormNew.BNewClick(Sender: TObject);
var ClickedOK: Boolean; //Нажата ли кнопка ОК
begin
ClickedOK:=InputQuery('Новый игрок',
'Введите имя нового игрока', NameGamer);
if ClickedOk and (NameGamer<>'') then begin //Если имя игрока введено
AssignFile(FO, 'Players.dat'); AssignFile(FS, '1.dat');
Reset(FO); Rewrite(FS); //Открытие двух файлов
Readln(FO, S); KolGamer:=StrToInt(S);
Writeln(FS, IntToStr(KolGamer+1)); //Запись увеличенного кол. икроков
if KolGamer<>0 then for i:=1 to KolGamer do for j:=1 to 6 do begin
Readln(FO, S); Writeln(FS, S);
end;
//Добавление в конец файла информации о новом игроке
Writeln(FS, NameGamer);
Writeln(FS, '100'); Writeln(FS, '20'); Writeln(FS, '7');
Writeln(FS, '1'); Writeln(FS, '1');
//Закрытие файлов и удаление временного
CloseFile(FO); CloseFile(FS);