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

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

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

pic1

Рис.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

Основные порталы (построено редакторами)

Домашний очаг

ДомДачаСадоводствоДетиАктивность ребенкаИгрыКрасотаЖенщины(Беременность)СемьяХобби
Здоровье: • АнатомияБолезниВредные привычкиДиагностикаНародная медицинаПервая помощьПитаниеФармацевтика
История: СССРИстория РоссииРоссийская Империя
Окружающий мир: Животный мирДомашние животныеНасекомыеРастенияПриродаКатаклизмыКосмосКлиматСтихийные бедствия

Справочная информация

ДокументыЗаконыИзвещенияУтверждения документовДоговораЗапросы предложенийТехнические заданияПланы развитияДокументоведениеАналитикаМероприятияКонкурсыИтогиАдминистрации городовПриказыКонтрактыВыполнение работПротоколы рассмотрения заявокАукционыПроектыПротоколыБюджетные организации
МуниципалитетыРайоныОбразованияПрограммы
Отчеты: • по упоминаниямДокументная базаЦенные бумаги
Положения: • Финансовые документы
Постановления: • Рубрикатор по темамФинансыгорода Российской Федерациирегионыпо точным датам
Регламенты
Термины: • Научная терминологияФинансоваяЭкономическая
Время: • Даты2015 год2016 год
Документы в финансовой сферев инвестиционнойФинансовые документы - программы

Техника

АвиацияАвтоВычислительная техникаОборудование(Электрооборудование)РадиоТехнологии(Аудио-видео)(Компьютеры)

Общество

БезопасностьГражданские права и свободыИскусство(Музыка)Культура(Этика)Мировые именаПолитика(Геополитика)(Идеологические конфликты)ВластьЗаговоры и переворотыГражданская позицияМиграцияРелигии и верования(Конфессии)ХристианствоМифологияРазвлеченияМасс МедиаСпорт (Боевые искусства)ТранспортТуризм
Войны и конфликты: АрмияВоенная техникаЗвания и награды

Образование и наука

Наука: Контрольные работыНаучно-технический прогрессПедагогикаРабочие программыФакультетыМетодические рекомендацииШколаПрофессиональное образованиеМотивация учащихся
Предметы: БиологияГеографияГеологияИсторияЛитератураЛитературные жанрыЛитературные героиМатематикаМедицинаМузыкаПравоЖилищное правоЗемельное правоУголовное правоКодексыПсихология (Логика) • Русский языкСоциологияФизикаФилологияФилософияХимияЮриспруденция

Мир

Регионы: АзияАмерикаАфрикаЕвропаПрибалтикаЕвропейская политикаОкеанияГорода мира
Россия: • МоскваКавказ
Регионы РоссииПрограммы регионовЭкономика

Бизнес и финансы

Бизнес: • БанкиБогатство и благосостояниеКоррупция(Преступность)МаркетингМенеджментИнвестицииЦенные бумаги: • УправлениеОткрытые акционерные обществаПроектыДокументыЦенные бумаги - контрольЦенные бумаги - оценкиОблигацииДолгиВалютаНедвижимость(Аренда)ПрофессииРаботаТорговляУслугиФинансыСтрахованиеБюджетФинансовые услугиКредитыКомпанииГосударственные предприятияЭкономикаМакроэкономикаМикроэкономикаНалогиАудит
Промышленность: • МеталлургияНефтьСельское хозяйствоЭнергетика
СтроительствоАрхитектураИнтерьерПолы и перекрытияПроцесс строительстваСтроительные материалыТеплоизоляцияЭкстерьерОрганизация и управление производством