示例#1
0
def show_game(gid):
    state_only = request.args.get("state")
    if state_only:
        # get game state
        redis_key = redis_game_key(gid, GAME)
        state = json.loads(rs.get(redis_key).decode())
        return jsonify(state)
    else:
        # get game state
        redis_key = redis_game_key(gid, GAME)
        state = json.loads(rs.get(redis_key).decode())
        return render_template('watchgame.html', gid=gid, player1=state['players'][0], player2=state['players'][1])
示例#2
0
def join_game(gid):
    """
    GET:
        ret: join game page.
    
    POST:
        form:
            
    """
    
    if request.method == 'GET':
        uid = request.cookies.get('uid')

        # get game state
        redis_key = redis_game_key(gid, GAME)
        state = json.loads(rs.get(redis_key).decode())

        if len(state['players']) > 1:
            return redirect("/game/play/{}".format(gid))
        # if len(state['players']) >= state['MAX_PLAYERS'] and uid not in state['players']:
        #     flash("Cannot join game, already full.")
        #     return redirect('/game')

        # if uid in state['players']:
        #     return redirect('/game/lobby/{}'.format(gid))
        # else:
        return render_template('join.html', gid=gid)
    elif request.method == 'POST':
        # parse form
        bot_url = request.form['bot_url']
        bot_role = request.form['bot_role'] # role in game (eg. which pong paddle)

        # get user id
        uid = request.cookies.get('uid')

        # get game state
        redis_key = redis_game_key(gid, GAME)
        state = json.loads(rs.get(redis_key).decode())
        if len(state['players']) >= state['MAX_PLAYERS'] and uid not in state['players']:
            flash("Cannot join game, already full.")
            return redirect('/game/join/{}'.format(gid))

        state['players'].append(uid)

        # add joined player to state
        state['bots'][bot_role] = {"username": uid, "url": bot_url}
        if len(state['players']) > 1:
            state['ready'] = True
        rs.set(redis_key, json.dumps(state))

        return redirect('/game/start/{}'.format(gid))
示例#3
0
def lobby_game(gid):
    # get game state
    redis_key = redis_game_key(gid, GAME)
    state = json.loads(rs.get(redis_key).decode())    

    uid = request.cookies.get('uid')
    players = state['players']
    ready = state['ready']

    return render_template('lobby.html', players=players, player_count=len(players), gid=gid, ready=ready)
示例#4
0
def start_game(gid):
    # get game state
    redis_key = redis_game_key(gid, GAME)
    state = json.loads(rs.get(redis_key).decode())

    state['start'] = True
    rs.set(redis_key, json.dumps(state))
    
    if request.args.get('json'):
        return jsonify({"gid": gid, "state": state})
    return redirect('/game/play/{}'.format(gid))
示例#5
0
def create_game():
    """
    ARGS:
        computer (boolean): should we provide a computer.
    
    GET:
        ret: create game page.
    
    POST:
        body:
            bot_url
            bot_role
    """

    if request.method == 'GET':
        return render_template('creategame.html')
    elif request.method == 'POST':
        # parse args
        with_computer = request.args.get('computer')

        # parse form
        bot_url = request.form['bot_url']
        bot_role = request.form['bot_role'] # role in game (eg. which pong paddle)

        # generate new game id
        gid = base64.b64encode(os.urandom(32))[:8].decode()
        while not safe_check(gid):
            gid = base64.b64encode(os.urandom(32))[:8].decode()
        redis_key = redis_game_key(gid, GAME)
        
        # set initial game state
        state = pong.INITIAL_STATE

        # add players
        uid = request.cookies.get('uid') 
        state['owner'] = uid

        # add bot to game state
        state['bots'] = {}
        if with_computer:
            state['players'] = [
                'computer',
                uid
            ]
            state['bots'] = {
                'lpaddle': {
                    "username": '******',
                    "url": 'https://json.lib.id/zhuda-bot-builder@dev/',
                },
                'rpaddle': {
                    "username": uid,
                    "url": bot_url,
                }
            }
            state['start'] = True
            rs.set(redis_key, json.dumps(state))
            return redirect('/game/play/{}'.format(gid))

        state['players'] = [
            uid
        ]
        state['bots'] = {
            bot_role: {
                "username": uid,
                "url": bot_url,
            }
        }

        rs.set(redis_key, json.dumps(state))
        return redirect('/game/lobby/{}'.format(gid))
示例#6
0
def get_state(gid):
    redis_key = redis_game_key(gid, GAME)
    state = json.loads(rs.get(redis_key).decode())
    return jsonify(state)