Создание игры телеграм бота, как исправить?

Ссылка скопирована
1 ответ

Добрый день хабрчане))
Пытаюсь создать блэкджек на javascript в телеграм боте.
Поможет кто нибудь исправить проблему?
Заключается в том, что не срабатывает условие если у пользователя более 21 очка
Вот код:

const TelegramBot = require('node-telegram-bot-api'); const deck = [],     suits = ['♥', '♦', '♠', '♣'],      values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];      // Creating deck      for (const value of values) {         for (const suit of suits) {             let points = parseInt(value) || (value === "A" ? 11 : 10)             deck.push({                 value,                 suit,                 points             });          }      }     // Shuffles the deck     for (let i = deck.length - 1; i > 0; i--) {         let r = ~~(Math.random() * (i + 1));         //Switches cards         [deck[i], deck[r]] = [deck[r], deck[i]]     }     class Player {         constructor( /*bet = null, split = false*/ ) {             this._cards = [];             /*this.bet = bet;             this.split = split;*/         }          hit() {             this._cards.push(deck.shift());         }          double() {             //this.bet *= 2;             bet *= 2             this.hit();         }         get points() {             return this._cards.map(c => c.points)         }         get value() {             let val = this.points.reduce((a, b) => a + b);             let aces = this.points.filter(p => p === 11).length;             while (val > 21 && aces--)                 val -= 10;              if (isNaN(val)) throw new Error("Value is NaN")             return val;         }          get print() {             return this._cards.map((a) => a.value + a.suit).join(' ');         }     }      // Declaring player and dealer     const player = new Player( /*bet*/ );     const dealer = new Player();      //To start the game - Player - 2 cards / Dealer - 1     player.hit();     player.hit();     dealer.hit(); if (msg.text === '/bj') {             client.deleteMessage(msg.chat.id, msg.message_id).catch(err => {return;})                          if (player.value === 21) {                                  if (dealer.value === 21) {                     client.sendMessage(msg.chat.id, `♻️ НичьяnВаши карты:` + player.print + `nОчки:` + player.value + `nКарты дилера:` + dealer.print + `nОчки:` + dealer.value, {                         disable_notification: true,                     })                 } else {                     client.sendMessage(msg.chat.id, ` BLACKJACKnВаши карты:` + player.print + `nОчки:` + player.value + `nКарты дилера:` + dealer.print + `nОчки:` + dealer.value, {                         disable_notification: true,                     })                 }                              } else {                 const msgWait = await client.sendMessage(msg.chat.id, `Ваши карты:` + player.print + `nОчки:` + player.value + `nКарты дилера:` + dealer.print + `nОчки:` + dealer.value, {                     reply_markup: {                         inline_keyboard: [                             [                                    {                                     text: "Карту",                                     callback_data: "hit"                                 },                                 {                                     text: "Вскрыть",                                     callback_data: "stand"                                 }                                                                                         ]                         ]                     },                     disable_notification: true,                 })             }                                   }

const TelegramBot = require('node-telegram-bot-api'); const deck = [], suits = ['♥', '♦', '♠', '♣'], values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']; // Creating deck for (const value of values) { for (const suit of suits) { let points = parseInt(value) || (value === "A" ? 11 : 10) deck.push({ value, suit, points }); } } // Shuffles the deck for (let i = deck.length - 1; i > 0; i--) { let r = ~~(Math.random() * (i + 1)); //Switches cards [deck[i], deck[r]] = [deck[r], deck[i]] } class Player { constructor( /*bet = null, split = false*/ ) { this._cards = []; /*this.bet = bet; this.split = split;*/ } hit() { this._cards.push(deck.shift()); } double() { //this.bet *= 2; bet *= 2 this.hit(); } get points() { return this._cards.map(c => c.points) } get value() { let val = this.points.reduce((a, b) => a + b); let aces = this.points.filter(p => p === 11).length; while (val > 21 && aces--) val -= 10; if (isNaN(val)) throw new Error("Value is NaN") return val; } get print() { return this._cards.map((a) => a.value + a.suit).join(' '); } } // Declaring player and dealer const player = new Player( /*bet*/ ); const dealer = new Player(); //To start the game - Player - 2 cards / Dealer - 1 player.hit(); player.hit(); dealer.hit(); if (msg.text === '/bj') { client.deleteMessage(msg.chat.id, msg.message_id).catch(err => {return;}) if (player.value === 21) { if (dealer.value === 21) { client.sendMessage(msg.chat.id, `♻️ НичьяnВаши карты:` + player.print + `nОчки:` + player.value + `nКарты дилера:` + dealer.print + `nОчки:` + dealer.value, { disable_notification: true, }) } else { client.sendMessage(msg.chat.id, ` BLACKJACKnВаши карты:` + player.print + `nОчки:` + player.value + `nКарты дилера:` + dealer.print + `nОчки:` + dealer.value, { disable_notification: true, }) } } else { const msgWait = await client.sendMessage(msg.chat.id, `Ваши карты:` + player.print + `nОчки:` + player.value + `nКарты дилера:` + dealer.print + `nОчки:` + dealer.value, { reply_markup: { inline_keyboard: [ [ { text: "Карту", callback_data: "hit" }, { text: "Вскрыть", callback_data: "stand" } ] ] }, disable_notification: true, }) } }

