"Эверест" - Центр Практической Информатики

представляет вводный курс

"Delphi для чайников"

Урок 21.

"Создаем игру 21".

 

Логические и карточные игры

21 урок- игра в 21. Символично, не правда ли?

Игры, подобные данной, претендуют на звание интеллектуальных. На данном этапе в соревнование с человеком должна вступить машина. Работу компьютера должны прописать мы сами.

Под искусственным интеллектом мы будем понимать адекватные действия машины на действия человека. Вообще говоря, это слишком сложная задача и ее решением занимается специальная наука- кибернетика.

Мы же от кибернетики далеки, да и наша задача не такая сложная. Нужно лишь на каждый шаг пользователя прописать достойный ответ компьютера. В рамках данной игры это не так уж сложно.

Правила игры:

  1. В 21 играют колодой, состоящей из 52 карт.
  2. Играют последовательно, сначала нужное количество карт набирает игрок, затем компьютер.
  3. По требованию игрока, компьютер сдает сколько карт, сколько необходимо игроку. Задача игрока набрать максимальное количество очков, близкое к 21, но не более. Идеально, если игрок набирает 21 очко- тогда игра прекращается, присуждая победу игроку.
  4. Игра прекращается и в том случае, если игрок наберет более 21 очка. Тогда возникает ситуация перебора, и победу присуждают компьютеру.
  5. При достижении нужного количества очков, например 19, когда следующий шаг слишком рисковый, игрок говорит достаточно. Тогда компьютер сдает карты себе.
  6. Если у компьютера перебор- выигрывает человек, если 21 очко или равное количество очков с игроком- выигрывает компьютер.
  7. Очки начисляются следующим образом: туз-11 очков, король-4, дама-3, валет-2, все числовые карты имеют тот же номинал. Масть значения не имеет.


Предварительная подготовка.

Для игры необходимы рисунки с изображениями карт. Я уже сделал эти карты- скачате их с нашего сайта.

Все рисунки названы в соответствии с мастью и номиналом двумя буквами. Первая буква отвечает за масть карты, вторая- за номинал. Например, p8.jpg- означает пиковую восьмерку, а bv.jpg- бубнового вальта.


Начинаем творить:

1. Откройте Delphi или создайте новый проект.
2. Форму я закрасил зеленым цветом- под вид сукна игрового стола.
3. На форме расположите 14 компонентов Image - так как у меня на рис…

:


Конечно, программисты- профессионалы скажут, что мы делаем все нерационально: данные необходимо сохранять в массиве, а все компоненты создавать в процессе выполнения. Да, все верно! Однако, мы условились обходиться пока без массивов и без создания компонентов в run-time.

4. Размеры Image-й задайте 73*97.
5. На форму поместите 2 кнопки: Дать Карту и Себе.

Начинаем программирование:

В компонент Image8 (на рисунке он у меня выделен ) при нажатии на кнопку Дать карту должна появиться случайная карта. Для этого:

6. Сделайте двойной щелчок по кнопке Дать карту и измените код кнопки на мой:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin

Сначала командой randomize; - перемешиваем карты
randomize;

Достаем случайную карту из колоды:
x:=random(52)+1;

И, в зависимости от выбранной карты, если выпала цифра 1, то
а) увеличиваем сумму игрока на 2; б) в Image8 помещаем карту 2 пики.
case x of
1: begin s:=s+2; image8.Picture.LoadFromFile ('p2.jpg'); end;


Аналогично и с другими картами:

