Программа, моделирующая игру в «Кости»

Автор работы: Пользователь скрыл имя, 26 Марта 2014 в 06:42, курсовая работа

Краткое описание

Компьютерная игра (иногда используется неоднозначный термин видеоигра) — компьютерная программа, служащая для организации игрового процесса (геймплея), связи с партнёрами по игре, или сама выступающая в качестве партнёра.
Компьютерные игры часто создаются на основе фильмов и книг; есть и обратные случаи. С 2011 года компьютерные игры официально признаны в США отдельным видом искусства. Компьютерные игры оказали столь существенное влияние на общество, что в информационных технологиях отмечена устойчивая тенденция к геймификации для неигрового прикладного программного обеспечения.

Содержание

1.Введение……………………………………………...................……………...4
2. Основная часть…………………………………...................……………......13
2.1. Спецификация……………………………………..........……....…...14
2.2. Заключение……………………………………….....……………....24
3. Литература.....................

Вложенные файлы: 1 файл

Курсовая работа.docx

— 670.82 Кб (Скачать файл)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В ходе выполнения данной работы,  была разработана игровая программа «Игра в кости», повторены основные свойства и методы наиболее распространенных компонентов Delphi, получен навык работы с генератором случайных чисел, расширены знания о текстовых файлах в Delphi.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЛИТЕРАТУРА

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Джулиан Бакнелл, Фундаментальные алгоритмы и структуры данных в Delphi, Диасофт,  2003 г.
  2. Парижский С.М.,  Delphi. Учимся на примерах, МК-пресс, 2005 г.

Интернет-ресурсы:

  1. www.Wikipedia.ru
  2. www.Connect.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЯ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение 1

Протокол ошибок

 

Код ошибки

Название ошибки

Меры по исправлению

1

57

':=' expected but ':' found

Вместо ':' необходимо напечатать ':='

2

108

Undeclared identifier: 'n'

В разделе Var, описать переменную нужного типа, в данном случае как integer.

3

129

Undeclared identifier: 'bitbtn1'

Создать на форме bitbtn1




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение 2

Инструкция по работе с ПК

  1. Ввести значения числа очков и ставки в соответствующие поля ввода.
  2. Нажать кнопку «Бросок!».
  3. Нажать кнопку «Сохранить результат».
  4. Ввести имя игрока в поле ввода и нажать кнопку «Сохранить».
  5. Нажать кнопку «Просмотр результатов» для запуска файла с результатами.
  6. Нажать кнопку «Выход» для завершения работы с программой.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение 3

Листинг программы

program Dice;

uses

  Forms,

  diceU1 in 'diceU1.pas' {Form1},

  diceU2 in 'diceU2.pas' {Form2},

  diceU3 in 'diceU3.pas' {Form3},

  Splash_dice in 'Splash_dice.pas' {fmSplash},

  diceU4 in 'diceU4.pas' {Form4};

{$R *.res}

begin

  Application.Initialize;

  fmSplash := TfmSplash.Create(nil);

  Application.CreateForm(TForm1, Form1);

  Application.CreateForm(TForm2, Form2);

  Application.CreateForm(TForm3, Form3);

  Application.CreateForm(TForm4, Form4);

  Application.Run;

end.