А это обработчик кнопок:

client.on('callback_query', query => {     const {chat, message_id } = query.message;     const action = query.data;     const userid = query.from.id;     const emoji = ""     let text;      if(action === 'hit') {         let turn = 0,         state = true          turn++         player[query.data]()                  text = `Ваши карты:` + player.print + `nОчки:` + player.value + `nКарты дилера:` + dealer.print + `nОчки:` + dealer.value;             client.editMessageText(text, {                 chat_id: chat.id,                 message_id: message_id,                 reply_markup: {                     inline_keyboard: [                         [                                {                                 text: "Карту",                                 callback_data: "hit"                             },                             {                                 text: "Вскрыть",                                 callback_data: "stand"                             }                                                  ]                     ]                 }                              })         if (player.value > 21) {             text = `ПроигралnВаши карты:` + player.print + `nОчки:` + player.value + `nКарты дилера:` + dealer.print + `nОчки:` + dealer.value;              client.editMessageText(text, {                 chat_id: chat.id,                 message_id: message_id,                                              })             return;         }               });

client.on('callback_query', query => { const {chat, message_id } = query.message; const action = query.data; const userid = query.from.id; const emoji = "" let text; if(action === 'hit') { let turn = 0, state = true turn++ player[query.data]() text = `Ваши карты:` + player.print + `nОчки:` + player.value + `nКарты дилера:` + dealer.print + `nОчки:` + dealer.value; client.editMessageText(text, { chat_id: chat.id, message_id: message_id, reply_markup: { inline_keyboard: [ [ { text: "Карту", callback_data: "hit" }, { text: "Вскрыть", callback_data: "stand" } ] ] } }) if (player.value > 21) { text = `ПроигралnВаши карты:` + player.print + `nОчки:` + player.value + `nКарты дилера:` + dealer.print + `nОчки:` + dealer.value; client.editMessageText(text, { chat_id: chat.id, message_id: message_id, }) return; } });

Дополнительно:

Action в этот момент точно hit?

  • Евгений Мартынов, вопрос был в другом, уже сам решил
  • Вопрос решил сам

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Кирилл JS Ответ

    Для создания игры в телеграм-боте необходимо следовать нескольким шагам:

    1. Создание бота в Telegram:
    - Зайдите в Telegram и найдите бота под названием BotFather.
    - Напишите ему сообщение /newbot и следуйте инструкциям, чтобы создать нового бота.
    - Получите токен доступа к вашему боту.

    2. Настройка бота:
    - Напишите код на языке программирования, который будет обрабатывать запросы от пользователей и отправлять им ответы.
    - Для этого можно использовать библиотеки для работы с Telegram API, например, python-telegram-bot для Python.

    3. Реализация игры:
    - Определите правила игры и создайте логику, которая будет управлять состоянием игры.
    - Можно использовать различные типы сообщений в Telegram для взаимодействия с пользователем, например, текстовые сообщения, кнопки, изображения и т. д.

    4. Тестирование и отладка:
    - Протестируйте вашего бота, убедитесь, что он корректно обрабатывает запросы пользователей и отвечает на них.
    - Если возникают ошибки, используйте отладчик для их исправления.

    5. Развитие функционала:
    - Добавьте новые возможности в вашу игру, чтобы сделать ее более интересной для пользователей.
    - Продолжайте развивать и улучшать своего бота, следуя обратной связи от пользователей.

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно