首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于浏览器的游戏有什么既定的架构吗?

基于浏览器的游戏有什么既定的架构吗?
EN

Software Engineering用户
提问于 2012-10-10 00:10:43
回答 3查看 1.9K关注 0票数 4

我开始开发一个基于broser的游戏,玩家在任何时候都会采取某些行动。游戏的大部分将发生在现实生活中,只需进入系统。

我相信一个很好的比较可能是一个管理幻想足球的平台,虽然我几乎没有经验,所以如果我在这里错了,请纠正我。

关键是在程序中发生一些事件(例如,在服务器上,玩家无法到达),比如从某些数据源中提取新的结果,由游戏大师开始新一轮等等。

其他事件发生在现实生活中(两名球员在转会某一队成员或类似的事情上达成协议:从未踢过梦幻足球),必须进入系统。

第一部分是相当容易的,因为游戏的主人将是“工作人员”,因此可以信任在一定程度上不混乱的系统。但第二部分让我感到很困扰,尤其是因为这些行为可能涉及多个步骤和与不同玩家的互动,比如向系统注册协议,然后必须得到对方的批准,或者被拒绝,然后交给游戏大师来决定。

当然,我想尽可能地将游戏逻辑从演示和基本表单验证中分离出来,但我不知道如何以干净的方式完成这一任务。

当然,我可以(也会)努力做出自己的架构决策和原型不同的想法。但我一定会在某一时刻犯一些愚蠢的错误,所以我想要避免其中的一些错误,事先得到一点“聪明的书”。

所以问题是:

有什么建筑作品我能读懂吗?

文件,博客,也许是设计文档,甚至是源代码?写下来这看起来更像是一个业务应用程序,有业务规则,工作流等等.有什么好的切入点吗?

编辑:

在阅读了第一个答案后,我的印象是在标题中包含了"MMO“部分时犯了一个错误。在客户端,游戏并不都是花哨的(即3D或类似的),而逻辑将完全存在于服务器上。也就是说,除了对用户的基本表单验证之外,它还将在服务器端镜像。因此,目标工具集将是HTML5、JavaScript,可能是JQuery(UI)。我的问题更多地与强制执行某些规则的系统的软件体系结构/设计有关。

规则集的

分离与表示

我遇到的一个问题是,我想把游戏规则和演示分开。

第一步是为游戏“引擎”制作一个自己的模块,它只公开一个界面,允许以一种干净的方式执行所有操作。

如果某个操作在某些预/后条件下失败,则引擎抛出一个异常,然后将异常显示给用户,如“您不能出售您不拥有的东西”或“在此之后,您将以非有效的游戏状态结束”。

这里的问题是,我希望能够在一开始甚至不显示无效的操作,或灰色出相应的UI元素。

更改和调整规则集

另一件大事是规则集。它可能会随着时间的推移而发展,而且最肯定的是必须加以调整。更重要的是,它应该有可能(在一定程度上)建立一个规则集,适合一个特定的游戏回合,即选择不同类型的行为在游戏的不同方面。这样做就像“我们今天用分机A玩,但我们把分机B扔了。”

对我来说,这是“建筑/设计模式”的尖叫声,但我不知道谁会在这样的东西上发表文章,甚至连谷歌的目的都不知道。

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2012-10-10 06:55:01

编辑:你对问题的更新澄清了很多事情,并改变了问题的方向(至少在我看来是这样)。

这里的问题是,我希望能够在一开始甚至不显示无效的操作,或灰色出相应的UI元素。

问题似乎不仅在于您想要实现这一点,而且您希望以某种完全通用的方式实现它,这允许您在幕后动态地更改规则引擎。后者是真正困难的部分,我不确定您是否能够找到一个完全的解决方案来满足您的确切需求。

如果我们后退一步,这样做的“传统”方式将遵循以下思路(让我们使用模型-视图-控制器体系结构,它可能适合您的游戏):

该模型代表游戏的逻辑,并负责创建一个结构,该结构包含表示层(视图)所需的所有信息(最好在视图中没有任何附加逻辑)。在实际中,这意味着它将准确地确定哪些操作可供玩家使用,哪些项目是“可出售的”,等等。

视图将负责如何向用户显示这些信息。通常,视图要么是服务器端模板(导致生成实际的HTML ),要么是客户端模板或其他javascript代码,这些模板或javascript代码导致在客户端更新一些HTML (在后一种情况下,模型通常以AJAX的形式发送到浏览器)。

控制器的工作只是接收传入的请求并将请求路由到相关的模型,并将结果发送到相关的视图。

