Пока я проходил курс информатики в Codecademy, мне было поручено завершить последний проект для первой половины курса CS101. Это может быть любая текстовая игра по моему выбору, и поэтому я столкнулся с проблемой создания игры в блэкджек… «насколько это может быть сложно». Я сказал себе. Оказывается, я был дураком, думая о таких вещах, но для меня это будет не в первый раз. 😅
Моя первая задача заключалась в том, чтобы сначала написать псевдокод для всех, кто не знает, что это такое, попросту говоря, это в основном деконструирование в слова того, что есть идея, чтобы у вас было общее представление о том, что идет первым, и остальной части пути. нужно брать.
Псевдокод:
Правила простой игры в блэкджек следующие:
- Цель блэкджека - выиграть у дилера, не превышая 21.
- Лицевые карты стоят 10. Тузы стоят 1 или 11, в зависимости от того, какая рука лучше.
- Каждый игрок начинает с двумя картами, одна из карт дилера скрыта до второго раунда.
- «Попасть» - значит попросить другую карту. «Встать» означает удерживать сумму и закончить свой ход.
- Если вы превысите 21, вы проиграете, и крупье выиграет независимо от руки дилера.
- Если вам с самого начала раздали 21 (туз и 10), у вас блэкджек.
- Дилер будет бить, пока его / ее карты не наберут 17 или больше.
- Игроки могут бить, пока их карты не дойдут до 20.
- Если карты выпадают на одно и то же число, и никакие другие удары не выполняются, то это ничья, также известная как толчок.
- В покере вы можете удвоить ставку, но я пока не буду это включать.
- Игрок также может разместить фишки, чтобы сделать ставку и выиграть больше или проиграть ставку на результат игры.
Хммм, это уже звучит немного сложнее, чем я ожидал! Но, к черту, перейдем к делу.
Создание фундамента:
Для упрощения я просто собираюсь обсудить базовую механику того, как я начал создавать игру, и кратко упомяну добавленные дополнительные функции позже. Если я буду обсуждать все, этот блог будет слишком длинным и, вероятно, вызовет у вас слезы.
Итак, для начала я сначала построил массивы, которые будут содержать костюмы, ранги и значения:
suits = ('Hearts', 'Diamonds', 'Spades', 'Clubs') ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace') values = { 'Two': 2, 'Three': 3, 'Four': 4, 'Five': 5, 'Six': 6, 'Seven': 7, 'Eight': 8,'Nine': 9, 'Ten': 10, 'Jack': 10, 'Queen': 10, 'King': 10, 'Ace': 11, }
Затем я начал создавать классы, первый должен обрабатывать масть и ранг каждой карты внутри колоды.
class Card: def __init__(self, suit, rank): self.suit = suit self.rank = rank def __str__(self): return self.rank + ' of ' + self.suit
Второй класс будет помещать карты, которые мы сделали, в указанную колоду и создавать функцию тасования внутри класса.
class Deck: def __init__(self): self.deck = [] for suit in suits: for rank in ranks: self.deck.append(Card(suit, rank)) def __str__(self): deck_comp = '' for card in self.deck: deck_comp += '\n '+card.__str__() return 'The deck has:' + deck_comp def shuffle(self): random.shuffle(self.deck) def deal(self): single_card = self.deck.pop() return single_card
Затем нам нужен был класс, который мог бы составить руку для игрока и дилера, одновременно отслеживая ценность карт и тузов в руке. Если туз действительно появляется, тогда необходимо будет изменить значение от 1 до 11 в зависимости от текущего общего значения руки. Если 11 вызовет разрушение руки, тогда она перейдет на 1.
class Hand: def __init__(self): self.cards = [] self.value = 0 self.aces = 0 def add_card(self, card): self.cards.append(card) self.value += values[card.rank] if card.rank == 'Ace’: self.aces += 1 def adjust_for_ace(self): while self.value > 21 and self.aces: self.value -= 10 self.aces -= 1
Теперь для ставок будет создан другой класс, который будет содержать значение всех доступных фишек и сумму, которую игрок желает поставить, а также обрабатывать сумму 1,5-кратного выигрыша и сумму проигрышной ставки для каждого результата игры.
class Chips: def __init__(self): self.total = 100 self.bet = 0 def win_bet(self): self.total += round(self.bet * 1.5) def lose_bet(self): self.total -= self.bet
Планирование:
Когда я построил базовую механику, я мог придумать, как можно организовать игру.
- Приветствие игроку в зависимости от текущего времени суток. Спрашивать их имя и указывать его на протяжении всей игры.
- Создав функцию, которая будет спрашивать, сколько фишек они хотели бы поставить, сначала все начиналось довольно просто, но стало намного сложнее, когда я начал добавлять в игру дополнительную функцию.
- Создание почти десятка отдельных функций для каждой из следующих задач:
- Ударьте игрока или дилера картой
- Подсказка встать или ударить
- Запрос на перезапуск игры, когда игрок выиграл или проиграл
- Две функции, которые могут показать все карты, а другая скрыть одну из карт дилеров.
- Две функции для подсказки, когда игрок или дилер вылетели из игры.
- Две функции для подсказки победителя.
- И еще один, чтобы связать, если значения в результате равны.
Заканчивать:
- С этого момента все, что оставалось, - это построить основную часть того, как игра будет начинаться и заканчиваться, построенная в рамках цикла while, который позволит игроку перезапуститься при появлении запроса.
- После того, как структура игры была построена, я начал отладку, которая, если вы не знали, требует, чтобы вы запускали код и играли в игру во всех возможных сценариях, чтобы убедиться, что все работает правильно, а затем исправить это, если это не сделал.
- И, наконец, после того, как базовая игра заработала, я начал добавлять дополнительные функции, о которых упоминал в начале, список выглядит следующим образом:
- При потере всех фишек игрока вам будет предложено спросить, хотите ли вы взять небольшую ссуду. По сути, давая игроку скрытую дополнительную жизнь.
- Затем долг будет отслеживаться и постепенно выплачиваться за счет выигрыша игрока.
Честно говоря, эти функции были довольно бессмысленными на размышления, потому что вы можете просто перезапустить всю игру и начать с 1000 фишек 😂, но я хотел посмотреть, можно ли это сделать, также это было довольно весело. Кроме того, это послужило отличной практикой, когда дело доходит до более сложных проектов в будущем.
Итак, в заключение, это было намного сложнее, чем я первоначально ожидал, но работа над чем-то с нуля была чрезвычайно полезной. Я говорю: "Получите заряд этой игры, которую я создал!" всем, кого я встречаю сейчас. Возможно, это только текст, но, конечно же, я преодолел сложную задачу, и я очень горжусь этим фактом.
Это дало мне совершенно новый взгляд на трудности, с которыми сталкиваются разработчики игр, но с настройкой в тысячу раз сложнее, это как бы заставило меня немного по-другому подумать о том, какой путь я хотел бы выбрать. И, что наиболее важно, это вселило в меня уверенность в том, что я смогу развиваться и стать разработчиком программного обеспечения, пока я не сдаюсь и мой мозг продолжает работать, я должен быть золотым. Хотя временами на протяжении всего этого процесса мне казалось, что мой мозг буквально тает! Таким образом, вероятность потери функции мозга вполне реальна, поэтому с этого момента мне лучше принимать витамины B12.
Спасибо, что нашли время прочитать мой первый блог. Пожалуйста, поделитесь с нами своими мыслями и отзывами о моем написании или коде.
Всем опытным программистам, читающим это, я хотел бы, если возможно, просмотреть свой код в моем репозитории на GitHub. Я также создал раздел для обсуждения, если вы хотите задать какие-либо вопросы или указать на какие-либо изменения в моем коде. Мой GitHub: здесь
PS. Если вы хотите играть в игру бесплатно, следуйте моему пошаговому руководству: Учебник по загрузке блэкджека и быстрой установке Python
Подробности соревнований по блэкджеку
Первый человек, который получит 100000 фунтов стерлингов и оставит мне отзыв о моем GitHub или блоге, выиграет 50 фунтов стерлингов в биткойнах! см. полную информацию ниже…
₿₿₿ Биткойн будет ВЫИГРАН !! ₿₿₿
На выходных я опубликую запись в блоге о созданной мной текстовой игре в блэкджек. На программирование у меня ушло более 40 часов, это определенно самая сложная задача, которую я когда-либо выполнял.
Я буду включать ссылку, которая позволит вам всем скачать файлы и сохранить копию, чтобы играть бесплатно!
Для всех, кто знает, как запускать файлы Python, у них не должно возникнуть проблем с их воспроизведением, но для тех, кто этого не делает, я добавлю краткое руководство о том, как бесплатно загрузить python на свой компьютер, а затем как запустить файл python. . Занимает максимум 5 минут.
Если вы окажете мне твердую поддержку в этой игре, я призываю вас найти любые ошибки и заработать более 100 000 фунтов стерлингов (не настоящих денег) в игре! если вы сделаете снимок экрана с суммой и отправите ее мне, а затем оставьте отзыв в разделе обсуждения на странице игр GitHub. Я награжу первого, кто сделает это, биткойнами на 50 фунтов стерлингов в качестве благодарности!
Если вам нужны какие-либо дополнительные функции, чтобы сделать игру более увлекательной, дайте мне знать, и я постараюсь настроить ее в соответствии с вашими потребностями, если я считаю, что она станет хорошим дополнением к игре.
Я надеюсь закончить страницу блога к воскресенью, так что следите за мной.
Если будет позже, я дам вам знать.
У победителя должен быть адрес кошелька BTC для перевода монеты. Обычно их можно скачать бесплатно.
Победитель будет объявлен вскоре после завершения конкурса.