Автор: Пользователь скрыл имя, 30 Мая 2013 в 12:14, курсовая работа
Заданием на курсовую работу является написание приложения для игры «BlackJack».
Как правило, все версии Блэкджека имеют две отличительные особенности – для выигрыша игрок должен набрать больше очков, чем это сделает дилер, но не более 21, а также, достоинства карт обычно схожи (от 2 до 10 – номинальные значения; Валет, Дама и Король – по 10 очков; Туз может быть равен, как и 1 очку, так и 11). В остальном можно встретить различные варианты игры. Блэкджеком называется комбинация из двух карт с суммарным количеством очков, равным 21.
Введение................................................................................................... 2
1. Краткаятеория............................................................................................ 3
2. Проектирование приложенияBlackJack»....................................................... 5
3. Листинг программы .......................................................................................... 13
Заключение ............................................................................................................ 22
Список литературы ............................................................................................... 23
ЮРГТУ (НПИ) |
Курсовая работа «BlacDjak»
|
СФ 1-2a |
Содержание
Введение......................
1. Краткаятеория.................
2. Проектирование
3. Листинг программы ............
Заключение ..............................
Список литературы ..............................
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.
Расширение файла определяет тип создаваемого рисунка. Если
расширение не распознается как тип графического файла, то компьютер
генерирует исключение.
Если значение свойства 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. Блок-схема алгоритма
Рис.2. Блок-схема алгоритма
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.
if car=0 then begin Form1.image10.Picture.
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.
Form1.image1.Tag:=1;
end
else if Form1.image2.Tag=0 then
begin
Form1.image2.Picture:=Form1.
Form1.image2.Tag:=1;
end
else if Form1.image3.Tag=0 then
begin
Form1.image3.Picture:=Form1.
Form1.image3.Tag:=1;
end
else if Form1.image4.Tag=0 then
begin
Form1.image4.Picture:=Form1.
Form1.image4.Tag:=1;
end
else if Form1.image5.Tag=0 then
begin
Form1.image5.Picture:=Form1.
Form1.image5.Tag:=1;
end
else if Form1.image6.Tag=0 then
begin
Form1.image6.Picture:=Form1.
Form1.image6.Tag:=1;
end
else if Form1.image7.Tag=0 then
begin
Form1.image7.Picture:=Form1.
Form1.image7.Tag:=1;
end
else if Form1.image8.Tag=0 then
begin
Form1.image8.Picture:=Form1.
Form1.image8.Tag:=1;
end
else if Form1.image9.Tag=0 then
begin
Form1.image9.Picture:=Form1.
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.
if car=0 then begin Form1.image20.Picture.
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.
Form1.image11.Tag:=1;
end
else if Form1.image12.Tag=0 then
begin
Form1.image12.Picture:=Form1.
Form1.image12.Tag:=1;
end
else if Form1.image13.Tag=0 then
begin
Form1.image13.Picture:=Form1.
Form1.image13.Tag:=1;
end
else if Form1.image14.Tag=0 then
begin
Form1.image14.Picture:=Form1.
Form1.image14.Tag:=1;
end
else if Form1.image15.Tag=0 then
begin
Form1.image15.Picture:=Form1.
Form1.image15.Tag:=1;
end
else if Form1.image16.Tag=0 then
begin
Form1.image16.Picture:=Form1.
Form1.image16.Tag:=1;
end
else if Form1.image17.Tag=0 then
begin
17
Form1.image17.Picture:=Form1.
Form1.image17.Tag:=1;
end
else if Form1.image18.Tag=0 then
begin
Form1.image18.Picture:=Form1.
Form1.image18.Tag:=1;
end
else if Form1.image19.Tag=0 then
begin
Form1.image19.Picture:=Form1.
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('
(Form1.FindComponent(Format('
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(
label6.Caption:=inttostr(
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/