【发布时间】:2018-09-06 07:50:16
【问题描述】:
到目前为止,我已经研究了两种在游戏中持续跟踪玩家属性技能的不同方法。这些主要是概念性的,除了我想出的线程选项/找到了一个例子。
案例:
独自开发网页游戏。地理政治模拟器,但与其他我不会透露的地方相比有一点扭曲。
我正在使用 Flask 和 SQLAlchemy 的组合,我已经为其编写了路由,并且模板动态扩展到了基础中。
目前在本地以开发模式运行它,目的是将其置于基于云的 Linux vm 上的 WSGI 和反向代理(如 Nginx)之后。
关于玩家属性机制 - 玩家将提交一个帖子请求,其中将指定一些信息。首先我们想知道哪个技能、智力、耐力等。接下来我们需要知道哪个玩家,但是所有这些都会自动生成,我们可以使用 Flask-LoginManager 来获取当前用户,以及我们漂亮的 user_loader 装饰器和函数。我们可以使用它提供的用户ID来查询它的其余部分,即玩家是什么级别。我们可以指定用于决定稍后以秒为单位增加等待时间的数学运算。
选项;
选项 1:
根据我的一位同事的建议。允许数据库管理技能的时间安排。当用户提交表单时,我们将创建一个新表来保存技能升级信息。我们记下用户提交表单的时间,并将当前技能水平乘以 X 时间量,然后将两条数据都放入数据库中。然后我们创建一个新的进程来管理这个表的不断检查。使用 timedelta,我们可以检查自提交表单以来经过的时间是否等于或大于玩家必须等待升级完成的时间。
选项 2:
导入线程并创建一个类,该类需要与 init 提供的 abovr 相同的信息,然后只需使用 time.sleep X 时间,然后触发升级并在完成后终止线程。
我希望这一切都有意义。我还没有写,因为我不确定哪种方法最有效。
我正在寻找最具可扩展性的解决方案(即使它不是此处列出的选项),但也是实用的或对我的技能跟踪机制概念的改进。
我愿意在包中添加另一个库,但我真的不想这样做。
【问题讨论】:
-
添加一个线程的问题是,如果进程被中断,它将永远不会完成,而且负载平衡非常糟糕。另一方面,将信息输入到具有一定触发时间的数据库中,并且已修复并完成。然后,执行任务计划以定期扫描数据库以查找符合更新时间标准的项目,并根据该标准对这些条目执行新操作。如果任务丢失或处理错误,它将在下一次定期运行中修复。调查芹菜...
标签: python python-3.x sqlite flask-sqlalchemy flask-login