我是相当新的网站和数据库设计,我唯一的经验是一些非常基本的MS访问数据库和基础课程的代码学院。我已经决定尝试做一个基于网络的游戏,以减少我的编程牙齿。我希望有人能给我一些关于数据库设计的见解,特别是对未来事件的临时安排。
目前的计划是有一个简单的太空冒险游戏;恒星被布置在一个二维笛卡儿平面上(因此,每颗恒星都有一个(X,Y)坐标)。因此,我有两个基本的表格显示:
船舶:
地图
假设我的玩家拥有一艘位于坐标(1,1)处的系统,并希望在坐标(2,2)处进行一次到系统的旅行。如果这段旅程需要10分钟,那么建立数据库记录船只到达新恒星系统的最佳方法是什么?(这艘船不需要从一个坐标到另一个坐标,只要从原点消失并出现在目的地就足够了。)
我正在考虑更新数据库以显示船在运行,10分钟后再更新数据库以显示船只到达,但老实说,我不确定我将如何设置这个调度表。考虑到这一点,我现在考虑的是,与其记录船什么时候启航,什么时候到达,我应该用时间戳记录船什么时候着陆,然后计算出船是否在运行。
因此,我将从SHIP表中删除X和Y CoOrdinate字段,而是有一个名为POSITION的表
职位:
然后,该网站将检查是否已通过到达时间戳,以确定船舶是否在运行。
这样,如果玩家关闭他的浏览器并在稍后重新打开,什么都不会被中断,现在我只更新数据库一次(显示到达),而不是两次(显示启动和到达)。有人能确认这是否是追踪球员动作的可行方法吗?我这样做是为了学习,所以我非常愿意尝试提出任何建议。:)
数据库是MySQL,网站将使用Perl。
这是我在这里的第一篇帖子,如果我的问题不够清楚,请接受我的道歉。我搜查了档案,但没有找到与我正在寻找的文件相符的任何东西。
事先非常感谢,
发布于 2013-09-10 07:15:23
一般来说,这似乎是一种明智的做法。不过有两个建议。
从审计/倒带+重放的角度来看,一套行动表(旅程、着陆、攻击、修理)可能是有意义的。但是,对于“当前的游戏状态”,您可能不希望重新运行自游戏开始以来的每一个动作。尽管带有时间戳的冗余、常规的“结果”表(职位、ship_damages、ship_stores)允许您跟踪过去的“当前”状态或关键点。可以从启动状态和所有后续操作重新生成表,并将其视为缓存。没有直接更新-让触发器为您做它为您添加新的操作到数据库。
最后,考虑到数据库需要的DBIx::Class --它很大,需要一段时间才能理解它,但是不管语言如何,它都是一个更好的基于对象的db包装器。
发布于 2013-09-09 20:54:38
捕获DepartureTime和ArrivalTime。当船离开时,将它们设置为:DepartureTime = NOW(), ArrivalTime = NOW() + INTERVAL 10 MINUTE。当NOW() BETWEEN DepartureTime AND ArrivalTime的时候,船在运行。
https://stackoverflow.com/questions/18706361
复制相似问题