Skip to content

Alexandr-Stb/Telebot

Repository files navigation

The Croupier bot

Для запуска бота, вам нужно:

Открыть проект в PyCharm, затем выбрать конфигурацию и указать в Script path - "Telebot/CroupierBot.py", запустить конфигурацию CroupierBot.py.

Найти бота по ссылке: https://t.me/PartyBotbot

Запустить командой /start


The Croupier bot - это игровой бот, в котором реализована механика карточной игры BlackJack с разными вариациями(ставки, замена карт, автосумма очков).

Бот построен по следующей иерархии:

  • Игра Blakjack
    • Раздача карт и ставка (если включена)
    • Механика самой игры
    • Выход или продолжение игры
  • Настройка игры
    • Настройка ставкок, автосуммы, карт и пополнение баланса
    • В каждой вкладке есть выбор между кнопкой "включить" или "выключить"

Изначально бот предалагает на выбор три действия:

Screen_1

  • *Настройки - Переход на страницу настроек игры
  • О боте - Краткая информация о боте
  • Blackjack - Запуск игры

Игра Blackjack

При запуске игры активируется скрипт который выдает игроку случайную карту:

for i in range(2):      #бот раздает две карты себе и игроку
    giveRandomCard(bjData.userCard, bjData.botCard)     #записывает карту в объект игрока и сравнивает со своим
    giveRandomCard(bjData.botCard, bjData.userCard)     #записывает карту в свой объект и сравнивает с игроком
                                                        #сравнение нужно для проверки дубликатов

Screen_2


Дальше есть вариация ходов:

Выход

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

@bot.message_handler(func=lambda message: message.text == commands.exitGame)  #слушатель кнопки выход
def leaveGame(message): 
    if mainData.whereUser == mainData.sections["bj"]:               #проверка того, что игрок находится в игре
        if bjData.gameRate != 0:                                    #Если ставка есть
            bjData.balance = bjData.balance + bjData.gameRate       #Мы к балансу прибавляем цену ставки
            bjData.gameRate = 0                                     #Обнуляем цену игровой ставки
        repository.quitOrRebootGame(True)                           #Очищаем данные прошлой игры
        mainRepository.goMenu(message)                              #Возвращаем игрока в меню

Больше

При нажатии добавляем игроку одну карту и проверяем количество очков:

if bjData.userCard.sum < 21:                                   #если сумма меньше 21
    bot.send_message(message.chat.id, "Держи")                 #пишем сообщение
    repository.giveRandomCard(bjData.userCard, bjData.botCard) #выдаем рандомную карту
    messages.printMesUserCard(message)                         #показываем игроку карты

if bjData.userCard.sum == 21:                                  #если сумма равна 21
    messages.printWonOrLoseMes(message, True)                  #пишем сообщениие о победе
    bjData.startGame = False                                   #заканчиваем скрипт игры

elif bjData.userCard.sum > 21:                                 #если сумма больше 21
    if repository.checkAce(bjData.userCard):                   #проверям, есть ли туз в колоде игрока
        messages.printDownAceMessage(message, "USER")          #если есть, заменяем значение туза с 11 на 1
    else:                                                      #если туза нету
        messages.printWonOrLoseMes(message, False)             #пишем сообщение о проирыше
        bjData.startGame = False                               #заканчиваем скрипт игры

Screeen_3


Пас

При нажатии на кнопку, игрок покидает игру и бот выводит сообщение со своими картами. Меню заменяется.

Далее бот добавляет себе по одной карте до выйгрыша, проигрыша или ничьи.

Screen_3 Screen_4


Заново

При нажатии на кнопку скрипт игры перезапускается, ставки обнуляются(если они включены в настройках).

if bjData.gameRate != 0:                                #если была ставка
    bjData.balance = bjData.balance + bjData.gameRate   #добавляем игроку на счет, прошлую ставку
    bjData.gameRate = 0                                 #обнуляем ставку
bot.send_message(message.chat.id, "Ну давай повторим")  #отправляем сообщение
repository.quitOrRebootGame(False)                      #перезапускаем скрипт игры
startGame(message)                                      #запускаем скрипт игры

Screen_5


Игра со ставками

Игра со ставками почти не отличается от игры без ставок, просто скрипт заполняет поле со ставкой, и в конце игры переписывает значение баланса игрока и баланс ставки. Также при перезапуске игры (если она не была закончена) ставка возвращается на баланс игрока, а игровая ставка обнуляется.


Настройки

В настройках есть четыре поля:

  • Автосумма очков
  • Ставки
  • Пополнение баланса
  • Карты

Также при переходе в поле настроек, бот выводит сообщение о состоянии всех настроек.

image

При нажатии на любое поле, бот спросит что именно сделать с определенной настройкой.

image image

При изменении настроек, меняется поле настройки в файле bjData Это основной файл данных, связанных с игрой.


Остальное

При переключении настроек карт, бот будет присылать карты не текстом, а картинками.

image image

При отключении автосуммы, она не будет выводится ботом.

image image

About

The croupier bot. Телеграм бот с Blackjack

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages