from flask import Flask, request, jsonify, render_template import random import string import time app = Flask(__name__) # In-memory storage for game sessions sessions = {} def generate_session_id(): return ''.join(random.choices(string.digits, k=4)) @app.route('/') def index(): return render_template('index.html') @app.route('/play', methods=['POST']) def play(): session_id = generate_session_id() while session_id in sessions: session_id = generate_session_id() sessions[session_id] = { 'players': 1, 'words': {}, 'guesses': set(), 'incorrect_guesses': 0, 'current_player': None, 'last_activity': time.time() } return jsonify({'session_id': session_id}) @app.route('/join/', methods=['POST']) def join(session_id): if session_id not in sessions: return jsonify({'error': 'Session not found'}), 404 if sessions[session_id]['players'] == 2: return jsonify({'error': 'Session is full'}), 400 sessions[session_id]['players'] += 1 sessions[session_id]['last_activity'] = time.time() return jsonify({'status': 'joined', 'players': sessions[session_id]['players']}) @app.route('/status/', methods=['GET']) def status(session_id): if session_id not in sessions: return jsonify({'error': 'Session not found'}), 404 return jsonify({ 'players': sessions[session_id]['players'], 'status': 'ready' if sessions[session_id]['players'] == 2 else 'waiting' }) @app.route('/submit_word', methods=['POST']) def submit_word(): data = request.json session_id = data['session_id'] player = data['player'] word = data['word'].lower() if session_id not in sessions: return jsonify({'error': 'Session not found'}), 404 if len(word) != 7: return jsonify({'error': 'Word must be 7 letters long'}), 400 sessions[session_id]['words'][player] = word sessions[session_id]['last_activity'] = time.time() if len(sessions[session_id]['words']) == 2: sessions[session_id]['current_player'] = 'player1' 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 = data['player'] guess = data['guess'].lower() if session_id not in sessions: return jsonify({'error': 'Session not found'}), 404 if player != sessions[session_id]['current_player']: return jsonify({'error': 'Not your turn'}), 400 session = sessions[session_id] opponent = 'player2' if player == 'player1' else 'player1' session['guesses'].add(guess) if guess not in session['words'][opponent]: session['incorrect_guesses'] += 1 if session['incorrect_guesses'] >= 6: return jsonify({'status': 'game_over', 'winner': opponent}) if all(letter in session['guesses'] for letter in session['words'][opponent]): return jsonify({'status': 'game_over', 'winner': player}) session['current_player'] = opponent session['last_activity'] = time.time() return jsonify({'status': 'continue'}) @app.route('/game_state/') def game_state(session_id): if session_id not in sessions: return jsonify({'error': 'Session not found'}), 404 session = sessions[session_id] return jsonify({ 'current_player': session['current_player'], 'guesses': list(session['guesses']), 'incorrect_guesses': session['incorrect_guesses'], 'words': {player: ''.join(['_' if letter not in session['guesses'] else letter for letter in word]) for player, word in session['words'].items()} }) if __name__ == '__main__': app.run(host='0.0.0.0', port=7860)