问题描述
请允许我为我的问题设置环境:
我的问题如下:存储单个游戏信息的最佳方式是什么?为了让游戏正常运行,网站需要以某种方式保存信息在比赛中;具体来说,一个计数器会在玩家每次正确猜出幻数时递增。
考虑点:
- 我想让它可以同时进行多个游戏(website.com/game 可以同时进行多个游戏会话),因此解决方案不应该阻止这一点。
- 我正在使用 Django 以及 HTML/CSS/JavaScript 运行我的网站
- 这是(可能很明显)我在线实现的游戏的简化版本。实际上,该解决方案将能够保存游戏中的多个动态变量/信息。
解决方法
存储游戏信息可能是这项任务的直接部分。考虑如何构建模型。我会有一个 Game
、PlayerInGame
和 User
模型(我假设你已经有了)。
这看起来像是使用直通模型 (PlayerInGame
) 的机会,因为您需要有某种方式将游戏中的玩家表示为赢家与输家。
class Game(models.Model):
winning_magic_number = models.IntegerField()
players = models.ManyToManyField(
User,through='PlayerInGame',through_fields=('game','user'),)
class PlayerInGame(models.Model):
WINNER = 'Winner'
LOSER = 'Loser'
UKNOWN = 'Unknown'
PLAYER_TYPE_CHOICES = [
(WINNER,'Winner'),(LOSER,'Loser'),(UKNOWN,'Unknown')
]
user = models.ForeignKey(User,on_delete=models.CASCADE)
game = models.ForeignKey(User,on_delete=models.CASCADE)
type = models.CharField(choices=PLAYER_TYPE_CHOICES)
每次用户加入游戏时,您都应该使用加入的用户和他们加入的游戏创建一个 PlayerInGame
模型实例。他们可以从 Unknown
开始,随着游戏的进行而改变他们的状态。
此应用程序的实时方面 - 需要让玩家猜测数字并让模型做出相应的响应 - 可能是更具挑战性的部分。您将需要一个 Websocket。有关如何使用 Django + websockets 创建实时功能的信息,请参阅 Django 频道。 https://channels.readthedocs.io/en/stable/
正如 Craig 所指出的,这是一个开放式问题,其中的实时部分太长,无法在此解释;但希望这些想法已经让你开始了!