Exemplo n.º 1
0
def client_hit(data):
    draw(identifier_to_steamid(data['identifier']), db.session.query(Game).filter(Game.player_steamid == identifier_to_steamid(data['identifier'])).one().deck_identifier, Status.visible)

    socketio.emit('update_table', json.dumps(update_table(data['identifier'])), room=request.sid)

    if isGameOver(identifier_to_steamid(data['identifier'])):
        client_stand(data)
Exemplo n.º 2
0
def join_multi():
    if 'room_key' in request.form and request.form['room_key'] != '':
        if table_handler.table_exist(request.form['room_key']):
            print('valid room key')
            if table_handler.isFull(
                    table_handler.identifier_to_id(request.form['room_key'])):
                print('room is full')
            else:
                table_handler.join_table(
                    table_handler.identifier_to_id(request.form['room_key']),
                    identifier_to_steamid(request.cookies.get('identifier')))
                print('Joined room')
                return render_template(
                    'multiplayer/blackjack.html',
                    website_info=configuration_handler.load('website'))

        else:
            print('Invalid room key')

    else:
        print('Auto joining room')
        table_handler.auto_join(
            identifier_to_steamid(request.cookies.get('identifier')))

        print('Joined room')
        return render_template(
            'multiplayer/blackjack.html',
            website_info=configuration_handler.load('website'))

    return redirect('/multi')
Exemplo n.º 3
0
def client_connect(data):
    print('Client has connected')

    deck_identifier = db.session.query(Game).filter(Game.player_steamid == identifier_to_steamid(data['identifier'])).one().deck_identifier

    draw(identifier_to_steamid(data['identifier']), deck_identifier,Status.visible)
    draw(identifier_to_steamid(data['identifier']), deck_identifier,Status.hidden)

    draw(get_cpu_identifier(data['identifier']), deck_identifier, Status.visible)
    draw(get_cpu_identifier(data['identifier']), deck_identifier, Status.hidden)
    
    socketio.emit('update_table', json.dumps(update_table(data['identifier'])), room=request.sid)

    if isGameOver(identifier_to_steamid(data['identifier'])):
        client_stand(data)
Exemplo n.º 4
0
def isIngame(identifier):
    if db.session.query(Active_player).filter(
            Active_player.steamid == identifier_to_steamid(
                identifier)).count():
        return True

    return False
Exemplo n.º 5
0
def update_table(identifier):
    steamid = identifier_to_steamid(identifier)

    table = get_current_table(steamid)

    player_objects = []

    for player in db.session.query(Active_player).filter(
            Active_player.table_id == table.id).all():
        player_obj = {
            'name': steamid_to_name(player.steamid),
            'status_string': player.status_string,
            'cards': [],
            'bet': player.bet
        }

        for card in db.session.query(Active_card).filter(
                Active_card.owner == player.steamid):
            if card.status == Status.hidden:
                player_obj['cards'].append('green_back')
            else:
                player_obj['cards'].append(
                    db.session.query(Card).filter(
                        Card.id == card.card_identifier).one().image_name)

        player_objects.append(player_obj)

    emit_to_table(
        get_current_table(steamid).id, 'update_table',
        json.dumps(player_objects))
Exemplo n.º 6
0
def double_bet(identifier):
    game = db.session.query(Game).filter(
        Game.player_steamid == identifier_to_steamid(identifier)).one()

    remove_balance(identifier, game.bet)

    game.bet = game.bet * 2
    db.session.commit()
Exemplo n.º 7
0
def isIngame(identifier):
    print('Validating identifier ' + identifier)

    if db.session.query(Game).filter(
            Game.player_steamid == identifier_to_steamid(identifier)).count():
        return True
    else:
        return False
