Spaces:
Paused
Paused
File size: 5,312 Bytes
70a9ad8 7ef7190 ce1dd56 7ef7190 70a9ad8 7ef7190 ce1dd56 7ef7190 ce1dd56 7ef7190 70a9ad8 7ef7190 ce1dd56 70a9ad8 7ef7190 ce1dd56 7ef7190 ce1dd56 70a9ad8 ce1dd56 70a9ad8 ce1dd56 70a9ad8 7ef7190 70a9ad8 ce1dd56 70a9ad8 ce1dd56 70a9ad8 ce1dd56 7ef7190 70a9ad8 7ef7190 ce1dd56 7ef7190 ce1dd56 70a9ad8 ce1dd56 7ef7190 70a9ad8 7ef7190 70a9ad8 7ef7190 ce1dd56 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
from flask import Flask, request, jsonify, render_template
import random
import string
import time
from threading import Timer
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key' # Replace with a real secret key
# In-memory storage for game sessions
sessions = {}
waiting_session = None
def generate_session_id():
return ''.join(random.choices(string.digits, k=4))
def create_game_session():
global waiting_session
session_id = generate_session_id()
while session_id in sessions:
session_id = generate_session_id()
sessions[session_id] = {
'players': [],
'words': {},
'current_player_index': 0,
'guesses': set(),
'incorrect_guesses': 0,
'last_activity': time.time(),
'game_started': False
}
waiting_session = session_id
return session_id
def join_game_session():
global waiting_session
if waiting_session and waiting_session in sessions:
session_id = waiting_session
else:
session_id = create_game_session()
player_index = len(sessions[session_id]['players'])
sessions[session_id]['players'].append(player_index)
sessions[session_id]['last_activity'] = time.time()
if len(sessions[session_id]['players']) == 2:
waiting_session = None
sessions[session_id]['game_started'] = True
return session_id, player_index
def update_game_state(session_id, guess):
session = sessions[session_id]
current_player_index = session['current_player_index']
opponent_index = 1 - current_player_index
guess = guess.lower()
session['guesses'].add(guess)
if guess not in session['words'][opponent_index]:
session['incorrect_guesses'] += 1
if session['incorrect_guesses'] >= 6:
return 'game_over'
if all(letter in session['guesses'] for letter in session['words'][opponent_index]):
return 'winner'
session['current_player_index'] = opponent_index
session['last_activity'] = time.time()
return 'continue'
@app.route('/')
def index():
return render_template('index.html')
@app.route('/play', methods=['POST'])
def play():
session_id, player_index = join_game_session()
return jsonify({
'session_id': session_id,
'player_index': player_index,
'status': 'waiting' if len(sessions[session_id]['players']) == 1 else 'ready'
})
@app.route('/check_status/<session_id>', methods=['GET'])
def check_status(session_id):
if session_id in sessions:
status = 'ready' if sessions[session_id]['game_started'] else 'waiting'
return jsonify({'status': status})
return jsonify({'error': 'Session not found'}), 404
@app.route('/submit_word', methods=['POST'])
def submit_word():
data = request.json
session_id = data['session_id']
player_index = data['player_index']
word = data['word'].lower()
if len(word) != 7:
return jsonify({'error': 'Word must be 7 letters long'}), 400
sessions[session_id]['words'][player_index] = word
sessions[session_id]['last_activity'] = time.time()
if len(sessions[session_id]['words']) == 2:
sessions[session_id]['game_started'] = True
return jsonify({'status': 'game_started'})
return jsonify({'status': 'waiting_for_opponent'})
@app.route('/guess', methods=['POST'])
def guess():
data = request.json
session_id = data['session_id']
player_index = int(data['player_index'])
guess = data['guess'].lower()
if player_index != sessions[session_id]['current_player_index']:
return jsonify({'error': 'Not your turn'}), 400
result = update_game_state(session_id, guess)
if result == 'game_over':
winner = 1 - sessions[session_id]['current_player_index']
return jsonify({'status': 'game_over', 'winner': winner})
elif result == 'winner':
return jsonify({'status': 'game_over', 'winner': player_index})
return jsonify({'status': 'continue'})
@app.route('/game_state/<session_id>/<player_index>')
def game_state(session_id, player_index):
if session_id not in sessions:
return jsonify({'error': 'Session not found'}), 404
session = sessions[session_id]
player_index = int(player_index)
opponent_index = 1 - player_index
return jsonify({
'current_player_index': session['current_player_index'],
'guesses': list(session['guesses']),
'incorrect_guesses': session['incorrect_guesses'],
'player_word': ''.join(['_' if letter not in session['guesses'] else letter for letter in session['words'].get(player_index, '')]),
'opponent_word': ''.join(['_' if letter not in session['guesses'] else letter for letter in session['words'].get(opponent_index, '')])
})
def cleanup_inactive_sessions():
global waiting_session
current_time = time.time()
for session_id in list(sessions.keys()):
if current_time - sessions[session_id]['last_activity'] > 60:
if session_id == waiting_session:
waiting_session = None
del sessions[session_id]
Timer(60, cleanup_inactive_sessions).start()
if __name__ == '__main__':
cleanup_inactive_sessions()
app.run(host='0.0.0.0', port=7860) |