"Эверест" - Центр Практической
Информатики
представляет вводный курс
"Delphi для чайников"
Урок 21.
"Создаем игру 21".
Логические и карточные игры
21 урок- игра в 21. Символично, не правда ли?
Игры, подобные данной, претендуют на звание интеллектуальных. На данном
этапе в соревнование с человеком должна вступить машина. Работу компьютера
должны прописать мы сами.
Под искусственным интеллектом мы будем понимать адекватные действия машины
на действия человека. Вообще говоря, это слишком сложная задача и ее решением
занимается специальная наука- кибернетика.
Мы же от кибернетики далеки, да и наша задача не такая сложная. Нужно
лишь на каждый шаг пользователя прописать достойный ответ компьютера.
В рамках данной игры это не так уж сложно.
Правила игры:
- В 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. Запустите программу. Вы должны увидеть при нажатии на кнопку выбранную
карту и сумму игрока на этот момент.
Самостоятельно: придумайте, как далее расположить карты, механизм раздачи
следующих карт. Как это сделал я- я покажу на следующем уроке. Тогда же
мы и доделаем игру.
Рисунки к игре Вы можете скачать с нашего сайта.. 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
Автор рассылки: Ишмуратов Р.К.
|