如何使用django频道创建游戏大厅和配对

问题描述 投票:0回答:1

我正在使用 django 频道创建一个 2 人游戏,如井字游戏或西洋跳棋。

我的主要问题是如何保存加入大厅等待配对的玩家的状态。这是我需要在通道消费者的连接方法中做的事情吗?如果不是这里的方法怎么办?

python django game-development django-channels matchmaking
1个回答
1
投票

websocket 应该对客户端发送的信息做出反应,而不是运行不断检查用户或数据库条目的循环。我们当然需要在 consumers.py 中实现 WebsocketConsumer 类的新类,但这是一个“QueueManager”websocket,用于管理我们的队列并为我们的“GameManager”websocket 调度初始加入命令。

我们的播放器需要首先向“QueueManager”websocket 发送消息。如果玩家已登录,它会发送带有其 ID 的“新加入”命令。如果游戏允许访客,我们会在连接时生成新 ID。如果游戏房间是开放的或者玩家正在房间里等待,“QueueManager”websocket 会发送一个命令来“加入房间整数”。当玩家的代码看到它时,它会向“GameManager”websocket 发送一个命令,告诉它它将要加入哪个房间。

如果没有房间可用,告诉用户“没有房间”,然后使用数据库模型打开一个队列,其中每个主键都是常量,字段告诉我们队列中有多少用户。每次添加到该队列时,都会创建一个不同的数据库模型,该模型具有唯一的数据库主键,其值等于它们在队列中的位置。当玩家收到“没有房间”时,例如每 10 秒向“QueueManager”websocket“checking room”发送命令。当有新房间打开时,“QueueManager”websocket 发送“join room integer”命令信号,并通过使用常量主键递减数据库模型中的用户总数来将所有用户在队列中向前移动一个位置,然后继续通过具有唯一主键的所有用户数据库模型并更新其用户 ID 字段以包含列表中的下一个用户 ID。请记住,这些数据库模型的唯一主键与保存在数据库模型中的以 0 或 1 开头的用户总数相关联,该数据库模型具有您始终可以访问的常量主键。

© www.soinside.com 2019 - 2024. All rights reserved.