Проектирование приложения «BlackJack»

Автор: Пользователь скрыл имя, 30 Мая 2013 в 12:14, курсовая работа

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

Заданием на курсовую работу является написание приложения для игры «BlackJack».
Как правило, все версии Блэкджека имеют две отличительные особенности – для выигрыша игрок должен набрать больше очков, чем это сделает дилер, но не более 21, а также, достоинства карт обычно схожи (от 2 до 10 – номинальные значения; Валет, Дама и Король – по 10 очков; Туз может быть равен, как и 1 очку, так и 11). В остальном можно встретить различные варианты игры. Блэкджеком называется комбинация из двух карт с суммарным количеством очков, равным 21.

Оглавление

Введение................................................................................................... 2
1. Краткаятеория............................................................................................ 3
2. Проектирование приложенияBlackJack»....................................................... 5
3. Листинг программы .......................................................................................... 13
Заключение ............................................................................................................ 22
Список литературы ............................................................................................... 23

Файлы: 1 файл

Документ Microsoft Word.docx

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

ЮРГТУ

(НПИ)

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

«BlacDjak»

 

СФ 1-2a


 

 

Содержание

Введение................................................................................................... 2

1. Краткаятеория............................................................................................ 3

2. Проектирование приложенияBlackJack»....................................................... 5

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

Заключение ............................................................................................................ 22

Список литературы ............................................................................................... 23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

Введение

 

Заданием на курсовую работу является написание приложения для  игры

«BlackJack».

Как правило, все версии Блэкджека имеют две отличительные

особенности – для выигрыша игрок должен набрать больше очков, чем это

сделает дилер, но не более 21, а также, достоинства карт обычно схожи (от 2

до 10 – номинальные значения; Валет, Дама и Король – по 10 очков; Туз

может быть равен, как и 1 очку, так и 11). В остальном можно встретить

различные варианты игры.

Блэкджеком называется комбинация из двух карт с суммарным

количеством очков, равным 21.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

1. Краткая теория

В курсовой работе использованы компоненты типа TImage, TLabel,

TTimer.

Компонент TImage предназначен для вывода в форму графического

рисунка. Он поддерживает многочисленные форматы графических файлов,

включая .bmp, .ico, . .jpg и др.

Программист может присвоить  какой-либо рисунок компоненту

TImage как при разработке в среде Lazarus, так и во время выполнения. Для

этого нужно присвоить  свойству Picture объект типа TPicture, содержащий

рисунок. Во время проектирования в свойстве Picture можно открыть

редактор изображений  и с его помощью указать  файл, содержащий рисунок.

Для загрузки файла с рисунком используется метод LoadFromFile,

принадлежащий объекту Picture, который, в свою очередь должен

принадлежать изображению. Например, для вывода в изображении  MyPicture

файла рисунка myPicture.jpg во время  выполнения используется следующий

оператор:

MyPicture.Picture.LoadFromFile('myPicture.jpg') ;

Расширение файла определяет тип создаваемого рисунка. Если

расширение не распознается как тип графического файла, то компьютер

генерирует исключение.

Если значение свойства AutoSize равно True, то размеры элемента

управления TImage автоматически изменяются, подстраиваясь под заданные

границы. Если оно равно  False, то размеры элемента управления остаются

неизменными независимо от размеров рисунка, при этом в изображении

может оказаться видимой  только часть рисунка.

То есть, этот компонент  служит для размещения на форме одного из

трех поддерживаемых Lazarus типов изображений: растрового рисунка,

значка или метафайла. Любой из этих типов изображений содержится в

центральном свойстве компонента – Picture.

 

 

 

4

 

 

 

 

Чтобы подогнать размеры  рисунка под заданные границы,

используется свойство Stretch. Если оно равно True, то размеры рисунка

подстраиваются под размеры  элемента управления TImage. Если при этом во

время выполнения изменяются размеры изображения, то автоматически

изменяются также размеры  рисунка. Естественно, это искажает рисунок,

поэтому необходимо установить значение True для свойства Proportional.

Заполнение пространства для изображения может быть неполным, но при

этом будут сохранены пропорции оригинального изображения. Свойство

Stretch не влияет на файлы рисунков типа .ico.

