コード例 #1
0
def _start(code):
    if not verifiers.verify_session_logged_in():
        session['error'] = "You cant access _start page before logging in!"
        return redirect(url_for('index'))

    if not verifiers.verify_host(code):
        return redirect(url_for('home'))

    error = checks.check_for_start_error(code)
    if error:
        session['error'] = error
        return redirect(url_for('game', code=code))
    foundGame = Game.query.filter_by(code=code).first()
    foundGame.started = 1
    foundGame.alive = foundGame.players
    players = json.loads(foundGame.players)
    settings = json.loads(foundGame.settings)
    targets = {}
    n = len(players)
    permutation = maff.random_permutation(n)
    for i in range(n):
        targets[players[permutation[i]]] = {
            "word": maff.get_word(settings),
            "target": players[permutation[(i + 1) % n]],
            "assassin": players[permutation[i - 1]]
        }
    targets = json.dumps(targets)
    killCount = {}
    for player in players:
        killCount[player] = 0
    killCount = json.dumps(killCount)
    foundGame.targets = targets
    foundGame.killCount = killCount
    db.session.commit()
    return redirect(url_for('game', code=code))
コード例 #2
0
def _kick(code, user):

    if not verifiers.verify_session_logged_in():
        session['error'] = "You cant access _kick page before logging in!"
        return redirect(url_for('index'))

    if not verifiers.verify_host(code) or user == session['user']:
        session['error'] = "Something is not right! (_kick page)"
        return redirect(url_for('game', code=code))

    error = checks.check_for_kick_error(code, user)
    if error:
        session['error'] = error
        return redirect(url_for('game', code=code))

    foundGame = Game.query.filter_by(code=code).first()
    foundPlayer = Player.query.filter_by(user=user).first()
    games = json.loads(foundPlayer.games)
    games.remove(code)  #removes game from the games list of the user
    foundPlayer.games = json.dumps(games)
    players = json.loads(foundGame.players)
    players.remove(user)  #removes user from the player list of the game
    foundGame.players = json.dumps(players)
    db.session.commit()
    return redirect(url_for('game', code=code))
コード例 #3
0
def _change_settings(code):
    if not verifiers.verify_session_logged_in():
        session[
            'error'] = "You cant access _change_settings page before logging in!"
        return redirect(url_for('index'))

    if not verifiers.verify_host(code):
        return redirect(url_for('home'))

    settings = {}
    try:  #tries to get info
        settings['difficulty'] = request.form['difficulty']
        settings['passon'] = request.form['passon']
    except KeyError:  #this only runs is someone messes with the html
        settings['difficulty'], settings['passon'], = "", ""

    error = checks.check_for_settings_error(settings)
    if error:
        session['error'] = error
        return redirect(url_for('game', code=code))

    foundGame = Game.query.filter_by(code=code).first()
    foundGame.settings = json.dumps(settings)
    db.session.commit()
    return redirect(url_for('game', code=code))
コード例 #4
0
def _join():
    if not verifiers.verify_session_logged_in():
        session['error'] = "You cant access _join page before logging in!"
        return redirect(url_for('index'))

    try:  #tries to get code
        code = request.form['code'].lower()
    except KeyError:  #only runs if someone messes with html
        code = ""

    error = checks.check_for_join_error(code)
    if error:
        session['error'] = error
        return redirect(url_for('join'))
    else:
        foundPlayer = Player.query.filter_by(user=session['user']).first()
        foundGame = Game.query.filter_by(code=code).first()
        foundGame.players = json.dumps(
            json.loads(foundGame.players) +
            [session['user']])  #adds user to the player list of the game
        foundPlayer.games = json.dumps(
            json.loads(foundPlayer.games) +
            [code])  #adds game to the games list of the user
        db.session.commit()
        return redirect(url_for('game', code=code))
コード例 #5
0
def home():
    if not verifiers.verify_session_logged_in(
    ):  #verifies that user is logged in
        session['error'] = "You cant access home page before logging in!"
        return redirect(url_for('index'))

    try:
        error = session.pop('error')
    except KeyError:
        error = ""

    data = {}  #data that will be put into html template
    data['user'] = session['user']
    try:
        foundPlayer = Player.query.filter_by(user=session['user']).first()
        data['name'] = foundPlayer.name
        data['status'] = foundPlayer.status
        data['theme'] = str(foundPlayer.theme)
        data['activeGames'], data['pastGames'] = [], []
        games = json.loads(foundPlayer.games)
        for game in games:  #sorts games into active and past ones
            if checks.check_if_game_complete(game) == 'active':
                data['activeGames'].append(
                    fetchers.get_active_button_info(game))
            else:
                data['pastGames'].append(fetchers.get_past_button_info(game))
        data['stats'] = json.loads(foundPlayer.stats)
    except Exception as e:
        return (str(e))
    return render_template('home.html', data=data, error=error)
