在 Django 网站上 store/model 游戏数据的最佳方式?
Best way to store/model game data on a Django website?
请允许我为我的问题设置环境:
- 在我的网站上,用户注册一个帐户,然后进入游戏页面
- 一旦 5 名玩家加载到游戏页面,新游戏就会开始。游戏的运作方式如下:
- 玩家猜测数字,直到找到“幻数”,这是一个从 1 到 100 的随机数
- 一旦 3 位玩家猜对了幻数,其他 2 位玩家将被宣布为输家并被踢出页面
我的问题如下:保存个人游戏信息的最佳方式是什么?为了让游戏正常运行,网站需要以某种方式保存游戏信息;具体来说,每当玩家正确猜出幻数时,计数器就会递增。
考虑点:
- 我想让它可以同时进行多个游戏(网站。com/game 可以同时进行多个游戏会话),因此解决方案不应抑制它。
- 我是 运行 我的 Django 网站,还有 HTML/CSS/JavaScript
- 这是(可能很明显)我正在在线实施的游戏的简化版本。实际上,该解决方案能够在游戏中保持多个动态 variables/information。
存储游戏信息可能是此任务中最简单的部分。考虑您将如何构建模型。我会有一个 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 Channels。 https://channels.readthedocs.io/en/stable/
正如克雷格所说,这是一个开放式问题,实时部分太长,无法在此处解释;但希望这些想法能帮助您入门!
请允许我为我的问题设置环境:
- 在我的网站上,用户注册一个帐户,然后进入游戏页面
- 一旦 5 名玩家加载到游戏页面,新游戏就会开始。游戏的运作方式如下:
- 玩家猜测数字,直到找到“幻数”,这是一个从 1 到 100 的随机数
- 一旦 3 位玩家猜对了幻数,其他 2 位玩家将被宣布为输家并被踢出页面
我的问题如下:保存个人游戏信息的最佳方式是什么?为了让游戏正常运行,网站需要以某种方式保存游戏信息;具体来说,每当玩家正确猜出幻数时,计数器就会递增。
考虑点:
- 我想让它可以同时进行多个游戏(网站。com/game 可以同时进行多个游戏会话),因此解决方案不应抑制它。
- 我是 运行 我的 Django 网站,还有 HTML/CSS/JavaScript
- 这是(可能很明显)我正在在线实施的游戏的简化版本。实际上,该解决方案能够在游戏中保持多个动态 variables/information。
存储游戏信息可能是此任务中最简单的部分。考虑您将如何构建模型。我会有一个 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 Channels。 https://channels.readthedocs.io/en/stable/
正如克雷格所说,这是一个开放式问题,实时部分太长,无法在此处解释;但希望这些想法能帮助您入门!