数据库中的移动跟踪



我对网站和数据库设计相当陌生,我以前唯一的经验是一些非常基本的MS Access数据库和Codeacademy的基础课程。我决定尝试制作一个基于网络的游戏来削减我的编程能力。我希望有人能给我一些关于数据库设计的见解,特别是未来事件的临时调度。

目前的计划是制作一个简单的太空冒险游戏;恒星被布置在2维笛卡尔平面上(因此,每颗恒星都有一个(X,Y)坐标)。因此,我有2个基本表显示:

船:

  • 球员(瓦尔查尔)
  • 船(瓦尔查尔)
  • CurrentXCoOrd (int)
  • 当前YCoOrd(int)

地图

  • 斯塔里德(国际)
  • 系统名称 (varchar)
  • XCoOrd (int)
  • YCoOrd (Int)

假设我的玩家在坐标 (1,1) 处的系统有一艘船,并希望前往坐标 (2,2) 的系统。如果这个旅程需要10分钟,那么建立数据库以记录到达新恒星系统的飞船的最佳方法是什么?(飞船不需要从一个坐标移动到另一个坐标,只需从原点消失并出现在目的地就足够了。

我正在考虑更新数据库以显示

船舶正在行驶,然后在 10 分钟后再次更新数据库以显示船只到达,但老实说,我不确定我将如何设置该时间表。考虑到这一点,我现在正在考虑,与其记录船舶何时下水以及何时到达,不如只记录到达时带有时间戳,显示船舶何时着陆,并据此计算船舶是否在运动。

因此,我会从 SHIP 表中删除 X 和 Y 坐标字段,而是有一个名为 POSITION 的表

位置:

  • 球员(瓦尔查尔)
  • 到达时间(日期时间)
  • XCoOrd (int)
  • YCoOrd (int)

然后,该网站将检查到达时间戳是否已过去,以确定船舶是否在行驶。

这样,如果玩家关闭浏览器并稍后重新打开,则不会中断任何内容,现在我只更新数据库一次(显示到达)而不是两次(显示启动和到达)。谁能确认这是否是跟踪玩家动作的可行方法?我这样做是为了学习,所以我完全愿意尝试提供的任何建议。:)

数据库是MySQL,网站将使用Perl。

这是我在这里的第一篇文章,所以如果我的问题不够清楚,请接受我的歉意。我搜索了档案,但没有找到任何与我正在寻找的内容相匹配的东西。

提前非常感谢,

一般来说似乎是一个明智的方法。不过有两个建议。

  1. 考虑使用"stardate"时间(int?)并转换为实时/从实时翻译。这样,如果您因为服务器处于离线状态而需要在游戏中暂停,那么您可以。

  2. 确定是要记录操作(行程表)还是结果(位置表),还是同时记录两者。

从审核/倒带+重播的角度来看,一组操作表(旅程、着陆、攻击、维修)可能是有意义的。但是,对于"当前游戏状态",您可能不想重新运行自游戏开始以来的每个动作。虽然冗余,但带有时间戳的常规"结果"表(位置、ship_damages ship_stores)可让您跟踪过去的"当前"状态或关键点。这些表可以从启动状态和所有后续操作重新生成,并且可以被视为缓存。没有直接更新 - 让触发器在你向数据库添加新操作时为你执行此操作。

最后,考虑DBIx::Class以满足您的数据库需求 - 它很大,可能需要一段时间才能掌握它,但无论语言如何,它都是更好的基于对象的数据库包装器之一。

捕获出发时间和到达时间。在飞船离开时设置它们:DepartureTime = NOW(), ArrivalTime = NOW() + INTERVAL 10 MINUTE .船在NOW() BETWEEN DepartureTime AND ArrivalTime时处于运动状态。

最新更新