Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -37,8 +37,10 @@ def join_game_session():
|
|
37 |
global waiting_session
|
38 |
if waiting_session and waiting_session in sessions:
|
39 |
session_id = waiting_session
|
|
|
40 |
else:
|
41 |
session_id = create_game_session()
|
|
|
42 |
|
43 |
player_id = generate_player_id()
|
44 |
sessions[session_id]['players'].append(player_id)
|
@@ -47,35 +49,7 @@ def join_game_session():
|
|
47 |
if len(sessions[session_id]['players']) == 2:
|
48 |
waiting_session = None
|
49 |
|
50 |
-
return session_id, player_id
|
51 |
-
|
52 |
-
def update_game_state(session_id, guess):
|
53 |
-
session = sessions[session_id]
|
54 |
-
current_player = session['current_player']
|
55 |
-
opponent = [p for p in session['players'] if p != current_player][0]
|
56 |
-
|
57 |
-
guess = guess.lower()
|
58 |
-
session['guesses'].add(guess)
|
59 |
-
|
60 |
-
if guess not in session['words'][opponent]:
|
61 |
-
session['incorrect_guesses'] += 1
|
62 |
-
|
63 |
-
if session['incorrect_guesses'] >= 6:
|
64 |
-
return 'game_over'
|
65 |
-
|
66 |
-
if all(letter in session['guesses'] for letter in session['words'][opponent]):
|
67 |
-
return 'winner'
|
68 |
-
|
69 |
-
session['current_player'] = opponent
|
70 |
-
session['last_activity'] = time.time()
|
71 |
-
return 'continue'
|
72 |
-
|
73 |
-
def check_win_condition(session_id):
|
74 |
-
session = sessions[session_id]
|
75 |
-
for player in session['players']:
|
76 |
-
if all(letter in session['guesses'] for letter in session['words'][player]):
|
77 |
-
return player
|
78 |
-
return None
|
79 |
|
80 |
@app.route('/')
|
81 |
def index():
|
@@ -83,11 +57,12 @@ def index():
|
|
83 |
|
84 |
@app.route('/play', methods=['POST'])
|
85 |
def play():
|
86 |
-
session_id, player_id = join_game_session()
|
|
|
87 |
return jsonify({
|
88 |
'session_id': session_id,
|
89 |
'player_id': player_id,
|
90 |
-
'status':
|
91 |
})
|
92 |
|
93 |
@app.route('/check_status/<session_id>', methods=['GET'])
|
@@ -115,50 +90,7 @@ def submit_word():
|
|
115 |
return jsonify({'status': 'game_started'})
|
116 |
return jsonify({'status': 'waiting_for_opponent'})
|
117 |
|
118 |
-
|
119 |
-
def guess():
|
120 |
-
data = request.json
|
121 |
-
session_id = data['session_id']
|
122 |
-
player_id = data['player_id']
|
123 |
-
guess = data['guess'].lower()
|
124 |
-
|
125 |
-
if player_id != sessions[session_id]['current_player']:
|
126 |
-
return jsonify({'error': 'Not your turn'}), 400
|
127 |
-
|
128 |
-
result = update_game_state(session_id, guess)
|
129 |
-
|
130 |
-
if result == 'game_over':
|
131 |
-
winner = check_win_condition(session_id)
|
132 |
-
return jsonify({'status': 'game_over', 'winner': winner})
|
133 |
-
elif result == 'winner':
|
134 |
-
return jsonify({'status': 'game_over', 'winner': player_id})
|
135 |
-
|
136 |
-
return jsonify({'status': 'continue'})
|
137 |
-
|
138 |
-
@app.route('/game_state/<session_id>')
|
139 |
-
def game_state(session_id):
|
140 |
-
if session_id not in sessions:
|
141 |
-
return jsonify({'error': 'Session not found'}), 404
|
142 |
-
|
143 |
-
session = sessions[session_id]
|
144 |
-
return jsonify({
|
145 |
-
'players': session['players'],
|
146 |
-
'current_player': session['current_player'],
|
147 |
-
'guesses': list(session['guesses']),
|
148 |
-
'incorrect_guesses': session['incorrect_guesses'],
|
149 |
-
'words': {player: ''.join(['_' if letter not in session['guesses'] else letter for letter in word])
|
150 |
-
for player, word in session['words'].items()}
|
151 |
-
})
|
152 |
-
|
153 |
-
def cleanup_inactive_sessions():
|
154 |
-
global waiting_session
|
155 |
-
current_time = time.time()
|
156 |
-
for session_id in list(sessions.keys()):
|
157 |
-
if current_time - sessions[session_id]['last_activity'] > 60:
|
158 |
-
if session_id == waiting_session:
|
159 |
-
waiting_session = None
|
160 |
-
del sessions[session_id]
|
161 |
-
Timer(60, cleanup_inactive_sessions).start()
|
162 |
|
163 |
if __name__ == '__main__':
|
164 |
cleanup_inactive_sessions()
|
|
|
37 |
global waiting_session
|
38 |
if waiting_session and waiting_session in sessions:
|
39 |
session_id = waiting_session
|
40 |
+
is_new_session = False
|
41 |
else:
|
42 |
session_id = create_game_session()
|
43 |
+
is_new_session = True
|
44 |
|
45 |
player_id = generate_player_id()
|
46 |
sessions[session_id]['players'].append(player_id)
|
|
|
49 |
if len(sessions[session_id]['players']) == 2:
|
50 |
waiting_session = None
|
51 |
|
52 |
+
return session_id, player_id, is_new_session
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
|
54 |
@app.route('/')
|
55 |
def index():
|
|
|
57 |
|
58 |
@app.route('/play', methods=['POST'])
|
59 |
def play():
|
60 |
+
session_id, player_id, is_new_session = join_game_session()
|
61 |
+
status = 'waiting' if is_new_session else 'ready'
|
62 |
return jsonify({
|
63 |
'session_id': session_id,
|
64 |
'player_id': player_id,
|
65 |
+
'status': status
|
66 |
})
|
67 |
|
68 |
@app.route('/check_status/<session_id>', methods=['GET'])
|
|
|
90 |
return jsonify({'status': 'game_started'})
|
91 |
return jsonify({'status': 'waiting_for_opponent'})
|
92 |
|
93 |
+
# ... (rest of the code remains the same)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
|
95 |
if __name__ == '__main__':
|
96 |
cleanup_inactive_sessions()
|