Мы же от кибернетики далеки, да и наша задача не такая сложная. Нужно лишь на каждый шаг пользователя прописать достойный ответ компьютера. В рамках данной игры это не так уж сложно.
Правила игры:
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 – так как на рисунке 51

Рис.51. Форма игры
Конечно, программисты-профессионалы скажут, что мы делаем все нерационально: данные необходимо сохранять в массиве, а все компоненты создавать в процессе выполнения. Да, все верно! Однако, мы условились обходиться пока без массивов и без создания компонентов в 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. Запустите программу. Вы должны увидеть при нажатии на кнопку выбранную карту и сумму игрока на этот момент.
Самостоятельно: придумайте, как далее расположить карты, механизм раздачи следующих карт.
Располагаем карты.
Как расположить карты в процессе игры? В Image 1 понятно. Туда пойдет первая карта. Во второй Image - 2-ая. Но как это сделать? Можно поступить следующим образом: ввести дополнительную переменную и сопоставлять ей значение Image. А можно поступить следующим образом: у каждого элемента в Delphi есть свойство Tag. Это свойство в процессе работы не используется, его разработчики ввели специально для программиста. В этом свойстве можно хранить целое число. Что мы и сделаем:
Если карта уже находится в Image, то его свойство Tag присвоим равным 1.
1. Откройте двойным щелчком обработчик события кнопки Дать карту.
2. Допишите следующие строки:
if image1.Tag=0 then
begin
image1.Picture:=image8.Picture;
image1.Tag:=1;
end
3. Аналогично и для других рисунков:
else if image2.Tag=0 then
begin
image2.Picture:=image8.Picture;
image2.Tag:=1;
end
else if image3.Tag=0 then
begin
image3.Picture:=image8.Picture;
image3.Tag:=1;
end
else if image4.Tag=0 then
begin
image4.Picture:=image8.Picture;
image4.Tag:=1;
end
else if image5.Tag=0 then
begin
image5.Picture:=image8.Picture;
image5.Tag:=1;
end
else if image6.Tag=0 then
begin
image6.Picture:=image8.Picture;
image6.Tag:=1;
end
else if image7.Tag=0 then
begin
image7.Picture:=image8.Picture;
image7.Tag:=1;
end;
4. Теперь необходимо прописать условия окончания игры:
bitbtn1.Caption:='Дать еще карту';
if s=21 then
begin
label2.Caption:='Ты победил';
button3.Enabled:=false;
bitbtn1.Enabled:=false;
end;
if s>21 then
begin
label2.Caption:= 'Извини, Ты проиграл';
button3.Enabled:=false;
bitbtn1.Enabled:=false;
end;
Самостоятельно: пропишите подобные механизмы и для компьютера (щелчок по кнопке Себе)
Логика:
Далее, необходимо подумать, каким образом закончится игра и как компьютер будет действовать в разных случаях.
Вот как это сделал я, по-моему, тут все ясно:
while s1<s do
begin
bitbtn2.Click;
sleep(500);
application. ProcessMessages();
end;
if s1=s then label3.Caption:= 'Я выиграл!';
if (s1>s) and (s1<22) then label3.Caption:= 'Я выиграл!';
if s1>21 then label3.Caption:= 'Ты выиграл!'
Часть 2
Приложение «Как стать миллионером»
Постановка задачи: Разработать приложение, реализующее алгоритм игры «Кто хочет стать миллионером?». Подготовить внешний файл, содержащий 14 вопросов и 4 варианта ответов на каждый из них. Приложение должно выводить очередной вопрос и варианты ответов. Переход к следующему вопросу происходит только в случае верного ответа. Реализовать возможность трех подсказок: 50 на 50, «помощь зала», звонок другу. Игрок имеет право на три несгораемых суммы.
Приложение «Арканоид»
Постановка задачи: Разработать приложение, реализующее алгоритм игры «Арканоид». На игровом поле расположена «кирпичная стенка». Игрок, управляя «лаптой», должен отбивать постоянно движущийся шарик и выбивать «кирпичи» в стенке. Если шарик не отбит лаптой, игрок теряет свои очки. Игрок выигрывает, если все «кирпичи» стали невидимы.
Приложение «Клавиатурный тренажер»
Постановка задачи: Разработать приложение, позволяющее тренировать навыки работы с клавиатурой. Предусмотреть несколько уровней сложности тренажера. Приложение должно сохранять лучшие результаты игроков.
Приложение «Крестики - нолики»
Постановка задачи: Разработать приложение, реализующее алгоритм игры «Крестики-нолики». В игре участвуют два игрока: пользователь и компьютер. В начале игры разыгрывается право первого хода. Выигрывает тот, кто первый построит линию из своих знаков.
Приложение «Будильник»
Постановка задачи: Разработать приложение, позволяющее имитировать работу будильника с двумя стрелками: часовой и минутной. Будильник должен показывать текущее время. Предусмотреть возможность настройки циферблата будильника (цвет, шрифт) и звуковой сигнал на определенное пользователем время.
Приложение «Шифрование текста»
Постановка задачи: Разработка приложения, реализующего алгоритмы различных способов шифрования и дешифрования текстовой информации.
Приложение «Построение графика функции»
Постановка задачи: Разработать приложение, позволяющее исследовать графики различных математических функций. Предусмотреть возможность масштабирования графика и выбор тип линий.
Приложение «Обучающая программа по английскому языку»
Постановка задачи: Разработать приложение, позволяющее пользователю воспроизводить произношение некоторых английских слов и их перевод.
Приложение «Файловый менеджер»
Постановка задачи: Разработать приложение, позволяющее пользователю работать с файловой системой используемого компьютера:
· просмотр содержимого внешних носителей информации;
· просмотр дерева каталогов диска;
· просмотр содержимого выбранного каталога;
· удаление и переименование файла;
· определение объема свободной памяти диска.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1. Л., И., Основы алгоритмизации и программирования, Учебное пособие. М.: ИНФРА-М, 2012.
2. А., А, Алгоритмизация и языки программирования, Учебно-справочное пособие, М.: Финансы и статистика,2012.
3. А., Delphi 7 на примерах, Учебное издание, К.: Изд. Юниор, 2014.
4. М., Delphi Основы программирования. Решение типовых задач, Самоучитель, М.:КУДИЦ-ОБРАЗ,2014.
5. Программирование на Delphi. Трюки и эффекты, СПб.: Питер,2011.
6. А., В., Курс Delphi для начинающих. Полигон нестандартных задач., М.: СОЛОН-ПРЕСС,2012.
Учебное издание
Дарья Дмитриевна Артюхина
Татьяна Николаевна Коренькова
УП 02. Эксплуатация ЭВМ. Основы алгоритмизации и программирования
Учебное пособие для студентов специальности
09.02.04 – Информационные системы (по отраслям)
Технический редактор: И.
Компьютерная верстка: Д., Н.
Подписано к печати ______________Бумага для множительной техники
Формат ____________Усл. печ. лист.______________Тираж__________экз. Заказ____________
Отпечатано с авторского оригинала в отделе оперативной печати
Старооскольского технологического института.
Старый Оскол, микрорайон Макаренко, 40.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Основные порталы (построено редакторами)