コード例 #6
0
def join():
    if not verifiers.verify_session_logged_in():
        session['error'] = "You cant access join page before logging in!"
        return redirect(url_for('index'))

    try:
        error = session.pop('error')
    except KeyError:
        error = ""
    theme = session['theme']
    return render_template('join.html', error=error, theme=theme)
コード例 #7
0
def debug():
    if not verifiers.verify_session_logged_in(
    ) or not session['user'] == 'admin':
        session['error'] = "You cant access debug page"
        return redirect(url_for('index'))
    playerRows = Player.query.all()  #rows of the Players table
    gameRows = Game.query.all()  #rows of the Games table
    pastRows = PastGame.query.all()  #rows of the pastGames table
    return render_template('debug.html',
                           playerRows=playerRows,
                           gameRows=gameRows,
                           pastRows=pastRows)
コード例 #8
0
def game(code):
    if not verifiers.verify_session_logged_in():
        session['error'] = "You cant access game page before logging in!"
        return redirect(url_for('index'))

    completeness = checks.check_if_game_complete(code)
    if completeness == "active":
        return activeGame(code)
    elif completeness == "past":
        return pastGame(code)
    else:
        return redirect(url_for('home'))
コード例 #9
0
def _change_theme():
    if not verifiers.verify_session_logged_in():
        session[
            'error'] = "You cant access _change_theme page before logging in!"
        return redirect(url_for('index'))

    foundPlayer = Player.query.filter_by(user=session['user']).first()
    theme = foundPlayer.theme
    theme = (theme + 1) % 4
    session['theme'] = str(theme)
    foundPlayer.theme = theme
    db.session.commit()
    return redirect(url_for('home'))
コード例 #10
0
def _purge(code, user):
    if not verifiers.verify_session_logged_in():
        session['error'] = "You cant access _purge page before logging in!"
        return redirect(url_for('index'))
    #TODO: check if page is updated with database. Catches if host tries purging without refreshing page
    if not verifiers.verify_host(code):
        session['error'] = "something is not right! (_purge)"
        return redirect(url_for('game', code=code))

    error = checks.check_for_purge_error(code, user)
    if error:
        session['error'] = error
        return redirect(url_for('game', code=code))
    foundGame = Game.query.filter_by(code=code).first()
    alive = json.loads(foundGame.alive)
    alive.remove(user)  #removes user from the alive list of the game
    settings = json.loads(foundGame.settings)
    targets = maff.edit_targets_on_kill(user, json.loads(foundGame.targets),
                                        settings)
    killCount = json.loads(foundGame.killCount)
    killLog = json.loads(foundGame.killLog) + [
        (targets[user]['assassin'], "purged", user, targets[user]['word'])
    ]  #adds to kill log
    purged = json.loads(
        foundGame.purged) + [user]  #adds user to the purged list of the game
    if len(alive) > 1:
        foundGame.alive = json.dumps(alive)
        foundGame.targets = json.dumps(targets)
        foundGame.killLog = json.dumps(killLog)
        foundGame.purged = json.dumps(purged)
    else:
        players = json.loads(foundGame.players)
        survivalWinner = alive[0]
        killWinners = maff.create_killWinners(players, killCount)
        fetchers.distribute_kills_and_wins(players, killCount, survivalWinner,
                                           killWinners)
        pastgame = PastGame(code=code,
                            name=foundGame.name,
                            settings=foundGame.settings,
                            host=foundGame.host,
                            players=json.dumps(players),
                            survivalWinner=survivalWinner,
                            killWinners=json.dumps(killWinners),
                            killLog=json.dumps(killLog))
        db.session.add(pastgame)
        db.session.delete(foundGame)  #deletes from games
    db.session.commit()
    return redirect(url_for('game', code=code))
