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])
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))
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)
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))
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))
def get_state(gid): redis_key = redis_game_key(gid, GAME) state = json.loads(rs.get(redis_key).decode()) return jsonify(state)