К «Питону» приходят по-разному: кто-то увлекается ИИ, кто-то начинает изучать веб-разработку на «Питоне» взамен уже надоевшего PHP; у меня получилось по-другому – я стал замечать, что этот язык используется довольно часто в современном программировании не только среди энтузиастов, но и в среде крупных компаний. В общем, язык набирает популярность в массах, поэтому я решил к нему «присмотреться», ну, то есть, изучить.
Изучение нового алгоритмического языка, не сказать, что процесс уж очень увлекательный, если ты уже знаком с несколькими… Можно выбрать книгу, можно какой-нибудь онлайн-курс, а можно вообще «ролики-мультики» и … «сиди-читай-изучай». — Скука!
Набрёл я в Сети на самоучитель по «Питону», в принципе, неплохой, но не сказать, что претендующий на полноту изложения синтаксиса и наткнулся там на «Примеры программ». Среди нескольких других, был там один очень любопытный пример, который буквально «повернул время вспять», и я оказался в тех временах, когда «деревья были больше, а трава зеленее»… Его название: «Пишем блэкджек».
Всё началось с компьютерных игр, когда вместо использования «по назначению» выпукло-экранного телевизора его умудрялись «заюзать» в качестве монитора ко всяким «ZX spectrum» и прочим «корветам», а на уроках информатики, вместо того, чтобы программировать, молодая поросль того и гляди, норовила запустить какие-нибудь «гонки» или космическую «стрелялку» с учительского компьютера, загрузив её на все ученические по некому подобию локальной сети.
А в тиши лаборатории какого-нибудь кабинета химии обязательно гнездилась какая-нибудь ЕС ЭВМ, на которой более взрослые товарищи запускали «Принца Персии» или, о, самую крутую игру всех времён и народов, — «Metal mutant»! Да, были времена… А потом всех накрыло волной «Денди» и «Сеги».
Да, это было лирическое отступление, чтобы пояснить, что дети очень падки на всевозможные игрища. Поэтому, очень хороший ход — обучать их программированию на примере написания какой-нибудь игры. В своё время в ВУЗе я написал космическую стрелялку на Turbo Pascal, в то время «великий и ужасный» С++ ещё только начинал входить в программу обучения студентов и по «крутости» его опережал только Ассемблер.
А тут подвернулась такая возможность люто понастальгировать… В общем, загрузил я исходник в «Анаконду» и стал изучать (возможно, кто-то предпочитает IDLE, но мне нравится «Анаконда» за разнообразие инструментов). Так, что тут у нас… Ну, вроде ничего сложного. Давай проверим работоспособность кода. — Работает.
Работает-то он работает… Да только вот не нравится мне такая игра. А где статистика, что сыграл один раунд – и по новой?! – Нет, так не годится! Я стал быстренько править код, убирая ненужные «бреки», добавляя цикл и счётчики побед и поражений. Ну вот, уже лучше. Ах да, в игре всего четыре колоды и они быстро закончатся, если сесть и начать активно «шпилить». Тогда пусть будет тысяча, нет — десять тысяч! Уж этого количества должно хватить до того момента, как программа завершится и скажет «Извини, друг, -Error».
Да, всё замечательно… Только вот мне не нравится запускать сию программулину из под интерпретатора, а если я обычный юзер и не хочу ставить себе эти «Питоны»?! — Экзешник давай, говорю! Ну что же, и этому горю помочь… И вдруг откуда-то взялся Федя, который молвил своё слово:
— Шурик, а может не надо?!
— Надо, Федя… Надо!
Но об этом во второй части.
Изучение нового алгоритмического языка, не сказать, что процесс уж очень увлекательный, если ты уже знаком с несколькими… Можно выбрать книгу, можно какой-нибудь онлайн-курс, а можно вообще «ролики-мультики» и … «сиди-читай-изучай». — Скука!
Набрёл я в Сети на самоучитель по «Питону», в принципе, неплохой, но не сказать, что претендующий на полноту изложения синтаксиса и наткнулся там на «Примеры программ». Среди нескольких других, был там один очень любопытный пример, который буквально «повернул время вспять», и я оказался в тех временах, когда «деревья были больше, а трава зеленее»… Его название: «Пишем блэкджек».
Всё началось с компьютерных игр, когда вместо использования «по назначению» выпукло-экранного телевизора его умудрялись «заюзать» в качестве монитора ко всяким «ZX spectrum» и прочим «корветам», а на уроках информатики, вместо того, чтобы программировать, молодая поросль того и гляди, норовила запустить какие-нибудь «гонки» или космическую «стрелялку» с учительского компьютера, загрузив её на все ученические по некому подобию локальной сети.
А в тиши лаборатории какого-нибудь кабинета химии обязательно гнездилась какая-нибудь ЕС ЭВМ, на которой более взрослые товарищи запускали «Принца Персии» или, о, самую крутую игру всех времён и народов, — «Metal mutant»! Да, были времена… А потом всех накрыло волной «Денди» и «Сеги».
Да, это было лирическое отступление, чтобы пояснить, что дети очень падки на всевозможные игрища. Поэтому, очень хороший ход — обучать их программированию на примере написания какой-нибудь игры. В своё время в ВУЗе я написал космическую стрелялку на Turbo Pascal, в то время «великий и ужасный» С++ ещё только начинал входить в программу обучения студентов и по «крутости» его опережал только Ассемблер.
А тут подвернулась такая возможность люто понастальгировать… В общем, загрузил я исходник в «Анаконду» и стал изучать (возможно, кто-то предпочитает IDLE, но мне нравится «Анаконда» за разнообразие инструментов). Так, что тут у нас… Ну, вроде ничего сложного. Давай проверим работоспособность кода. — Работает.
koloda = [6,7,8,9,10,2,3,4,11] * 4
import random
random.shuffle(koloda)
print('Поиграем в очко?')
count = 0
while True:
choice = input('Будете брать карту? y/n\n')
if choice == 'y':
current = koloda.pop()
print('Вам попалась карта достоинством %d' %current)
count += current
if count > 21:
print('Извините, но вы проиграли')
break
elif count == 21:
print('Поздравляю, вы набрали 21!')
break
else:
print('У вас %d очков.' %count)
elif choice == 'n':
print('У вас %d очков и вы закончили игру.' %count)
break
print('До новых встреч!')
Работает-то он работает… Да только вот не нравится мне такая игра. А где статистика, что сыграл один раунд – и по новой?! – Нет, так не годится! Я стал быстренько править код, убирая ненужные «бреки», добавляя цикл и счётчики побед и поражений. Ну вот, уже лучше. Ах да, в игре всего четыре колоды и они быстро закончатся, если сесть и начать активно «шпилить». Тогда пусть будет тысяча, нет — десять тысяч! Уж этого количества должно хватить до того момента, как программа завершится и скажет «Извини, друг, -Error».
import random
koloda = [6,7,8,9,10,2,3,4,11] * 10000
random.shuffle(koloda)
count = 0
looses = 0
wins = 0
while True:
if count == 0 :
print("------------")
print("Новый раунд!")
print("------------")
choice = input('Будете брать карту? y/n\n')
if choice == 'y':
current = koloda.pop()
print("")
print('Вам попалась карта достоинством %d.' %current)
count += current
if count > 21:
print('Итого %d очков.\n' %count)
print('Извините, но вы проиграли. :-(\n')
elif count == 21:
print('Поздравляю, вы набрали 21!\n')
else:
print('Итого %d очков.' %count)
if count >= 21:
if count == 21: wins = wins + 1
if count > 21: looses = looses + 1
print("Статистика: %d побед," %wins, " %d поражений.\n" %looses)
count = 0
elif choice == 'n':
print("Статистика: %d побед," %wins, " %d поражений.\n" %looses)
break
print('До новых встреч!')
Да, всё замечательно… Только вот мне не нравится запускать сию программулину из под интерпретатора, а если я обычный юзер и не хочу ставить себе эти «Питоны»?! — Экзешник давай, говорю! Ну что же, и этому горю помочь… И вдруг откуда-то взялся Федя, который молвил своё слово:
— Шурик, а может не надо?!
— Надо, Федя… Надо!
Но об этом во второй части.
Комментарии (7)
samhuawey
13.06.2019 09:41А где GUI и графика? Тем более что есть библиотечки которые позволяют сделать это очень простым способом.
YernarShambayev
13.06.2019 11:54Подозреваю, что экзешник для Windows будет делаться при помощи pyinstaller
shalm
13.06.2019 20:38Можно использовать блендер, он содержит встроенный игровой движок работающий на питоне и легко создаёт экзешник.
berez
13.06.2019 12:03Работает-то он работает… Да только вот не нравится мне такая игра. А где статистика, что сыграл один раунд – и по новой?! – Нет, так не годится!
Это вообще не игра, а только половина игры. Даже не половина, а четверть.
Цель игры в блэкджек — обыграть крупье. В вашем же варианте игрок играет просто сам с собой: других игроков нет, ставок нет, статистика побед и поражений невнятная (даже процентов нет).
Кроме того, в реальной игре есть вариант не брать карту, имея на руках меньше 21 очка. У вас же отказ брать карту — это просто выход из игры. Другими словами, от игрока не зависит абсолютно ничего: вся «битва» укладывается в подсчет, сколько раз удалось набрать 21 очко без перебора. Замените ваш бесконечный цикл на цикл со счетчиком, уберите пользовательский ввод — и игра станет даже интереснее. :)
Тогда пусть будет тысяча, нет — десять тысяч! Уж этого количества должно хватить до того момента, как программа завершится и скажет «Извини, друг, -Error».
Плохое решение.
Одна из стратегий игры в блэкджек — это подсчет оставшихся карт в колоде и, соответственно, корректировка вероятностей выпадения карты того или иного достоинства. У вас же эта идея душится в зародыше.
В казино в блэкджек играют одной, двумя или четырьмя колодами, максимум — десятью.
И кстати, в блэкджеке колода полная (52 листа), а очки распределены по-другому: все фигуры — 10 очков, туз — 1 или 11 очков в зависимости от того, есть перебор или нет. Когда колода заканчивается, ее перетасовывают и используют снова.
mactep3230
14.06.2019 08:41Мне почему-то грустно становится от
koloda = [6,7,8,9,10,2,3,4,11] * 10000
И я не о имени переменной, а о объеме памяти, доступной в те времена, когда я так называл.
kleveriwe
Извините, конечно, но мне кажется, что подобный код можно найти в каждой второй книге «Python для чайников».