コード例 #11
0
def create():
    if not verifiers.verify_session_logged_in():
        session['error'] = "You cant access create page before logging in!"
        return redirect(url_for('index'))

    try:
        error, code, name = session.pop('error'), session.pop(
            'code'), session.pop('name')
    except KeyError:
        error, code, name = "", "", ""
    theme = session['theme']
    return render_template('create.html',
                           error=error,
                           code=code,
                           name=name,
                           theme=theme)
コード例 #12
0
def _killed(code):
    if not verifiers.verify_session_logged_in():
        session['error'] = "You cant access _killed page before logging in!"
        return redirect(url_for('index'))

    user = session['user']

    error = checks.check_for_killed_error(code, user)
    if error:
        session['error'] = error
        return redirect(url_for('game', code=code))

    foundGame = Game.query.filter_by(code=code).first()
    alive = json.loads(foundGame.alive)
    alive.remove(user)  #removes user from the alive list of the game
    settings = json.loads(foundGame.settings)
    targets = maff.edit_targets_on_kill(user, json.loads(foundGame.targets),
                                        settings)
    killCount = json.loads(foundGame.killCount)
    killCount[targets[user]['assassin']] += 1  #adds to assassin's kill count
    killLog = json.loads(foundGame.killLog) + [
        (targets[user]['assassin'], "killed", user, targets[user]['word'])
    ]  #adds to kill log
    if len(alive) > 1:  #if the game is not yet over
        foundGame.alive = json.dumps(alive)
        foundGame.targets = json.dumps(targets)
        foundGame.killCount = json.dumps(killCount)
        foundGame.killLog = json.dumps(killLog)
    else:  #the game has just finished
        players = json.loads(foundGame.players)
        survivalWinner = alive[0]
        killWinners = maff.create_killWinners(players, killCount)
        fetchers.distribute_kills_and_wins(players, killCount, survivalWinner,
                                           killWinners)
        pastgame = PastGame(code=code,
                            name=foundGame.name,
                            settings=foundGame.settings,
                            host=foundGame.host,
                            players=json.dumps(players),
                            survivalWinner=survivalWinner,
                            killWinners=json.dumps(killWinners),
                            killLog=json.dumps(killLog))
        db.session.add(pastgame)
        db.session.delete(foundGame)  #deletes from games
    db.session.commit()
    return redirect(url_for('game', code=code))
コード例 #13
0
def _create():
    if not verifiers.verify_session_logged_in():
        session['error'] = "You cant access _create page before logging in!"
        return redirect(url_for('index'))

    settings = {}
    try:  #tries to get info
        code = request.form['code'].lower().strip()
        name = request.form['name'].strip()
        settings['difficulty'] = request.form['difficulty']
        settings['passon'] = request.form['passon']
    except KeyError:  #this only runs is someone messes with the html
        code, name, settings['difficulty'], settings['passon'] = "", "", "", ""

    error = checks.check_for_create_error(code, name, settings)
    if error:
        session['error'] = error
        session['code'] = code
        session['name'] = name
        return redirect(url_for('create'))
    else:
        try:
            game = Game(code=code,
                        name=name,
                        settings=json.dumps(settings),
                        host=session['user'],
                        started=0,
                        players=json.dumps([session['user']]),
                        alive=json.dumps([]),
                        purged=json.dumps([]),
                        targets=json.dumps({}),
                        killCount=json.dumps({}),
                        killLog=json.dumps([]))
            db.session.add(game)  #adds game to game table
            foundPlayer = Player.query.filter_by(user=session['user']).first()
            foundPlayer.games = json.dumps(
                json.loads(foundPlayer.games) +
                [code])  #adds game to the games list of the user
            db.session.commit()
        except Exception as e:
            return (str(e))
        return redirect(url_for('game', code=code))
コード例 #14
0
def _cancel(code):
    if not verifiers.verify_session_logged_in():
        session['error'] = "You cant access _cancel page before logging in!"
        return redirect(url_for('index'))

    if not verifiers.verify_host(code):
        return redirect(url_for('home'))

    error = checks.check_for_cancel_error(code)
    if error:
        session['error'] = error
        return redirect(url_for('home'))

    foundGame = Game.query.filter_by(code=code).first()
    for player in json.loads(
            foundGame.players):  #delets the game from each players game list
        foundPlayer = Player.query.filter_by(user=player).first()
        games = json.loads(foundPlayer.games)
        games.remove(code)  #removes game to the games list of the user
        foundPlayer.games = json.dumps(games)
    db.session.delete(foundGame)
    db.session.commit()
    return redirect(url_for('home'))