Открыть проект в PyCharm, затем выбрать конфигурацию и указать в Script path - "Telebot/CroupierBot.py", запустить конфигурацию CroupierBot.py.
Найти бота по ссылке: https://t.me/PartyBotbot
The Croupier bot - это игровой бот, в котором реализована механика карточной игры BlackJack с разными вариациями(ставки, замена карт, автосумма очков).
Бот построен по следующей иерархии:
- Игра Blakjack
- Раздача карт и ставка (если включена)
- Механика самой игры
- Выход или продолжение игры
- Настройка игры
- Настройка ставкок, автосуммы, карт и пополнение баланса
- В каждой вкладке есть выбор между кнопкой "включить" или "выключить"
- *Настройки - Переход на страницу настроек игры
- О боте - Краткая информация о боте
- Blackjack - Запуск игры
При запуске игры активируется скрипт который выдает игроку случайную карту:
for i in range(2): #бот раздает две карты себе и игроку
giveRandomCard(bjData.userCard, bjData.botCard) #записывает карту в объект игрока и сравнивает со своим
giveRandomCard(bjData.botCard, bjData.userCard) #записывает карту в свой объект и сравнивает с игроком
#сравнение нужно для проверки дубликатов
Дальше есть вариация ходов:
При нажатии на кнопку выхода, запускается скрипт, который чистит все данные о последних играх. Если игра была со ставками, то бот проверяет, когда вышел игрок: в процессе или по окончании игры. Это нужно для того, чтобы баланс игрока не менялся, если он вышел до окончания игры.
@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 #заканчиваем скрипт игры
При нажатии на кнопку, игрок покидает игру и бот выводит сообщение со своими картами. Меню заменяется.
Далее бот добавляет себе по одной карте до выйгрыша, проигрыша или ничьи.
При нажатии на кнопку скрипт игры перезапускается, ставки обнуляются(если они включены в настройках).
if bjData.gameRate != 0: #если была ставка
bjData.balance = bjData.balance + bjData.gameRate #добавляем игроку на счет, прошлую ставку
bjData.gameRate = 0 #обнуляем ставку
bot.send_message(message.chat.id, "Ну давай повторим") #отправляем сообщение
repository.quitOrRebootGame(False) #перезапускаем скрипт игры
startGame(message) #запускаем скрипт игры
Игра со ставками почти не отличается от игры без ставок, просто скрипт заполняет поле со ставкой, и в конце игры переписывает значение баланса игрока и баланс ставки. Также при перезапуске игры (если она не была закончена) ставка возвращается на баланс игрока, а игровая ставка обнуляется.
В настройках есть четыре поля:
- Автосумма очков
- Ставки
- Пополнение баланса
- Карты
Также при переходе в поле настроек, бот выводит сообщение о состоянии всех настроек.
При нажатии на любое поле, бот спросит что именно сделать с определенной настройкой.
При изменении настроек, меняется поле настройки в файле bjData Это основной файл данных, связанных с игрой.
При переключении настроек карт, бот будет присылать карты не текстом, а картинками.
При отключении автосуммы, она не будет выводится ботом.