Игры, подобные данной, претендуют на звание интеллектуальных. На данном
этапе в соревнование с человеком должна вступить машина. Работу компьютера
должны прописать мы сами.
Под искусственным интеллектом мы будем понимать адекватные действия машины
на действия человека. Вообще говоря, это слишком сложная задача и ее решением
занимается специальная наука- кибернетика.
Мы же от кибернетики далеки, да и наша задача не такая сложная. Нужно
лишь на каждый шаг пользователя прописать достойный ответ компьютера.
В рамках данной игры это не так уж сложно.
Правила игры:
В 21 играют колодой, состоящей из 52 карт.
Играют последовательно, сначала нужное количество карт набирает игрок,
затем компьютер.
По требованию игрока, компьютер сдает сколько карт, сколько необходимо
игроку. Задача игрока набрать максимальное количество очков, близкое
к 21, но не более. Идеально, если игрок набирает 21 очко- тогда игра
прекращается, присуждая победу игроку.
Игра прекращается и в том случае, если игрок наберет более 21 очка.
Тогда возникает ситуация перебора, и победу присуждают компьютеру.
При достижении нужного количества очков, например 19, когда следующий
шаг слишком рисковый, игрок говорит достаточно. Тогда компьютер сдает
карты себе.
Если у компьютера перебор- выигрывает человек, если 21 очко или равное
количество очков с игроком- выигрывает компьютер.
Очки начисляются следующим образом: туз-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. Запустите программу. Вы должны увидеть при нажатии на кнопку выбранную
карту и сумму игрока на этот момент.
Самостоятельно: придумайте, как далее расположить карты, механизм раздачи
следующих карт. Как это сделал я- я покажу на следующем уроке. Тогда же
мы и доделаем игру.
1. У нас праздник.
ЦПИ "Эверест" празднует начало настоящей весны и свой День Рождения.
Всем нашим преподавателям и курсантам: "С праздником!"
В качестве подарка всем желающим Уникальное предложение:
стоимость месяца обучения на любом курсе снижена в 2 раза, а при перечеслении
денег сразу за весь курс стоимость его снижается на 15%!
Данные цены действуют в течении 2-х недель. Не упустите
свой шанс!
У Вас вопросы? Милости просим: rk@rikt.ru
2. На нашем сайте
отрылась бесплатная рассылка "Сказки школьного образования и как
сказки сделать былью". Подписаться на рассылку Вы можете по адресу:
http://umnik.rikt.ru/everest/ticher.htm