Пока я проходил курс информатики в 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

Планирование:

Когда я построил базовую механику, я мог придумать, как можно организовать игру.

  1. Приветствие игроку в зависимости от текущего времени суток. Спрашивать их имя и указывать его на протяжении всей игры.
  2. Создав функцию, которая будет спрашивать, сколько фишек они хотели бы поставить, сначала все начиналось довольно просто, но стало намного сложнее, когда я начал добавлять в игру дополнительную функцию.
  3. Создание почти десятка отдельных функций для каждой из следующих задач:
  • Ударьте игрока или дилера картой
  • Подсказка встать или ударить
  • Запрос на перезапуск игры, когда игрок выиграл или проиграл
  • Две функции, которые могут показать все карты, а другая скрыть одну из карт дилеров.
  • Две функции для подсказки, когда игрок или дилер вылетели из игры.
  • Две функции для подсказки победителя.
  • И еще один, чтобы связать, если значения в результате равны.

Заканчивать:

  1. С этого момента все, что оставалось, - это построить основную часть того, как игра будет начинаться и заканчиваться, построенная в рамках цикла while, который позволит игроку перезапуститься при появлении запроса.
  2. После того, как структура игры была построена, я начал отладку, которая, если вы не знали, требует, чтобы вы запускали код и играли в игру во всех возможных сценариях, чтобы убедиться, что все работает правильно, а затем исправить это, если это не сделал.
  3. И, наконец, после того, как базовая игра заработала, я начал добавлять дополнительные функции, о которых упоминал в начале, список выглядит следующим образом:
  • При потере всех фишек игрока вам будет предложено спросить, хотите ли вы взять небольшую ссуду. По сути, давая игроку скрытую дополнительную жизнь.
  • Затем долг будет отслеживаться и постепенно выплачиваться за счет выигрыша игрока.

Честно говоря, эти функции были довольно бессмысленными на размышления, потому что вы можете просто перезапустить всю игру и начать с 1000 фишек 😂, но я хотел посмотреть, можно ли это сделать, также это было довольно весело. Кроме того, это послужило отличной практикой, когда дело доходит до более сложных проектов в будущем.

Итак, в заключение, это было намного сложнее, чем я первоначально ожидал, но работа над чем-то с нуля была чрезвычайно полезной. Я говорю: "Получите заряд этой игры, которую я создал!" всем, кого я встречаю сейчас. Возможно, это только текст, но, конечно же, я преодолел сложную задачу, и я очень горжусь этим фактом.

Это дало мне совершенно новый взгляд на трудности, с которыми сталкиваются разработчики игр, но с настройкой в ​​тысячу раз сложнее, это как бы заставило меня немного по-другому подумать о том, какой путь я хотел бы выбрать. И, что наиболее важно, это вселило в меня уверенность в том, что я смогу развиваться и стать разработчиком программного обеспечения, пока я не сдаюсь и мой мозг продолжает работать, я должен быть золотым. Хотя временами на протяжении всего этого процесса мне казалось, что мой мозг буквально тает! Таким образом, вероятность потери функции мозга вполне реальна, поэтому с этого момента мне лучше принимать витамины B12.

Спасибо, что нашли время прочитать мой первый блог. Пожалуйста, поделитесь с нами своими мыслями и отзывами о моем написании или коде.

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

PS. Если вы хотите играть в игру бесплатно, следуйте моему пошаговому руководству: Учебник по загрузке блэкджека и быстрой установке Python

Подробности соревнований по блэкджеку

Первый человек, который получит 100000 фунтов стерлингов и оставит мне отзыв о моем GitHub или блоге, выиграет 50 фунтов стерлингов в биткойнах! см. полную информацию ниже…

₿₿₿ Биткойн будет ВЫИГРАН !! ₿₿₿

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

Я буду включать ссылку, которая позволит вам всем скачать файлы и сохранить копию, чтобы играть бесплатно!

Для всех, кто знает, как запускать файлы Python, у них не должно возникнуть проблем с их воспроизведением, но для тех, кто этого не делает, я добавлю краткое руководство о том, как бесплатно загрузить python на свой компьютер, а затем как запустить файл python. . Занимает максимум 5 минут.

Если вы окажете мне твердую поддержку в этой игре, я призываю вас найти любые ошибки и заработать более 100 000 фунтов стерлингов (не настоящих денег) в игре! если вы сделаете снимок экрана с суммой и отправите ее мне, а затем оставьте отзыв в разделе обсуждения на странице игр GitHub. Я награжу первого, кто сделает это, биткойнами на 50 фунтов стерлингов в качестве благодарности!

Если вам нужны какие-либо дополнительные функции, чтобы сделать игру более увлекательной, дайте мне знать, и я постараюсь настроить ее в соответствии с вашими потребностями, если я считаю, что она станет хорошим дополнением к игре.

Я надеюсь закончить страницу блога к воскресенью, так что следите за мной.

Если будет позже, я дам вам знать.

У победителя должен быть адрес кошелька BTC для перевода монеты. Обычно их можно скачать бесплатно.

Победитель будет объявлен вскоре после завершения конкурса.