Автор: Пользователь скрыл имя, 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 Тестирование программы
ЗАКЛЮЧЕНИЕ
ГЛОССАРИЙ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЯ
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.
Текст программы для формы – FormGame:
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');