【问题标题】:How to make rooms for game with Flask?如何使用 Flask 为游戏制作房间?
【发布时间】:2020-01-05 17:38:03
【问题描述】:

我在服务器上使用 Flask-SocketIO,在 PC 上使用 socketIO-client。 在PC上启动应用程序后,它会发送获取房间代码的请求:

socketIO = SocketIO('192.168.43.217', 8080)

def get_code(code):
    submit_code = code
    print('code =', code)


socketIO.emit('new_room')
socketIO.on('get_code', get_code)
socketIO.wait()

服务器发送代码:

@socketio.on('new_room')
def new_room():

    code = randint(1000, 9999)

    db.session.add(Rooms(code))
    db.session.commit()
    emit('get_code', code)

我在用户之后添加了socketio.emit('new_user', current_user.name),该代码将名称发送到 PC 客户端。

但是如果我创建两个或更多房间,我会看到,同一个用户登录了不同的房间。

我怎样才能制作像socketio.emit('new_user', current_user.name, namespace=f'/{room_code}') 这样的东西? 那只会发射到正确的房间。

或者这不是正确的方法? 之后游戏开始,PC端会显示答案,玩家会从PC上得到一些答案,然后像这样发回:

1)在服务器上生成代码并返回计算机

2) 来自另一台设备的人输入代码、他的昵称并连接

3) 他出现在房间里

4) 一条记录出现在它所连接的计算机上

5) 游戏开始,显示任务

6) 电话提供接听选项

7) 计算机显示谁回答,好吧,那么已经有纯粹的游戏逻辑了。积分等的计算

【问题讨论】:

  • 我还锁定了一种在多房间环境中在多个用户之间存储对象的方法。您是否还将游戏逻辑对象存储到该数据库中?

标签: python-3.x flask flask-socketio


【解决方案1】:

生成房间后,您应该通过调用将客户端添加到其中:

from flask_socketio import enter_room

@socketio.on('new_room')
def new_room():

    code = randint(1000, 9999)
    enter_room(str(code))

    db.session.add(Rooms(code))
    db.session.commit()
    emit('get_code', code)

然后你可以向这个房间里的用户发送一个事件:

socketio.emit('new_user', current_user.name, room=str(room_code))

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2023-03-29
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2015-12-18
    • 2017-02-25
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多