unit diceU1;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ComCtrls, ExtCtrls, StdCtrls, Buttons,xpman,mmsystem,jpeg,shellapi;

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    BitBtn1: TBitBtn;

    Image2: TImage;

    Image1: TImage;

    StatusBar1: TStatusBar;

    Panel1: TPanel;

    Label1: TLabel;

    Label2: TLabel;

    Timer1: TTimer;

    BitBtn2: TBitBtn;

    BitBtn3: TBitBtn;

    Panel2: TPanel;

    Label3: TLabel;

    BitBtn4: TBitBtn;

    procedure BitBtn1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

    procedure Edit1KeyPress(Sender: TObject; var Key: Char);

    procedure Edit2KeyPress(Sender: TObject; var Key: Char);

    procedure Edit1Change(Sender: TObject);

    procedure Edit2Change(Sender: TObject);

    procedure BitBtn3Click(Sender: TObject);

    procedure BitBtn2Click(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure FormActivate(Sender: TObject);

    procedure BitBtn4Click(Sender: TObject);

    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure Edit1KeyDown(Sender: TObject; var Key: Word;

      Shift: TShiftState);

 

    procedure Edit2KeyDown(Sender: TObject; var Key: Word;

      Shift: TShiftState);

    procedure BitBtn1KeyDown(Sender: TObject; var Key: Word;

      Shift: TShiftState);

    procedure BitBtn2KeyDown(Sender: TObject; var Key: Word;

      Shift: TShiftState);

    procedure BitBtn4KeyDown(Sender: TObject; var Key: Word;

      Shift: TShiftState);

    procedure BitBtn3KeyDown(Sender: TObject; var Key: Word;

      Shift: TShiftState);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  save:boolean;

  o:integer;

  b,w:byte;

  pr_w:real;

  Form1: TForm1;

implementation

uses diceU2, diceU3, Splash_dice, diceU4;

{$R *.dfm}

//Нажатие на кнопку "Бросок"

procedure TForm1.BitBtn1Click(Sender: TObject);

var

  k1,k2,n:byte;  s:integer;

begin

//Проверка правильности ручного  ввода

 

  if not((strtoint(edit1.Text)>1)and(strtoint(edit1.Text)<=12))

  then begin

         showmessage('Недопустимое значение! Выберите число из диапазона от 2 до 12!');

         edit1.Clear;

         edit1.Focused;

         end

    else begin

  if strtoint(edit2.Text)>o

  then begin

         showmessage('Недопустимое значение! Не хватает очков для ставки!');

         edit2.clear;

         edit2.Focused

       end

  else begin

  n:=strtoint(edit1.text);     //считывание числа

  s:=strtoint(edit2.Text);     //считывание ставки

  randomize;

  k1:=1+random(6);             //присвоение случайного значения грани кости

  case k1 of                   //и загрузка соответствующего изображения

  1:image1.Picture.LoadFromFile('..\Images\1.jpg');

  2:image1.Picture.LoadFromFile('..\Images\2.jpg');

  3:image1.Picture.LoadFromFile('..\Images\3.jpg');

  4:image1.Picture.LoadFromFile('..\Images\4.jpg');

  5:image1.Picture.LoadFromFile('..\Images\5.jpg');

  6:image1.Picture.LoadFromFile('..\Images\6.jpg');

  end;

  k2:=1+random(6);

  case k2 of

  1:image2.Picture.LoadFromFile('..\Images\1.jpg');

  2:image2.Picture.LoadFromFile('..\Images\2.jpg');

  3:image2.Picture.LoadFromFile('..\Images\3.jpg');

  4:image2.Picture.LoadFromFile('..\Images\4.jpg');

  5:image2.Picture.LoadFromFile('..\Images\5.jpg');

  6:image2.Picture.LoadFromFile('..\Images\6.jpg');

  end;

  //вывод суммы

  label3.caption:='Сумма:   '+inttostr(k1)+' + '+inttostr(k2)+' = '+inttostr(k1+k2);

  b:=b+1;       //увеличение счетчика бросков и вывод в статус строку

  statusbar1.Panels[1].Text:='Бросков: '+inttostr(b);

  //------------------Проверка выпавших чисел----------------------------------

  if k1+k2=n       //если число равно сумме

  then

  begin

  s:=s*4;                       //увеличение ставки в 4 раза

  showmessage('Ставка сыграла! Получено: '+inttostr(s));

  o:=o+s;       //увеличение  числа очков на размер ставки

  w:=w+1;       //увеличение  счетчика побед

  statusbar1.Panels[0].Text:='Очки: '+inttostr(o); //вывод числа очков

  end

  else

  if (k1+k2<7) and (n<7)   //если сумма меньше 7 и число меньше 7

    then

      begin

        showmessage('Ставка сыграла! Получено: '+inttostr(s));

        o:=o+s;   //увеличение  числа очков на размер ставки

        w:=w+1;     //увеличение счетчика побед

        statusbar1.Panels[0].Text:='Очки: '+inttostr(o);   //вывод числа очков

      end

    else

      if (k1+k2>7) and (n>7)  //если сумма больше 7 и число больше 7

        then

          begin

            showmessage('Ставка сыграла! Получено: '+inttostr(s));

            o:=o+s;    //увеличение числа  очков на размер ставки

            w:=w+1;     //увеличение счетчика  побед

            statusbar1.Panels[0].Text:='Очки: '+inttostr(o);//вывод числа очков

          end

         else               //если ни одна из ситуаций не подходит

           begin

             showmessage('Ставка не сыграла! Потеряно: '+inttostr(s));

             o:=o-s;      //уменьшение числа  очков на размер ставки

             statusbar1.Panels[0].Text:='Очки: '+inttostr(o);//вывод числа очков

           end;

  pr_w:=(w*100)/b;  //вычисление и вывод процента побед

  statusbar1.Panels[2].text:='Процент побед: '+floattostrf(pr_w,fffixed,4,1)+'%';

  save:=false; // параметры игры изменились, необходимо новое сохранение

 

  if o=0 then form2.ShowModal; //если очки закончились покажи форму 2

  edit1.SetFocus;              //фокус на поле ввода числа

  end;

  end;

end;

//процедура создания формы

procedure TForm1.FormCreate(Sender: TObject);

begin

PlaySound('..\sounds\Sound1.wav', 0, SND_ASYNC or SND_LOOP);  //звуковое сопровождение

fmSplash.Show;   //перед созданием формы 1 покажи splash-форму на 3 секунды,

fmSplash.Repaint;//этого времени хватит чтобы загрузить дату и время на форму 1

sleep(3000);

fmSplash.close;

fmSplash.Free;

save:=false;    //изначально игра не сохранена

o:=100;         //стартовое  количество очков

w:=0;           //изначально 0 побед

statusbar1.Panels[0].Text:='Очки: '+inttostr(o); //вывод числа очков

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

//вывод даты и времени в  статус  строку

statusbar1.Panels[4].Text:='Время: '+timetostr(time);

statusbar1.Panels[3].text:='Дата: '+datetostr(date);

end;

//ограничение на ввод в поле  ввода числа

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

//только цифры, backspase и enter

  if not(key in ['0'..'9',#8,#13]) then key:=#0;

  if key=#13 then edit2.SetFocus;  //при нажатии на enter переключить фокус

end;

//ограничение на ввод в поле  ввода ставки

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

//только цифры, backspase и enter

  if not(key in ['0'..'9',#8,#13]) then key:=#0;

  if (key=#13) and (bitbtn1.Enabled=true) then bitbtn1.SetFocus;

end;

//Проверка заполнения полей ввода

procedure TForm1.Edit1Change(Sender: TObject);

begin

if (edit1.Text='') or (edit2.Text='')

  then

    bitbtn1.Enabled:=false

  else

    bitbtn1.Enabled:=true;

end;

procedure TForm1.Edit2Change(Sender: TObject);

begin

if (edit1.Text='') or (edit2.Text='')

  then

    bitbtn1.Enabled:=false

  else

    bitbtn1.Enabled:=true;

end;

//запуск формы 3 в соответствии  с параметром сохранения

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

if save=false then form3.ShowModal else

form3.ShowModal;

end;

//процедура нажатия на кнопку  сохранения

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

form2.showmodal;

end;

//процедура закрытия формы 1

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

if save=false then form3.Show; //если игра не сохранена покажи форму 3

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

edit1.SetFocus;  //при активации формы  ставь фокус на поле ввода  числа

end;

//процедура нажития на кнопку просмотра результатов

procedure TForm1.BitBtn4Click(Sender: TObject);

begin

//запуск текстового файла

Shellexecute(handle,'open',pchar('Результаты.txt'),pchar(''),nil,SW_SHOW);  //запуск текствого файла

end;

//отслеживание нажатия на F1 на  различных объектах формы

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

if getasynckeystate($70)<>0 then form4.showmodal; end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

if getasynckeystate($70)<>0 then form4.showmodal;

end;

procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

if getasynckeystate($70)<>0 then form4.showmodal;

end;

procedure TForm1.BitBtn1KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

if getasynckeystate($70)<>0 then form4.showmodal;

end;

procedure TForm1.BitBtn2KeyDown(Sender: TObject; var Key: Word;

 

  Shift: TShiftState);

begin

if getasynckeystate($70)<>0 then form4.showmodal;

end;

procedure TForm1.BitBtn4KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

if getasynckeystate($70)<>0 then form4.showmodal;

end;

procedure TForm1.BitBtn3KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

if getasynckeystate($70)<>0 then form4.showmodal;

end;

end.

unit diceU2;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Buttons,shellapi,xpman;

type

  TForm2 = class(TForm)

    Edit1: TEdit;

    Label1: TLabel;    BitBtn1: TBitBtn;

    BitBtn2: TBitBtn;

    procedure BitBtn1Click(Sender: TObject);

    procedure Edit1Change(Sender: TObject);

    procedure FormActivate(Sender: TObject);

    procedure Edit1KeyPress(Sender: TObject; var Key: Char);

    procedure BitBtn2Click(Sender: TObject);

 

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form2: TForm2;

implementation

uses diceU1;

{$R *.dfm}

procedure TForm2.BitBtn1Click(Sender: TObject);

var

  f:textfile;  m,str:string;

begin

//Работа с текстовым файлом

assignfile(f,'Результаты.txt');  //подключение

append(f);                        //открытие для дозаписи

m:='------------------------------------------------------------------------------------------------------------------';

str:='';

str:=datetostr(date)+#9+timetostr(time)+#9+form2.Edit1.text+#9+inttostr(o)+#9+#9+inttostr(b)+#9+floattostrf(pr_w,fffixed,4,1)+'%';

        writeln(f,str);     //вывод сформированной строки в файл

        writeln(f,m);

  closefile(f); //закрытие файла

  Shellexecute(handle,'open',pchar('Результаты.txt'),pchar(''),nil,SW_SHOW);  //запуск текстового файла

  if o=0 then form1.Close  //если форма открылась в случае проигрыша - то закрой программу

                        else form2.close; //иначе закрой форму 2

 

  save:=true;                      //и отметь, что игра сохранена

end;

procedure TForm2.Edit1Change(Sender: TObject);

begin

//проверка на заполнение текстового  поля

if edit1.Text='' then bitbtn1.Enabled:=false else bitbtn1.Enabled:=true;

end;

procedure TForm2.FormActivate(Sender: TObject);

begin

//если форма открылась в случае  проигрыша, то видоизменяем форму

if o=0 then

begin

  form2.Height:=168;

  form2.Label1.Caption:='     Вы проиграли!         Введите ваше имя:';

end;

end;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if (key in ['0'..'9']) then key:=#0; //обеспечение корректного ввода в поле

end;

//Нажатие на "Отмена"

procedure TForm2.BitBtn2Click(Sender: TObject);

begin

form2.Close;   //закрой форму 2(возврат  на форму 1)

edit1.Clear;    //очисти поле ввода

end; end.

unit diceU3;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 

  Dialogs, StdCtrls, Buttons,xpman;

type

  TForm3 = class(TForm)

    Label1: TLabel;

    BitBtn1: TBitBtn;

    BitBtn2: TBitBtn;

    BitBtn3: TBitBtn;

    procedure BitBtn1Click(Sender: TObject);

    procedure BitBtn2Click(Sender: TObject);

    procedure BitBtn3Click(Sender: TObject);

    procedure FormActivate(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form3: TForm3;

implementation

uses diceU1, diceU2; {$R *.dfm}

//выход из программы

procedure TForm3.BitBtn1Click(Sender: TObject);

begin

form3.close;

form1.Close;

end;

//Отмена выхода

Информация о работе Программа, моделирующая игру в «Кости»