首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库中的移动跟踪

数据库中的移动跟踪
EN

Stack Overflow用户
提问于 2013-09-09 20:19:13
回答 2查看 582关注 0票数 1

我是相当新的网站和数据库设计,我唯一的经验是一些非常基本的MS访问数据库和基础课程的代码学院。我已经决定尝试做一个基于网络的游戏,以减少我的编程牙齿。我希望有人能给我一些关于数据库设计的见解,特别是对未来事件的临时安排。

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

船舶:

  • 牌手(瓦古尔)
  • 船舶(沃瑟)
  • CurrentXCoOrd (int)
  • CurrentYCoOrd(int)

地图

  • STARID (Int)
  • SystemName (varchar)
  • XCoOrd (int)
  • YCoOrd (Int)

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

我正在考虑更新数据库以显示船在运行,10分钟后再更新数据库以显示船只到达,但老实说,我不确定我将如何设置这个调度表。考虑到这一点,我现在考虑的是,与其记录船什么时候启航,什么时候到达,我应该用时间戳记录船什么时候着陆,然后计算出船是否在运行。

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

职位:

  • 牌手(瓦古尔)
  • ArrivalTime (DateTime)
  • XCoOrd (int)
  • YCoOrd (int)

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

这样,如果玩家关闭他的浏览器并在稍后重新打开,什么都不会被中断,现在我只更新数据库一次(显示到达),而不是两次(显示启动和到达)。有人能确认这是否是追踪球员动作的可行方法吗?我这样做是为了学习,所以我非常愿意尝试提出任何建议。:)

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

这是我在这里的第一篇帖子,如果我的问题不够清楚,请接受我的道歉。我搜查了档案,但没有找到与我正在寻找的文件相符的任何东西。

事先非常感谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-10 07:15:23

一般来说,这似乎是一种明智的做法。不过有两个建议。

  1. 考虑使用"stardate“时间(int?)以及实时翻译。这样,如果您需要暂停游戏,因为服务器离线,那么您可以。
  2. 决定是否要记录操作(旅行表)或结果(职位表),还是两者都记录。

从审计/倒带+重放的角度来看,一套行动表(旅程、着陆、攻击、修理)可能是有意义的。但是,对于“当前的游戏状态”,您可能不希望重新运行自游戏开始以来的每一个动作。尽管带有时间戳的冗余、常规的“结果”表(职位、ship_damages、ship_stores)允许您跟踪过去的“当前”状态或关键点。可以从启动状态和所有后续操作重新生成表,并将其视为缓存。没有直接更新-让触发器为您做它为您添加新的操作到数据库。

最后,考虑到数据库需要的DBIx::Class --它很大,需要一段时间才能理解它,但是不管语言如何,它都是一个更好的基于对象的db包装器。

票数 0
EN

Stack Overflow用户

发布于 2013-09-09 20:54:38

捕获DepartureTime和ArrivalTime。当船离开时,将它们设置为:DepartureTime = NOW(), ArrivalTime = NOW() + INTERVAL 10 MINUTE。当NOW() BETWEEN DepartureTime AND ArrivalTime的时候,船在运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18706361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档