Таблица 1. Свойства компонента TImage

Свойство Описание

Property AutoSize: Boolean;

Разрешает/запрещает изменять размеры

компонента так, чтобы  в них полностью

загрузилось изображение.

Property Canvas: TCanvas;

Содержит канву для  прорисовки

изображения.

Property Center: Boolean;

Указывает, надо ли центрировать

изображение в границах компонента.

Игнорируется, если AutoSize = True или если

Stretch = True и изображение не является значком

(ICO).

Property Picture: TPicture;

Центральное свойство класса. Служит

контейнером изображения.

Property Stretch: Boolean;

Разрешает/запрещает изменять размер

изображения так, чтобы оно  целиком заполнило

клиентскую область компонента.

Property Transparent:

Boolean

Запрещает/разрешает накладывать

собственный фон изображения  на фонкомпонента.

2. Проектирование  приложения «BlackJack»

В состав приложения входят следующие процедуры:

1) процедура Proverka, которая проверяет результат игры, сравнивает

счет игрока (score) и крупье (scoreE ); блок-схема приведена на рис.1;

2) процедура karta_igrok, которая генерирует изображение карт игрока

и считает баллы игрока; блок-схема приведена на рис.2;

3) процедура karta_banker, которая генерирует изображение карт

игрока и считает баллы  игрока; блок-схема аналогична предыдущей;

4) процедура ochistka, которая очищает компоненты TImage; блок-

схема приведена на рис.3. В процедуре ochistka используется метод

FindComponent(const AName: string). Строка, передаваемая FindComponent, –

это Name компонента, который необходимо найти, например "Edit1", "Labell"

или "MyButton". FindComponent возвратит компонент, если последний

существует. В противном  случае метод возвратит Nil.

5) процедура FormCreate, блок-схема приведена на рис.4;

6) процедуры Timer1Timer (выводится  счет) и Timer2Timer

(проверяется результат  игры), блок-схемы приведены на  рис.5 и 6;

7) обработчики событий  OnClick для кнопок Button1 – «Новая игра»,

Button2 – «Взять карту», Button3 – «Достаточно» (рис.7,8,9).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.1. Блок-схема алгоритма процедуры  Proverka  

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
 
 
 
Рис.2. Блок-схема алгоритма процедуры  karta_igrok  
 

 

 
 

 

 

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

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

ExtCtrls, StdCtrls;

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Image1: TImage;

Image10: TImage;

Image11: TImage;

Image12: TImage;

Image13: TImage;

Image14: TImage;

Image15: TImage;

Image16: TImage;

Image17: TImage;

Image18: TImage;

Image19: TImage;

Image2: TImage;

Image20: TImage;

Image3: TImage;

Image4: TImage;

Image5: TImage;

Image6: TImage;

Image7: TImage;

Image8: TImage;

Image9: TImage;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Timer1: TTimer;

Timer2: TTimer;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

14

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

var

Form1: TForm1;

score: integer; //счёт

scoreE:integer; //счёт крупье

cards: integer; //количество карт

cardsE: integer; //количество карт крупье

implementation

procedure Proverka; // процедура проверки результата игры

begin

if (score > 21) and (scoreE > 21) then form1.Label7.caption:= 'У обоих перебор'

else

if 21 < scoreE then form1.Label7.caption:= 'У крупье перебор'

else

if 21 < score then form1.Label7.caption:= 'У вас перебор'

else

if score <scoreE then form1.Label7.caption:= 'Крупье выиграл!'

else

if score>scoreE then form1.Label7.caption:= 'Вы выиграли'

else

if score=scoreE then form1.Label7.caption:= 'Ничья'

end;

procedure karta_igrok;

var car,i:integer;

begin

car:=random(52);

for i:=1 to 52 do

if car=i then begin Form1.image10.Picture.LoadFromFile ('bitmap/'+inttostr(i)+'.bmp');end;

if car=0 then begin Form1.image10.Picture.LoadFromFile ('bitmap/1.bmp');end;

case car of

1 , 14 , 27 , 40:begin score:=score+11; end; //туз

2 , 15 , 28 , 41:begin score:=score+2; end;

3 , 16 , 29 , 42:begin score:=score+3; end;

4 , 17 , 30 , 43:begin score:=score+4; end;

