def start_game(): join_code = session["join_code"] db = get_db() # Creates a row in player table db.execute('INSERT INTO game (join_code) VALUES (%s)', (join_code, )) # Gets players from the lobby database players = get_list(join_code) # Creates board in the player database create_board(join_code) for i in range(len(players)): add_player(join_code, players[i]) # Switches players list to full player objects players = get_players(join_code) # Inserts starting position if (players["player1"] != None): set_square(join_code, 1, 1, players["player1"]) if (players["player2"] != None): set_square(join_code, 4, 4, players["player2"]) if (players["player3"] != None): set_square(join_code, 1, 4, players["player3"]) if (players["player4"] != None): set_square(join_code, 4, 1, players["player4"]) # Removes row from lobby database remove_list(join_code) # set's turn to first player set_turn(join_code, 1) # Forces all connected sockets to call intermediate method, which # sets session variable and redirects them to game emit('redirect', {'url': url_for('lobby.intermediate')}, room=join_code, broadcast=True)
def check_empty(join_code): db = get_db() if connection_manager.numberOfPlayers(join_code) < 1: print("GAME EMPTY - DELETING: " + join_code) db.execute("DELETE FROM game WHERE join_code = (%s)", (join_code,)) return True return False
def add_player(join_code, nickname, money=300, team=None): """Adds a player to the game If games full, returns None, otherwise return player""" db = get_db() players = get_players(join_code) player_obj = {} player_obj["money"] = money player_obj["nickname"] = nickname # checks for dups for key, value in players.items(): if value != None and value["nickname"] == nickname: return None # Checks for column to add player count = 0 for key, value in players.items(): count+=1 if value == None: player_obj["team"] = "team" + str(count) db.execute( sql.SQL("UPDATE game SET {} = (%s) WHERE join_code = (%s)").format(sql.Identifier(key)), (json.dumps(player_obj), join_code) ) return count return None
def get_list(join_code): db = get_db() db.execute("SELECT players FROM lobby WHERE join_code = (%s)", (join_code, )) result = db.fetchone() if result == None: return None if (result["players"] == None): return [] return json.loads(result["players"])
def get_list(join_code): db = get_db() db.execute("SELECT connections FROM game WHERE join_code = (%s)", (join_code, )) result = db.fetchone() if result is None: return None if result["connections"] is None: return [] return json.loads(result["connections"])
def update_player_money(join_code,player_num,moneyChange): db = get_db() old_player = get_players(join_code)["player" + str(player_num)] if old_player == None: return None old_player["money"] += moneyChange update_player(join_code,player_num, old_player) emit_money(join_code,get_players(join_code))
def get_players(join_code): """returns a dictonary of all players in a game""" db = get_db() db.execute("SELECT player1, player2, player3, player4 FROM game WHERE join_code = (%s)", (join_code,)) player_jsons = dict(db.fetchone()) players = {} for key, value in player_jsons.items(): if value != None: players[key] = json.loads(value) else: players[key] = None return players
def update_player_team(join_code,player_num,team_name): db = get_db() player = get_players(join_code)["player" + str(player_num)] if player == None: return None board = get_board(join_code) player["team"] = team_name update_player(join_code,player_num, player) for i in range(len(board)): for j in range(len(board[i])): if(board[i][j]["name"] == player["nickname"]): board[i][j]["color"] = colors[player["team"]] print(board[i][j]) set_board(join_code, board)
def index(): if request.method == "POST": nickname = request.form['nickname'] join_code = request.form['join_code'] print("hello?") db = get_db() players = get_list(join_code) #TODO HERE: Check if game is not already started db.execute("SELECT * FROM game WHERE join_code = (%s)", (join_code,)) game = db.fetchone() if game != None: print("ERROR: Game has already started") return render_template("index.html") if players is None: #create new game db.execute( 'INSERT INTO lobby (join_code) VALUES (%s)', (join_code,) ) players = get_list(join_code) if len(players) >= 4: print("ERROR: Game " + join_code + " IS FULL") return render_template("index.html") if players.count(nickname) != 0: print("ERROR: Game " + join_code + " already has name "+nickname) return render_template("index.html") players.append(nickname) set_list(join_code, players) # Updates session variables session["join_code"] = join_code session["nickname"] = nickname return redirect(url_for('lobby.enter_lobby')) # Run if request is GET return render_template("index.html")
def get_json_board(join_code): db = get_db() db.execute("SELECT game_data FROM game WHERE join_code = (%s)", (join_code,)) json_board = (db.fetchone())["game_data"] return json_board
def set_board(join_code, board): """Given a board array, saves it to sql database""" json_board = json.dumps(board) db = get_db() db.execute('UPDATE game SET game_data = (%s) WHERE join_code = (%s)', (json_board, join_code)) return json_board
def remove_list(join_code): db = get_db() db.execute("DELETE FROM lobby WHERE join_code = (%s)", (join_code, ))
def set_list(join_code, newlist): db = get_db() jsonres = json.dumps(newlist) db.execute("UPDATE game SET connections = (%s) WHERE join_code = (%s)", (jsonres, join_code))
def set_turn(join_code, player_num): db = get_db() db.execute("UPDATE game SET turn = (%s) WHERE join_code = (%s)", (player_num, join_code))
def set_list(join_code, newlist): db = get_db() jsonres = json.dumps(newlist) db.execute("UPDATE lobby SET players = (%s) WHERE join_code = (%s)", (jsonres, join_code))
def get_turn(join_code): db = get_db() db.execute("SELECT turn FROM game WHERE join_code = (%s)", (join_code,)) turn = db.fetchone()["turn"] return turn
def update_player(join_code, player_num, player_obj): db = get_db() db.execute( sql.SQL("UPDATE game SET {} = (%s) WHERE join_code = (%s)").format(sql.Identifier("player" + str(player_num))), (json.dumps(player_obj), join_code) )