Разработка приложения для Windows, представляющего собой компьютерную игру «Кости»

Автор: Пользователь скрыл имя, 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

Файлы: 1 файл

Курсач по костям.doc

— 255.50 Кб (Скачать)

//-------------------------------------------------------

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(Rect(11,17,71,77),

    ImageKubik.Canvas, Rect((Kub[1]-1)*60,0,(Kub[1]-1)*60+60,60));

  ImageTable.Canvas.CopyRect(Rect(82,17,142,77),

    ImageKubik.Canvas, Rect((Kub[2]-1)*60,0,(Kub[2]-1)*60+60,60));

  //Увеличение количества раз заходов в процедуру

  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:='Выпало: ' + IntToStr(Kub[1]+Kub[2]);

    StatusBar.Panels[2].Text:='Выигрыш: ' + IntToStr(Viigresh);

    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(Kredit);  //его вывод

    //Если кредит кончился

    if Kredit<=0 then begin

      Application.MessageBox('Ты проиграл!!!', 'Проигрыш',MB_OK+MB_ICONINFORMATION);

      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.Value));

       Writeln(FS, IntToStr(FormGame.SEChislo.Value));

       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(Kredit);

    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(Rect(11,17,71,77),

      ImageKubik.Canvas, Rect((Kub[1]-1)*60,0,(Kub[1]-1)*60+60,60));

    ImageTable.Canvas.CopyRect(Rect(82,17,142,77),

      ImageKubik.Canvas, Rect((Kub[2]-1)*60,0,(Kub[2]-1)*60+60,60));

    StatusBar.Panels[1].Text:='Выпало: ' + IntToStr(Kub[1]+Kub[2]);

    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);

Информация о работе Разработка приложения для Windows, представляющего собой компьютерную игру «Кости»