Exemplo n.º 8
0
def round_action(identifier):
    steamid = identifier_to_steamid(identifier)

    if get_turn(get_current_table(steamid).id) == None:
        if db.session.query(Active_player).filter(
                Active_player.steamid == steamid).filter(
                    Active_player.bet != None).count():
            print('All bets completed')

            table = get_current_table(steamid)
            table.player_turn = 0

            db.session.commit()

            round_action(identifier)
        else:
            print('Sending bet option')
            for player in db.session.query(Active_player).filter(
                    Active_player.table_id == get_current_table(
                        steamid).id).filter(Active_player.bet == None).all():
                send_options(player.steamid, options.bet)

    elif round_over(get_current_table(steamid).id):
        print('Round over')
        finish_round(get_current_table(steamid).id)

    elif db.session.query(Active_player).filter(
            Active_player.table_id == get_current_table(steamid).id).filter(
                Active_player.has_played == False).filter(
                    Active_player.status == Player_status.active).count():
        print('Sending play requests to players')
        players = db.session.query(Active_player).filter(
            Active_player.table_id == get_current_table(steamid).id).filter(
                Active_player.has_played == False).all()

        send_options(players[0].steamid, options.play)

    elif db.session.query(Active_player).filter(
            Active_player.table_id == get_current_table(steamid).id).filter(
                Active_player.has_played == True).filter(
                    Active_player.status == Player_status.active).count():
        print('All players have played')
        for player in db.session.query(Active_player).filter(
                Active_player.table_id == get_current_table(steamid).id
        ).filter(Active_player.has_played == True).all():
            player.has_played = False
            db.session.commit()

        table = get_current_table(steamid)
        table.player_turn += 1
        db.session.commit()

    else:
        print('No action required')

    update_table(identifier)
Exemplo n.º 9
0
def client_connect(data):

    player = db.session.query(Active_player).filter(
        Active_player.steamid == identifier_to_steamid(data['identifier'])
    ).filter(Active_player.session_id == None).one()
    player.session_id = request.sid

    db.session.commit()

    print('Client has connected to table')

    round_handler.round_action(data['identifier'])

    if table_handler.get_turn(
            table_handler.get_current_table(
                identifier_to_steamid(data['identifier'])).id) != None:
        socketio.emit('client_message',
                      json.dumps({'message': 'Wait till next round'}),
                      room=request.sid)
Exemplo n.º 10
0
def client_doubledown(data):
    if doubledown_valid(data['identifier']):
        if sufficent_funds(data['identifier'], current_bet(data['identifier'])):
            draw(identifier_to_steamid(data['identifier']), db.session.query(Game).filter(Game.player_steamid == identifier_to_steamid(data['identifier'])).one().deck_identifier, Status.hidden)
            double_bet(data['identifier'])
            
            socketio.emit('update_table', json.dumps(update_table(data['identifier'])), room=request.sid)

            client_stand(data)
        else:
            socketio.emit('error', {'message': 'insufficent funds'}, room=request.sid)
Exemplo n.º 11
0
def client_action(data):
    if data['action'] == 'bet':
        response = table_handler.validate_bet(data['identifier'],
                                              int(data['amount']))
        print(response)
        if response == 'Bet placed':
            socketio.emit('action_confirmed', room=request.sid)

        socketio.emit('client_message',
                      json.dumps({'message': response}),
                      room=request.sid)

    elif data['action'] == 'hit':
        draw(
            identifier_to_steamid(data['identifier']),
            table_handler.get_current_table(
                identifier_to_steamid(data['identifier'])).deck_identifier,
            Status.visible)

    round_handler.round_action(data['identifier'])
Exemplo n.º 12
0
def update_table(identifier):
    steamid = identifier_to_steamid(identifier)

    game = db.session.query(Game).filter(Game.player_steamid == steamid).one()

    player_hand = db.session.query(Active_card).filter(
        Active_card.owner == steamid).all()
    cpu_hand = db.session.query(Active_card).filter(
        Active_card.owner == game.cpu_hand_identifier).all()

    print('Got hands')

    table_data = {
        'player_cards': [],
        'cpu_cards': [],
        'doubledown':
        doubledown_valid(steamid),
        'bet':
        db.session.query(Game).filter(Game.player_steamid == steamid).one().bet
    }
    print('Got doubledown and bet status')

    for card in player_hand:
        card_data = {
            'image':
            db.session.query(Card).filter(
                Card.id == card.card_identifier).one().image_name
        }

        table_data['player_cards'].append(card_data)

    print('Got player images')

    for card in cpu_hand:

        if card.status == Status.visible:
            image_name = db.session.query(Card).filter(
                Card.id == card.card_identifier).one().image_name
        else:
            image_name = 'red_back'

        card_data = {'image': image_name}
        table_data['cpu_cards'].append(card_data)

    print('Got cpu images')

    print(table_data)

    return table_data