2: begin s:=s+3; image8.Picture.LoadFromFile ('p3.jpg'); end;
3: begin s:=s+4; image8.Picture.LoadFromFile ('p4.jpg'); end;
4: begin s:=s+5; image8.Picture.LoadFromFile ('p5.jpg'); end;
5: begin s:=s+6; image8.Picture.LoadFromFile ('p6.jpg'); end;
6: begin s:=s+7; image8.Picture.LoadFromFile ('p7.jpg'); end;
7: begin s:=s+8; image8.Picture.LoadFromFile ('p8.jpg'); end;
8: begin s:=s+9; image8.Picture.LoadFromFile ('p9.jpg'); end;
9: begin s:=s+10; image8.Picture.LoadFromFile ('p10.jpg'); end;
10: begin s:=s+2; image8.Picture.LoadFromFile ('pv.jpg'); end;
11: begin s:=s+3; image8.Picture.LoadFromFile ('pd.jpg'); end;
12: begin s:=s+4; image8.Picture.LoadFromFile ('pk.jpg'); end;
13: begin s:=s+11;image8.Picture.LoadFromFile ('pt.jpg'); end;
14: begin s:=s+2; image8.Picture.LoadFromFile ('k2.jpg'); end;
15: begin s:=s+3; image8.Picture.LoadFromFile ('k3.jpg'); end;
16: begin s:=s+4; image8.Picture.LoadFromFile ('k4.jpg'); end;
17: begin s:=s+5; image8.Picture.LoadFromFile ('k5.jpg'); end;
18: begin s:=s+6; image8.Picture.LoadFromFile ('k6.jpg'); end;
19: begin s:=s+7; image8.Picture.LoadFromFile ('k7.jpg'); end;
20: begin s:=s+8; image8.Picture.LoadFromFile ('k8.jpg'); end;
21: begin s:=s+9; image8.Picture.LoadFromFile ('k9.jpg'); end;
22: begin s:=s+10;image8.Picture.LoadFromFile ('k10.jpg'); end;
23: begin s:=s+2; image8.Picture.LoadFromFile ('kv.jpg'); end;
24: begin s:=s+3; image8.Picture.LoadFromFile ('kd.jpg'); end;
25: begin s:=s+4; image8.Picture.LoadFromFile ('kk.jpg'); end;
26: begin s:=s+11; image8.Picture.LoadFromFile ('kt.jpg'); end;
27: begin s:=s+2; image8.Picture.LoadFromFile ('b2.jpg'); end;
28: begin s:=s+3; image8.Picture.LoadFromFile ('b3.jpg'); end;
29: begin s:=s+4; image8.Picture.LoadFromFile ('b4.jpg'); end;
30: begin s:=s+5; image8.Picture.LoadFromFile ('b5.jpg'); end;
31: begin s:=s+6; image8.Picture.LoadFromFile ('b6.jpg'); end;
32: begin s:=s+7; image8.Picture.LoadFromFile ('b7.jpg'); end;
33: begin s:=s+8; image8.Picture.LoadFromFile ('b8.jpg'); end;
34: begin s:=s+9; image8.Picture.LoadFromFile ('b9.jpg'); end;
35: begin s:=s+10; image8.Picture.LoadFromFile ('b10.jpg'); end;
36: begin s:=s+2; image8.Picture.LoadFromFile ('bv.jpg'); end;
37: begin s:=s+3; image8.Picture.LoadFromFile ('bd.jpg'); end;
38: begin s:=s+4; image8.Picture.LoadFromFile ('bk.jpg'); end;
39: begin s:=s+11; image8.Picture.LoadFromFile ('bt.jpg'); end;
40: begin s:=s+2; image8.Picture.LoadFromFile ('c2.jpg'); end;
41: begin s:=s+3; image8.Picture.LoadFromFile ('c3.jpg'); end;
42: begin s:=s+4; image8.Picture.LoadFromFile ('c4.jpg'); end;
43: begin s:=s+5; image8.Picture.LoadFromFile ('c5.jpg'); end;
44: begin s:=s+6; image8.Picture.LoadFromFile ('c6.jpg'); end;
45: begin s:=s+7; image8.Picture.LoadFromFile ('c7.jpg'); end;
46: begin s:=s+8; image8.Picture.LoadFromFile ('c8.jpg'); end;
47: begin s:=s+9; image8.Picture.LoadFromFile ('c9.jpg'); end;
48: begin s:=s+10; image8.Picture.LoadFromFile ('c10.jpg'); end;
49: begin s:=s+2; image8.Picture.LoadFromFile ('cv.jpg'); end;
50: begin s:=s+3; image8.Picture.LoadFromFile ('cd.jpg'); end;
51: begin s:=s+4; image8.Picture.LoadFromFile ('ck.jpg'); end;
52: begin s:=s+11; image8.Picture.LoadFromFile ('ct.jpg'); end;
end;

7. На форму поместите компонент Label2. В нем мы будем отражать количество очков игрока.

8. В обработчике кнопки допишите: label2.caption:= inttostr(s1);

Теперь необходимо зарегистрировать переменные, которые участвуют в обработке кнопки:

9. В разделе implementation запишите:

implementation
var s1,x:integer;
{$R *.DFM}

10. Запустите программу. Вы должны увидеть при нажатии на кнопку выбранную карту и сумму игрока на этот момент.

Самостоятельно: придумайте, как далее расположить карты, механизм раздачи следующих карт. Как это сделал я- я покажу на следующем уроке. Тогда же мы и доделаем игру.

Рисунки к игре Вы можете скачать с нашего сайта.. http://umnik.rikt.ru/projectgame/learn.html

На следующем уроке: закончим игру

 

Примечание : Обращаю ваше внимание на то, что данный курс ознакомительный. Если Вы желаете действительно научиться программированию и получить в руки мощный инструмент для профессиональной работы, то приглашаем Вас на наш основной курс по Delphi.

Вся информация находится по адресу: http://umnik.rikt.ru/everest/distant/delphi_os.htm

Учиться у нас выгодно. Не верите?

Посмотреть архив данной рассылки Вы сможете на нашем сайте по адресу: http://umnik.rikt.ru/projectgame/learn.html

Внимание.

С января 2005 года ЦПИ "Эверест" объявляет о повышении цен на обучение по платному курсу Delphi. Для тех, что оплатит обучение в декабре, цена меняться не будет. У Вас есть шанс учиться в Новом году по ценам старого года. Не упустите свой шанс.

У Вас вопросы? Милости просим: rk@rikt.ru

Автор рассылки: Ишмуратов Р.К.

 
ШСД поможет вам открыть Свое Дело!      

 

Rambler's Top100  
  Союз образовательных сайтов     InterSib Каталог ресурсов Сибири