Задать вопрос
@Lida132

Как создать комнату в браузерной игре?

Я пытаюсь создать свою первую браузерную игру. Вот что я пытаюсь сделать:

Один из игроков нажимает на "start new game" и создается новая "комната" . В URL добавляется четыре случайные буквы. Человек вводит свое имя, попадает в зону ожидания. Отправляет ссылку своим друзьям. Они переходят по ссылке и попадают именно в эту комнату, вводят свое имя. Попадают в зону ожидания. В зоне ожидания будет видно, кто из игроков подключился. Когда все игроки собрались, нажимаем "начать" и игра запускается.

Вопрос: как сделать, чтобы при нажатии на ссылку "start new game" создавалась новая комната со случайными 4 буквами в URL?

Пока что у меня только документы html и style.css. Backend планировала писать на питоне.
  • Вопрос задан
  • 154 просмотра
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 3
Lord_of_Rings
@Lord_of_Rings
Дунадан - северный странник. Злой, но очень добрый
Без бэкенда тут не обойтись. Знаете python? Если нет, стоит подучить. Если да, то знаете ли какой-нибудь фреймворк, типа Flask/Django? Если не знаете, то опять же стоит освоить. Без этого по-нормальному вы ничего не напишите.
На flask простейший пример будет выглядеть примерно так

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)
Это, конечно, просто пример, для того, чтобы вы понимали, как это выглядит

ИМХО Flask или Bottle (вообще изи) для вас самое лучшее, если вы пока не в теме. Django для новичков не подходит. Ну и конечно, думайте, точно ли вам нужен python
Ответ написан
AlexNest
@AlexNest
Работаю с Python/Django
  1. При создании комнаты - сохранять код в базе данных;
  2. При обращении по url получать данные о комнате фильтруя по коду из url;
Ответ написан
@rPman
Начни с простого чата, есть готовые примеры на основе websocket (на javascript там очень просто), идеологически это именно то что тебе нужно, потому что мультиплеерная игра это буквально чат между фронтэндами и бакэндом в обе стороны.

Не смотри на фреймворки, ПОКА они тебе только помешают, тебе нужно понять принцип.

Вопрос слишком всеобъемлющий, разбей задачу на подзадачи и спрашивай то что не понимаешь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы