最终基于网络的游戏引擎应该作为网络服务启动吗?


10

我最近决定开始为纸牌游戏编写引擎。我不是“纸牌”游戏玩家,但有一位朋友向我介绍了这款游戏(这是丹麦游戏的一个转折),我坠入了爱河。

我想在3个方面开发游戏:

  1. 基本引擎,处理卡/牌组/游戏状态等
  2. 用户界面(以移动/桌面Web应用程序的形式。)
  3. 具有各种策略/困难等的人工智能

在我看来,这些都是截然不同的项目……从长远来看,我很努力地看到它们如何融合在一起。一开始,我什至不希望能够使用引擎“玩”游戏。发动机将主要通过单元测试进行测试。在客户端存在之前,不会开始播放测试。因此,这里存在一种客户-服务器关系。

发动机是很大的难题。我想知道的是:您将如何为该引擎开发“公共API”?

我当时以为引擎可能是一个非常基本的Web服务,可以通过向RESTful API的查询返回其状态,但是我担心将引擎本身开发为Web应用程序可能会导致糟糕的编程决策。(例如,如果我选择了MVC微框架,那么该API并不会真正拥有视图...它只是通过JSON返回序列化的对象,或者类似的东西。将MVC用于类似这样的服务是否不好?这个? )

我的另一个想法是,该引擎将只是一个控制台应用程序,稍后我将编写某种形式的桥梁,以在其与Web应用程序之间传递数据。(桥接实际上可以是任何东西。我的意思是,Web服务器和游戏引擎都可以在IRC服务器中闲置并在通道中共享其状态。)

您将采用哪种方法(作为Web服务开发,或者作为独立应用程序开发并在以后进行桥接),为什么?

谢谢,罗比。

编辑:所以我想这属于游戏开发。为了澄清,我将编写一个纸牌游戏引擎。我正在尝试找出公开引擎API的最佳方法,以便将来可以与Web客户端和AI客户端集成。

我什至在这里都没有帐号,所以您好:)


您的引擎需要处理多少个并发游戏?
达里安(Darien)

目前还不确定,但是……在一个完美的世界中:很多很多。肯定会有并发游戏进行。如果项目启动,那么它的想法就是它将成为一个多人游戏应用,您可以自己玩(单人游戏风格),也可以加入一个房间并与人类/人工智能一起玩游戏(类似于Pogo等)。

Answers:


5

Web服务路由可能是最好的且可扩展性最高。

我还看到使用MVC框架返回JSON 绝对没有问题(asp.net mvc非常适合)。如果您的控制器最初只返回JSON,那您就可以在没有任何视图的情况下进行单元测试。准备添加游戏界面时,可以添加视图。如果它们是纯html / css或flash / silverlight,则没关系,因为正如您所说的,您已经构建了底层引擎。

我不确定您的开发或托管环境是什么样子,但我不会过度设计它。您只需要一组简单的返回JSON的php文件。我不熟悉您要制作的游戏,因此不确定它的复杂程度。

我认为,如果您是游戏开发的新手,并且自己动手制作,我强烈建议您尽快获得可玩的游戏,因为这将帮助您保持完成游戏和完善游戏的动力。达到一个很好的水平。


我是游戏开发的新手,并且将是唯一的开发者,但请不要担心:代码会让我比游戏更感兴趣;)我在考虑使用Padrino,这是一个用Ruby编写的轻量级MVC框架。好的是它具有可挂载的应用程序。我对它们不是很熟悉,但是我认为我可以在同一过程中并排“装载”引擎和UI应用程序,但是它们仍然是具有[潜在的]自己的数据库和静态资源的单独应用程序。
罗比

对我来说,这听起来像是个好计划。如果代码会让您感兴趣,那么我就继续努力。
Nate

1

视图是向模型注册的实体,当发生变化时将通知该视图。

如果您的模型驻留在Web服务器上,则可能会出现问题,因为HTTP并未实现让服务器开始通信的显式方式。您可以使用websocket来处理此问题,但是您会牺牲一些“ RESTfulness” ...我认为一个好的解决方案是让您的Web URL识别模型并使用HTTP服务器推送来通知您的视图需要的时候。

假设您有一个正在运行的游戏

/games/cd073ac6-c37e-431f-9a5e-7b61bfacf9be/

您可以使用网址

/games/cd073ac6-c37e-431f-9a5e-7b61bfacf9be/playCard?id=3&place=stack 

修改模型并

/games/cd073ac6-c37e-431f-9a5e-7b61bfacf9be/notify 

等待通知。

通知将等待-一定时间-通过模型获取新闻:如果发生某种情况,将发送一条消息(更改了什么数据或发生了什么类型的事件,等等)。

客户端可以对/ games / cd073ac6-c37e-431f-9a5e-7b61bfacf9be / notify发出较长的ajax请求,并注册一个通知回调,该回调将更新视图并重新发布下一个通知请求。

如果游戏/ cd073ac6-c37e-431f-9a5e-7b61bfacf9be /在客户端上通知超时,则会执行新的请求,如果服务器上的超时,则释放分配的资源。

您可以在服务器上构建通用的通知系统,并在客户端上构建通知库,以便可以在透明的通知层上构建一致的MVC。

如果您正在寻找技术,则可以考虑在Couchdb服务器上构建游戏引擎。Couchdb是使用HTTP作为协议和JSON作为文档格式的非关系REST DBMS。它还可以将PUT和GET二进制文件或HTML文件作为附件发送,因此可以仅使用DBMS(沙发应用程序)编写完整的webApp。

存在一个javascript库,它可以对数据库更新进行响应。benchdbApp只是一个数据库,因此您可以通过同步将应用程序复制到另一台服务器:您的客户端可以将您的应用程序复制到其本地服务器,然后在脱机的LAN上播放。


2
卡放置位置应该是POST(或PUT,如果它是幂等的,但这不太可能且没有得到很好的支持),而不是GET的URL。

@Joe Wreschnig,您是对的,该URL仅用于说明目的,我没有提及应使用哪种方法。
FxIII
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.