【问题标题】:Best way to store/model game data on a Django website?在 Django 网站上存储/建模游戏数据的最佳方式?
【发布时间】:2021-01-15 19:55:00
【问题描述】:

请允许我为我的问题设置环境:

  • 在我的网站上,用户注册一个账号,然后进入游戏页面
  • 一旦 5 名玩家加载到游戏页面,新游戏就会开始。游戏运作如下:
    • 玩家猜测数字,直到找到“幻数”,即 1-100 之间的随机数
    • 一旦有 3 名玩家猜对了幻数,其他 2 人将被宣布为失败者并被踢出页面

我的问题如下存储单个游戏信息的最佳方式是什么?为了使游戏正常运行,网站需要以某种方式保存信息在游戏中;具体来说,每当玩家正确猜出幻数时,计数器就会递增。

考虑点:

  • 我想让它可以同时进行多个游戏(website.com/game 可以同时进行多个游戏会话),因此解决方案不应阻止它。
  • 我正在使用 Django 以及 HTML/CSS/JavaScript 运行我的网站
  • 这是(可能很明显)我正在在线实现的游戏的简化版本。实际上,该解决方案将能够保存游戏中的多个动态变量/信息。

【问题讨论】:

  • 您的问题可能会被否决,因为这太开放了,但这是我的快速建议:将猜测发布到您自己的服务器以检查数据库的当前计数。如果

标签: javascript django pubnub


【解决方案1】:

存储游戏信息可能是这项任务的简单部分。考虑如何构建模型。我会有一个GamePlayerInGameUser 模型(我假设你已经有了)。

这看起来像是一个使用直通模型 (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/

正如 Craig 所说,这是一个开放式问题,实时部分太长,无法在此解释;但希望这些想法能帮助您入门!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2014-09-03
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多