因此,从本质上说,如果您已经巧妙地设计了所有的东西,那么基本的MVC模式已经将表示与逻辑分离得很好。您需要真正弄清楚如何构造您的模型,这样视图就可以保持相对没有逻辑,而且是通用的。有些事情是容易的(例如,这个物品清单可以由玩家出售)和一些东西是很难的(这是一个一般动作的列表-如果玩家选择行动A,他们需要选择一个价值X的物品来交易,而玩家从他们的朋友列表中选择一个玩家)。但是,通过仔细考虑希望保持灵活性的轴,您可以提出正确的体系结构。

改变和调整规则集

假设不同的规则集仍然符合相同的表示策略,改变规则集将是“相对容易”的。如果不知道确切的游戏想法,就很难说得更多,但您可以在核心游戏规则中使用钩子进行各种修改,以应用它们的更改等。如果您正在寻找更通用的内容,请考虑阅读规则引擎,甚至构建您自己的领域特定语言,然后您可以在运行时将其转换为规则。

关于MMOs

的原始位

Yannis的链接涉及到MMO架构的一些细节。它可能不是指基于浏览器的游戏,但其中大部分仍然适用。我想指出以下几点:

你似乎是在暗示大部分游戏都是在客户端运行的。问题在于:客户端不能被信任。这是一个古老的经验法则,任何类型的发展,它也适用于游戏。处理javascript代码很简单,也没有纯粹的客户端防御。如果这是你关心的问题(比如说,你的球员的享受或金钱处于危险之中),你必须在服务器端做一些工作。下面是gamedev的一个实例讨论 (巧合的是,该站点可能更适合这个问题),其中的建议是“立即处理客户端移动,然后由服务器进行验证,这是一个很好的方法,当与服务器代理和内插移动相结合时”。本质上,你想让服务器知道客户端发生了什么,如果有人篡改了客户端,你就有足够的能力对客户进行犯规。这是大多数实时多人游戏(战场等)所采用的方法--很明显,你不能仅仅相信客户说“嘿,我杀了那个家伙,不,真的”,你需要服务器来检查它至少是可信的。我们主要讨论的是在服务器端镜像客户端逻辑和数据。

这显然不是最容易实现的事情,而且很可能会减慢你的发展速度。我的建议是弄清楚为什么你希望这个游戏是重客户端(成本,用户体验等),并考虑将大部分功能转移到服务器端。如果您这样做,您的游戏将变得非常类似于一个传统的web应用程序,您只需验证所有用户的输入,并运行在服务器端的逻辑。许多当前的浏览器“MMO”实际上使用了这种方法,好的浏览器恰好做到了足够灵活,以至于您没有注意到。

注意:我把MMO放在引号的末尾,因为如果像Evony这样的游戏是MMO,那么Gmail也是其中之一。

票数 1
EN

Software Engineering用户

发布于 2012-10-10 02:52:59

首先,我将对javascript能够提供给基于浏览器的项目的范围有一个非常深刻的理解。从node.js开始,并在AJAX上刷新自己。查看以jQuery开头的codeacademy教程库。

最终,您需要掌握WebGL并了解如何将程序的后端与js前端集成。我建议你拿这个类以获得一些清晰性。。但是,如果您正在规划一个MMO,那么对于后端来说,无堆栈的python或java可能是一个更好的选择。

票数 1
EN

Software Engineering用户

发布于 2012-10-10 14:05:03

您可能需要考虑客户机-服务器体系结构。

即使客户端是通过web服务连接到存在于同一主机上的服务器应用程序的web应用程序,它也应该允许非常有效地分离游戏逻辑和表示元素。这可能是过分的,取决于您的需求。MVC可能做得很好。

所以一个普通的用户想提出交易?客户端应用程序向服务器发送请求,添加新的拟议交易。服务器可能会回应说交易是被提议的,或者我们的用户已经被他提出交易的用户阻止了。如果您添加了一个新的限制,比如“交易可能只涉及X黄金”,那么服务器只需要返回一个新的错误响应,而不需要对客户端应用程序进行更改。

面向对象的设计也应该有帮助。思考一个对象对自己的了解,以及你能对它做些什么,应该会帮助你澄清一个游戏引擎界面。

交易本身需要知道些什么呢?谁提出的,向谁提出的,它是否被接受,以及交易的条款是什么。我们如何处理这个建议呢?它可以被取消、接受或拒绝。

您还应该考虑系统中用户的类型,以及他们能够做什么。用例将帮助您澄清用户需要做什么,哪些用户应该在他们的行动中受到限制,以及如何。

谁能用这笔交易做什么?用户可以提出交易,如果交易尚未被接受或拒绝,可以取消他提议的交易,接受或拒绝向他提议的交易。管理员能对交易做些什么吗?可能不会。

本质上,确定您的应用程序应该做什么,以及为什么。然后开始设计一个适合它的架构。

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

https://softwareengineering.stackexchange.com/questions/168221

复制
相关文章

相似问题

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