5 , 18 , 31 , 44:begin score:=score+5; end;

6 , 19 , 32 , 45:begin score:=score+6; end;

7 , 20 , 33 , 46:begin score:=score+7; end;

8 , 21 , 34 , 47:begin score:=score+8; end;

9 , 22 , 35 , 48:begin score:=score+9; end;

10 , 23 , 36 , 49:begin score:=score+10; end;

11 , 24 , 37 , 50:begin score:=score+10; end;

15

12 , 25 , 38 , 51:begin score:=score+10; end;

13 , 26 , 39 , 52:begin score:=score+10; end;

end;

if Form1.image1.Tag=0 then

begin

Form1.image1.Picture:=Form1.image10.Picture;

Form1.image1.Tag:=1;

end

else if Form1.image2.Tag=0 then

begin

Form1.image2.Picture:=Form1.image10.Picture;

Form1.image2.Tag:=1;

end

else if Form1.image3.Tag=0 then

begin

Form1.image3.Picture:=Form1.image10.Picture;

Form1.image3.Tag:=1;

end

else if Form1.image4.Tag=0 then

begin

Form1.image4.Picture:=Form1.image10.Picture;

Form1.image4.Tag:=1;

end

else if Form1.image5.Tag=0 then

begin

Form1.image5.Picture:=Form1.image10.Picture;

Form1.image5.Tag:=1;

end

else if Form1.image6.Tag=0 then

begin

Form1.image6.Picture:=Form1.image10.Picture;

Form1.image6.Tag:=1;

end

else if Form1.image7.Tag=0 then

begin

Form1.image7.Picture:=Form1.image10.Picture;

Form1.image7.Tag:=1;

end

else if Form1.image8.Tag=0 then

begin

Form1.image8.Picture:=Form1.image10.Picture;

Form1.image8.Tag:=1;

end

else if Form1.image9.Tag=0 then

begin

Form1.image9.Picture:=Form1.image10.Picture;

Form1.image9.Tag:=1;

end;

end;

procedure karta_banker;

var car,i:integer;

16

begin

car:=random(52);

for i:=1 to 52 do

if car=i then begin Form1.image20.Picture.LoadFromFile ('bitmap/'+inttostr(i)+'.bmp');end;

if car=0 then begin Form1.image20.Picture.LoadFromFile ('bitmap/1.bmp');end;

case car of

1 , 14 , 27 , 40:begin scoreE:=scoreE+11; end; //туз

2 , 15 , 28 , 41:begin scoreE:=scoreE+2; end;

3 , 16 , 29 , 42:begin scoreE:=scoreE+3; end;

4 , 17 , 30 , 43:begin scoreE:=scoreE+4; end;

5 , 18 , 31 , 44:begin scoreE:=scoreE+5; end;

6 , 19 , 32 , 45:begin scoreE:=scoreE+6; end;

7 , 20 , 33 , 46:begin scoreE:=scoreE+7; end;

8 , 21 , 34 , 47:begin scoreE:=scoreE+8; end;

9 , 22 , 35 , 48:begin scoreE:=scoreE+9; end;

10 , 23 , 36 , 49:begin scoreE:=scoreE+10; end;

11 , 24 , 37 , 50:begin scoreE:=scoreE+10; end;

12 , 25 , 38 , 51:begin scoreE:=scoreE+10; end;

13 , 26 , 39 , 52:begin scoreE:=scoreE+10; end;

end;

if Form1.image11.Tag=0 then

begin

Form1.image11.Picture:=Form1.image20.Picture;

Form1.image11.Tag:=1;

end

else if Form1.image12.Tag=0 then

begin

Form1.image12.Picture:=Form1.image20.Picture;

Form1.image12.Tag:=1;

end

else if Form1.image13.Tag=0 then

begin

Form1.image13.Picture:=Form1.image20.Picture;

Form1.image13.Tag:=1;

end

else if Form1.image14.Tag=0 then

begin

Form1.image14.Picture:=Form1.image20.Picture;

Form1.image14.Tag:=1;

end

else if Form1.image15.Tag=0 then

begin

Form1.image15.Picture:=Form1.image20.Picture;

Form1.image15.Tag:=1;

end

