Python
97
Вклад в тег
Могло быть и хуже, но опять же, могло быть и лучше - Гэндальф Серый
from flask import Flask, redirect, url_for, request
import random
import string
app = Flask(__name__)
rooms = {} # здесь будем хранить комнаты и игроков, которые к ним подключились
def generate_room_code(): # функция генерация id комнаты
return ''.join(random.choices(string.ascii_uppercase, k=4))
@app.route('/')
def index(): # тут делаем стартовую страницу. Сейчас это зашито прямо в скрипт, но можно возвращать файл
return '''
<!doctype html>
<html>
<head>
<title>Новая игра</title>
</head>
<body>
<h1>Добро пожаловать!</h1>
<a href="/start">Начать новую игру</a>
</body>
</html>
'''
@app.route('/start')
def start(): # это будет выполняться после нажатия на ссылку "Начать игру"
room_code = generate_room_code()
rooms[room_code] = [] # тут добавляем id комнаты. Список пустой, т. к. игроков ещё нет
return redirect(url_for('waiting_room', room_code=room_code)) # перенаправляем пользователя в комнату
@app.route('/waiting/<room_code>')
def waiting_room(room_code): # тут делаем комнату.
if room_code not in rooms:
return "Not found", 404 # если нет такой комнаты
return f'''
<!doctype html>
<html>
<head>
<title>Комната</title>
</head>
<body>
<h1>Комната {room_code}</h1>
<form action="/join" method="post">
<input type="hidden" name="room_code" value="{room_code}">
<input type="text" name="player_name" placeholder="Имя">
<button type="submit">Присоединиться</button>
</form>
<h2>Игроки:</h2>
<ul>
{''.join([f'<li>{player}</li>' for player in rooms[room_code]])}
</ul>
</body>
</html>
'''
@app.route('/join', methods=['POST'])
def join_room(): # обрабатываем запрос на присоединение
room_code = request.form['room_code']
player_name = request.form['player_name']
if room_code in rooms:
# добавляем игрока и перенаправляем его обратно
rooms[room_code].append(player_name)
return redirect(url_for('waiting_room', room_code=room_code))
return "Not found", 404
if __name__ == '__main__':
app.run(debug=True)