Exemplo n.º 13
0
def finish_game(identifier):
    steamid = identifier_to_steamid(identifier)

    game_data = {'player_cards': [], 'cpu_cards': []}

    for card in db.session.query(Active_card).filter(
            Active_card.owner == steamid).all():
        card_data = {
            'image':
            db.session.query(Card).filter(
                Card.id == card.card_identifier).one().image_name
        }

        game_data['player_cards'].append(card_data)

    for card in db.session.query(Active_card).filter(
            Active_card.owner == db.session.query(Game).filter(
                Game.player_steamid ==
                steamid).one().cpu_hand_identifier).all():
        card_data = {
            'image':
            db.session.query(Card).filter(
                Card.id == card.card_identifier).one().image_name
        }

        game_data['cpu_cards'].append(card_data)

    game_state = get_game_state(steamid)

    if game_state == Game_state.player_busted:
        game_data['result'] = 'You busted'
    elif game_state == Game_state.cpu_busted:
        game_data['result'] = 'Cpu busted'
    elif game_state == Game_state.cpu_blackjack:
        game_data['result'] = 'Cpu got blackjack'
    elif game_state == Game_state.player_blackjack:
        game_data['result'] = 'You got blackjack'
    elif game_state == Game_state.cpu_lead:
        game_data['result'] = 'Cpu won by points'
    elif game_state == Game_state.player_lead:
        game_data['result'] = 'You won by points'
    elif game_state == Game_state.draw:
        game_data['result'] = 'Draw'

    remove_user_from_active_games(steamid)

    return game_data
Exemplo n.º 14
0
def init_game(identifier, bet):

    steamid = identifier_to_steamid(identifier)

    remove_user_from_active_games(steamid)

    cpu_hand_identifier = ''.join(
        random.choice(string.ascii_uppercase + string.digits)
        for _ in range(45))

    remove_balance(identifier, bet)

    print('Removed bet amount from user')

    db.session.add(Game(steamid, bet, cpu_hand_identifier))
    db.session.commit()
    print('Init game + commited to database')

    return db.session.query(Game).filter(
        Game.player_steamid == steamid).one().deck_identifier
Exemplo n.º 15
0
def validate_bet(identifier, amount):
    steamid = identifier_to_steamid(identifier)

    if get_turn(
            db.session.query(Active_player).filter(
                Active_player.steamid == steamid).one().table_id) == None:
        if balance_handler.sufficent_funds(identifier, amount):
            if db.session.query(Active_player).filter(
                    Active_player.steamid == steamid).one().bet == None:
                balance_handler.remove_balance(identifier, amount)

                player = db.session.query(Active_player).filter(
                    Active_player.steamid == steamid).one()
                player.bet = amount
                player.status_string = 'Betted ' + str(amount) + '$'
                player.has_played = True
                player.status = Player_status.active

                db.session.commit()

                return 'Bet placed'
            return 'You have already placed bet'
        return 'Insufficent funds'
    return 'Bets not allowed atm'
Exemplo n.º 16
0
def client_stand(data):
    simulate_cpu(identifier_to_steamid(data['identifier']), request.sid)
    payout_bet(identifier_to_steamid(data['identifier']))
    
    socketio.emit('game_finished', json.dumps(finish_game(data['identifier'])), room=request.sid)
Exemplo n.º 17
0
def get_cpu_identifier(identifier):
    return db.session.query(Game).filter(
        Game.player_steamid == identifier_to_steamid(
            identifier)).one().cpu_hand_identifier