else if Form1.image16.Tag=0 then

begin

Form1.image16.Picture:=Form1.image20.Picture;

Form1.image16.Tag:=1;

end

else if Form1.image17.Tag=0 then

begin

17

Form1.image17.Picture:=Form1.image20.Picture;

Form1.image17.Tag:=1;

end

else if Form1.image18.Tag=0 then

begin

Form1.image18.Picture:=Form1.image20.Picture;

Form1.image18.Tag:=1;

end

else if Form1.image19.Tag=0 then

begin

Form1.image19.Picture:=Form1.image20.Picture;

Form1.image19.Tag:=1;

end;

end;

procedure ochistka;

var i:integer;

begin

Form1.timer2.Enabled:=false;

for i:=1 to 20 do

begin

//имеются некоторые "TImage" которые нужно очистить

//картинку, можно перебрать по имени

(Form1.FindComponent(Format('Image%d',[i])) as TImage).Picture:=nil;

(Form1.FindComponent(Format('Image%d',[i])) as TImage).tag:=0;

end;

end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);

begin

randomize;

timer2.Enabled:=false;

button2.Enabled:=false;

button3.Enabled:=false;

label7.caption:='Результат игры';

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

label3.Caption:=inttostr(score);

label6.Caption:=inttostr(scoreE);

end;

procedure TForm1.Timer2Timer(Sender: TObject);

begin

proverka();

button1.Enabled:=true;

end;

18

procedure TForm1.Button1Click(Sender: TObject);

begin

ochistka();

button1.Enabled:=false;

button2.Enabled:=true;

button3.Enabled:=true;

label7.Caption:='';

score:=0;

cards:=0;

scoreE:=0;

cardsE:=0;

cardsE:=cardsE+2;

karta_banker;

karta_banker;

cards:=cards+2;

karta_igrok;

karta_igrok;

if (score<>21) and (scoreE<>21) then exit

else begin

button1.Enabled:=true;

button2.Enabled:=false;

button3.Enabled:=false;

if (score=21) and (scoreE<>21) then showmessage ('У ВАС BLACKJACK');

if (scoreE=21) and (score<>21) then showmessage ('У КРУПЬЕ BLACKJACK');

if (score=21) and (scoreE=21) then showmessage ('ДВОЙНОЙ BLACKJACK');

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

cards:=cards+1;

karta_igrok;

if score>=21 then begin

proverka;

button1.Enabled:=true;

button2.Enabled:=false;

button3.Enabled:=false;

exit

end;

if cards>9 then showmessage('Вам достаточно')

end;

procedure TForm1.Button3Click(Sender: TObject); //Кнопка "Достаточно"

var x:integer;

begin

timer2.enabled:=true;

button1.Enabled:=false;

19

button2.Enabled:=false;

button3.Enabled:=false;

while scoreE<=17 do

begin

cardsE:=cardsE+1;

karta_banker;

end

end;

initialization

{$I unit1.lrs}

end. 
 
 
 
 
 
 
 
 

 

5. Пример работы  программы 
 
 
 
 
Рис.9. Начальный вид программы.

 

 

 
Рис.10. Промежуточный результат игры. 

Рис.11. Результат игры. Крупье выиграл.  
 
 
Рис.12. Результат игры. Крупье проиграл 

 
Рис.13. Выпал BlackJack 

 

Заключение

Мы познакомились с  процессом создания приложений в  Lazarus –

свободной среде разработки программного обеспечения для компилятора

Free Pascal Compiler. Интегрированная среда разработки предоставляет

возможность кроссплатформенной разработки визуальных приложений для

операционных систем семейства  Windows.

Изучены некоторые компоненты среды их свойства и события,

составлены блок-схемы  алгоритмов, закреплены знания, полученные при

изучении дисциплины «Информатика».

 

 

Список литературы

1. Конспект лекций по  дисциплине «Информатика»

2. Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Учебник по

программированию:Free Pascal и Lazarus..– Наука и образование

3. www.lazarus.freepascal.org

4. Архангельский А.Я. .Delphi 7. Справочное пособие.– Бином-Пресс.–

2003 г. 
5. http://w

ww.delphibasics.ru/

 

 

Информация о работе Проектирование приложения «BlackJack»