Задать вопрос
@Den18
MYSQL, JS хобби

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

Добрый день хабрчане))
Пытаюсь создать блэкджек на 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, ` BLACKJACK\nВаши карты:` + 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;
        } 
        
   
});
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы