在LOB应用程序中有背景的人的游戏架构

Bas*_*sic 12 architecture game-engine

我的背景几乎完全基于业务应用程序 - Web服务,调度程序,桌面和Web前端到CRM系统等......

现在几乎所有上述项目的基本原则都是相同的:

某种数据访问层,业务逻辑层和UI.

显然某些场景需要一些独特的东西,但总的来说它一直是N层.

我想做一些游戏开发作为一种爱好.我没有期待任何令人印象深刻的东西,因为我没有足够的资源来投入它,但是有点挑战我的东西会很好.

我应该从目前的经验中学到什么课程(如果有的话),我还需要学习什么?

我假设根据我的经验,不同类型的游戏将有不同的架构,但它们都是基于相同的核心原则吗?为了争论,让我们说我正在构建一个简单的MUD(也许是一个像旧的Zelda游戏一样的自上而下的UI) - 这似乎是我可以拥有我的3层逻辑的东西 - 一个带有BLL和DAL和客户端用户界面 - 但我不太确定这是否正确 - 当然使用实体框架似乎不合适,因为在Db中访问大量内容会产生大量开销,我认为性能将会成为一个问题 - 例如,我假设我不想经常使用Db存储玩家位置,如果他们改变20次/秒......

是否有针对游戏场景的模式和实践?

在创建UI之前开发后端系统是否可行(例如,插入控制台应用程序以允许我在添加UI之前开发我想要的功能).这是好/坏的做法吗?

简而言之,我不知道从哪里开始,并希望得到一些建议 - 特别是那些有经验的人.

关于唯一一件事就是我想要一个带有中央服务器的多用户游戏.游戏建议欢迎.

Jef*_*tes 6

首先,游戏往往具有实时模拟

  • 因此,游戏有更新循环
  • 因此,游戏倾向于以微秒级进行业务逻辑操作.
  • 因此,数据库解决方案并非最终所有并且都是您的"数据层"

(如果你没有模拟(例如:'scrabble','文明',大多数facebook游戏),这不是真的.泥do不会有太多的模拟,所以它不清楚你的哪一边围栏游戏正在开启)

因此在实践中,高仿真游戏,

小型/非持久性多人游戏(地震,反击,星际争霸 - 可以由一台机器运行的游戏):通过没有数据层来解决这个问题(如果它们实现了保存,那么它们就像游戏状态的巨大转储一样)

大型多人游戏(mmos - 需要多台机器的游戏):将其持久数据存储用作只写管道(并用于恢复),然后将大量精力投入到以模拟方式划分数据的方案中(即业务)逻辑可以根据本地内存访问的顺序获得延迟.

透视的一些数字:如果一个'服务器'处理500个玩家并且你的模拟速率是15hz,那么每个玩家每个玩家得到0.13ms的cpu.所以,如果你需要'火球击中任何东西,这个框架'需要<<.13ms,不足以进行网络往返或SQL查询.是的,你可以在游戏设计中解决许多这些问题 - 例如'没有碰撞'解决了前面的例子.但在某些时候,你不再是一个模拟游戏,嘿.

第二大差异是'图形'

图形编程与业务应用程序编程完全不同.虽然我有时会把所有的编程都想象为"以X格式将数据放到位A并将其转换为格式为Y的B",这适用于商业和图形编程,但图形编程在很大程度上要宽容许多个数量级.

(虽然顺便说一句,快速回退信封计算器会在同一个桶中放置谷歌式问题:

  • 游戏:以'毫秒'级别管理'千兆字节**'的图形数据== 10 ^ 9/10 ^ -3 == 10 ^ 12
  • google:在'day'尺度管理'petabytes'数据== 10 ^ 15/10 ^ 3 == 10 ^ 12

**:实际上,游戏无法移动那么多数据,因此图形编程的"技巧"正在跳过"我们如何获得需要每帧的千兆字节图形数据的箍"与现实只是实际移动/操纵一帧的兆字节' - 加载屏幕是一个共同但不幸的答案:(

如果您正在制作具有低图形要求的游戏,那么这又不太相关.

因此,游戏往往以"游戏玩法/图形"为框架

而不是"ui/logic/dal".话虽这么说,当我从网络地转变为游戏时,我对世界的三层观点(是的,我们当时只有3层)我感觉对我们的项目有很多了解,并导致了我们的发展一个用于游戏内容的"数据访问层",它在多个项目中非常成功(解决游戏世界的问题,比如从磁盘上取下东西,处理开发时版本,加载等等).

虽然在游戏开发的任何地方都会有新的东西需要学习,但您之前的经验将帮助您顺利完成.

关于你的建议请求,

我建议着眼于游戏与设计,密切配合您的体验.

即如果您对数据库,网页和日程安排非常称职,请制作电子表格游戏:http: //www.ogame.org/

如果你想要更多的游戏逻辑和模拟,制作一个可收集的纸牌游戏:http: //apps.facebook.com/warstorm/

如果您想要更复杂的玩家互动,请查看mmo-scrabble:http://wordsquared.com/

如果您想学习图形,请从单人游戏开始:)

使用您熟悉的技术和技术,看看他们开始分解的地方,然后回到这里并发布您的问题和发现.

玩得开心!