CN106919388A - 一种桌面卡牌游戏引擎 - Google Patents
一种桌面卡牌游戏引擎 Download PDFInfo
- Publication number
- CN106919388A CN106919388A CN201710102590.2A CN201710102590A CN106919388A CN 106919388 A CN106919388 A CN 106919388A CN 201710102590 A CN201710102590 A CN 201710102590A CN 106919388 A CN106919388 A CN 106919388A
- Authority
- CN
- China
- Prior art keywords
- effect
- card
- game
- module
- attribute
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/22—Procedural
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/80—Special adaptations for executing a specific game genre or game mode
- A63F13/822—Strategy games; Role-playing games
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种桌面卡牌游戏引擎,其涉及桌面卡牌游戏与编程语言技术领域,其包括控制模块、核心模块、语法分析模块、卡牌管理模块、数据库模块、通信模块;所述控制模块用于处理分发事件,初始化游戏资源;所述核心模块用来模拟实际效果流程,其中包含实际效果处理的核心机制与语言解释器;所述卡牌管理模块用于管理卡牌包、卡牌、效果,可独立于游戏单独进行数据库的编辑,也可用于游戏牌库编辑;所述语法分析模块用于将数据库中卡牌及效果文本转换为可使用的游戏资源;所述通信模块将实际游戏中玩家可视资源通过通信传给客户端,并进行操作上的交互。本发明能够实现游戏处理引擎核心和使得玩家能够胜任自定义卡牌工作。
Description
技术领域
本发明涉及桌面卡牌游戏与编程语言技术领域,特指一种桌面卡牌游戏引擎。
背景技术
卡牌类游戏是桌面游戏的一个类别,也是其中占比非常大的一个类别。主要包含以TCG(Trading Card Game集换式卡牌游戏)及其变种类型,针对广泛的以牌(特指单张牌)为核心的一大类桌面游戏,这些桌面游戏的存在以下共同点:一是牌之外的附带部件少,区别于版图、棋类游戏;二是重视牌与牌的互动而不是排列组合,区别于传统的扑克、麻将等游戏。
由RPG(Role-Playing Game)游戏进化而来的卡牌类游戏很自然地带有了RPG游戏的很多元素。首先,卡牌类游戏的基本元素有:区域、卡牌、效果,大多数卡牌类游戏都会有生物、法术、装备等不同类型的卡牌,这些牌会游走于战场的各个区域之间,通过效果、战斗等互动手段来进行对决,对于生物而言,生命值、攻击力等属性也是不可或缺的。
其次是时间的离散性。卡牌类游戏的初衷是在桌面上进行RPG游戏的凝练,而桌面这一场合很难采取回合制以外的游戏方式,原因是缺少时钟。游戏的突现性也是一个重要的特征,很少有桌面游戏会选择设计固定数目的关卡,这十分不利于游戏的可玩性。而无限制的设计对于桌面游戏的开发与发行都是不可能的。所以桌面游戏往往把多变性体现在卡牌(或其他元素)的互动上。
卡牌类游戏的原本设计目的是在桌面上,用卡牌来表示玩家的动作,进行交互式的游戏。而随着时代的发展,人们对互联网的依赖越来越大。卡牌类游戏的玩家们希望在不能见面时,也能通过网络进行游戏,这便产生了用计算机实现卡牌类游戏的需求。
目前市面上的卡牌类游戏,一些主流游戏厂商大都推出了自己的自动化游戏对战平台,如万智牌的magic online、三国杀的三国杀online、风声online(已停服),但小众游戏基本都没有实现,而有实现的游戏也多不是最新版本。另外,多有着商业运营的所不可避免的高昂费用。此处高昂费用并非指游戏发行时收取的购入费用,而是指在游戏中购买虚拟卡牌的费用。在商业运营模式下此费用会虚高不下。有民间爱好者自发的团体或个人来实现,但往往没有持续的热情,通常在几个版本后放弃,另外与游戏规则不同的Bugs也经常出现。比较成功的案例有游戏王的ygopro(ygocore或mycard为不同版本名,均为基于同一开源软件所构建)。非自动化平台,这种方案是一个代替方案,并不能直接解决以上需求。该方案实现一个“桌子”,提供给玩家自己操作卡牌的功能,而游戏卡牌的效果需要玩家自行模拟操作完成。该方案是成功的,它提供了玩家通过网络进行游戏的功能,同时缺点也很明显——复杂。玩家会进行繁复的操作以至于消耗过多的时间,玩家很容易记不清效果的正确处理规则,导致游戏非正常进行。早期游戏王对战工具NBX(net battle X)、仍在使用的万智牌对战工具MWS(magic workstations[5])都是采取了这种方案,后者由于框架的开阔,被应用于许多其他同类型游戏的网络对战。
目前,卡牌类游戏的自动化实现存在以下几个难点:
1、牌池庞大,需要实现的卡牌众多;
2、更新速度快,新出现的卡牌往往带来新的机制;
3、卡牌效果歧义与特例较多;
上述难点使得自动化实现卡牌类游戏一直以来都是个很繁重的工作。
以往的自动化实现架构多为两个部分,第一部分是使用通用程序设计语言实现的核心系统,能够管理游戏资源,同时提供接口以便于对效果的分类。第二部分是使用脚本语言(如LUA)实现的卡牌效果,这有助于渐进地实现整个游戏,同时脚本语言的轻便也被体现出来。
但是上面所述的自动化实现架构也存在着许多问题。例如游戏资源交由核心管理,意味着对于游戏规则架构的修改需要核心的修改,而使用通用语言的核心本身不会很易于维护,同时游戏规则不成体系,易产生冲突。脚本语言虽然简便,但亦需有编程基础的人来更新维护,即对于牌池的扩展仍需开发者来进行,不能将扩展牌池的任务交给玩家。对于卡牌类游戏,自定义是游戏的一大乐趣,同时也是新版本的开发测试的重要组成。
发明内容
本发明所要解决的技术问题为提出一种能够实现游戏处理引擎核心和使得玩家能够胜任自定义卡牌工作的桌面卡牌游戏引擎,有效克服目前自动化实现卡牌类游戏所存在的技术问题。
本发明的具体技术方案是:
一种桌面卡牌游戏引擎,所述桌面卡牌游戏引擎包括:
核心模块、控制模块、文法分析模块、卡牌管理模块、数据库模块、通信模块;
所述核心模块用来模拟实际效果流程,其包含实际效果处理的核心机制与语言解释器;
所述控制模块用于处理分发事件、初始化游戏资源,为主控制流程;
所述卡牌管理模块用于管理卡牌包、卡牌、效果,其独立于游戏单独进行数据库的编辑或/和用于游戏牌库编辑;
所述文法分析模块用于将数据库中卡牌及效果文本转换为可使用的游戏资源;
所述通信模块用于将实际游戏中玩家可视资源通过通信传给客户端,并进行操作上的交互。
作为本发明技术方案的进一步改进,所述控制模块包括游戏初始化单元、游戏设置读取单元与游戏主控制流程单元;
所述游戏初始化单元用于创建客户端资源、客户端通信线程,加载核心模块、文法分析模块、数据库模块;
所述游戏设置读取单元用于将游戏所使用卡牌扩展包、游戏规则效果从数据库模块中读取出来,加载至核心模块中;
所述主控制流程单元用于分发处理用户级事件,调用核心模块处理效果,将核心模块中的游戏资源信息显示给客户端。
作为本发明技术方案的进一步改进,所述文法分析模块包括效果描述语言的文法结构、LR分析与抽象语法树的文法解析器;
所述效果描述语言的文法结构包括元素的描述方式、效果的描述方式、以及条件分支与循环过程结构的支持方式;
所述基于LR分析与抽象语法树的文法解析器的语言定义于LR文法中,使用LR分析器进行解析,将效果转化为抽象语法树后存于游戏资源中。
作为本发明技术方案的进一步改进,所述元素的描述方式为:所述元素包括区域、卡牌、效果、属性;游戏玩家拥有区域,区域拥有卡牌,卡牌拥有效果,区域、卡牌、效果可归类为对象,对象间使用拥有的方式获取,对象间是递归拥有的。
所述效果的描述包括:将卡牌效果分解为动作,所有每个动作均视为一个效果,所述一个效果含有多条命令,每条命令含有效果调用名、施法者、目标、参数;
条件分支与循环过程结构的支持方式包括:
1)分支结构,在每条命令前加入条件,而所有命令仍构成同一效果,每个效果只可能有一层命令调用,分支的层数只有一层,复杂的分支结构使用多个效果叠加来实现;
2)循环结构,选用递归的方式模拟可以实现不定次数的循环结构。
作为本发明技术方案的进一步改进,所述核心模块的核心机制包括基于栈的效果调用机制、基于队列的事件机制、属性栈机制和世界分支机制;
所述基于栈的效果调用机制包括:将一切的游戏动作均定义为效果,效果可以由效果产生,也可由效果触发。产生效果是指效果中所定义的必须发生的效果,产生效果是原效果的子效果;触发效果是指其它效果响应原效果后接连发生;由效果产生或触发的效果将在效果栈的最上层出现,并优先结算,为了动态处理接在效果后触发的效果,设置一个活动表记录活动的效果,以便在效果结束时进行搜索,直到调用了最底层的内建效果,则由核心模块中的内建效果对游戏资源进行操作;
所述基于队列的事件机制包括:通过事件机制使用串行的方式模拟实体卡牌上描述的同时发生的效果;当一个效果同时产生了多个效果时,在所述多个效果结算完毕之前,所述多个效果将不能触发新的效果,但所述多个效果仍将产生子效果,进而对局面进行改变,在所述多个效果的最后一个效果处理完之前,所述多个效果的其他前面的效果可能已经处理完成;所述多个效果全部结算完毕前,每当一个效果结算完毕时,则需将已完成的效果加入事件队列,当所有效果结算完成后,由事件队列中的事件触发新的效果,触发的效果可根据任意自定义的顺序排序,加入效果栈;
所述属性栈机制包括:采用实时演算来计算属性,对属性的修正分为一次性修正与持续修正,一次性修正为直接作用在原属性值上,而持续修正为实时演算属性值,每当需要获取属性的情形出现时均进行计算,并将属性获取与计算都定义为效果,每当获取某属性时,获取的属性值将触发其它修正该属性值的效果,达到实时演算的目的;属性获取过程只演算获取到的值,而不对属性原本值进行修改;属性获取过程不存在对局面的修改,单独设立属性栈,其基本处理流程与效果栈相同,在处理时没有中断、优先度优先于效果栈。
所述世界分支机制包括:将游戏过程定义为世界,当多个效果同时发生时,将当前世界复制两份并分为原世界和新世界,所述原世界用以记录同时效果发生时,所有能影响原世界的效果与属性;所述新世界用以记录多个效果处理后的世界;对于属性类的效果,从原世界中获取,对于操作类效果,则于新世界中操作。
作为本发明技术方案的进一步改进,其中,卡牌效果处理的核心结构包括效果栈、活动记录表、事件队列、内建效果、以及效果解释器;
所述效果栈用以存储将要处理的效果,处理效果时生成新的效果,当效果处理完成时向事件队列中添加新的事件;
所述活动记录表包括使用字典以记录当前可被触发的效果,每次对卡牌对象的移动,都将检查卡牌中所有效果的位置是否与移动后的位置相符,并将其注册或取消注册;注册后的效果可以触发的位置,满足条件即可触发,该注册后的效果在活动记录表中可以查询到;
所述事件队列用于存储发生的事件,每次效果结算时所有事件都将产生效果,不分先后;
所述内建效果用于定义内建效果,提供内建效果函数的回调,用以存储能直接作用于游戏资源的内建效果的源代码;
所述效果解释器用于记录当前全局与局部资源,递归调用自身,根据效果调用将定义效果的抽象语法树,通过全局资源与当前效果获得对应的值或对象,转化为更内层的效果的调用,直到调用了内建效果;效果调用的形式为名称、参数列表;
所述效果解释器据当前事件产生会触发的效果列表,对活动效果记录表进行条件匹配,直接将前一效果参数复制至新效果;其次对效果的实际动作所对应抽象语法树(AST)进行解释,从而产生新的效果;
所述效果解释器会直接调用底层内建效果,也会直接处理比较符,建立记录表,使用字符串与回调函数的字典保存。
作为本发明技术方案的进一步改进,所述卡牌管理模块包括卡牌效果编辑器,所述卡牌效果编辑器用于编辑效果,实现手动向数据库添加、修改效果,每条效果是一组效果描述语言语句,每次添加或修改效果时进行文法分析以检测部分的错误;规则效果与自定义效果分别存储管理,可对数据库中效果进行显示,每次操作后重新读入数据库并刷新显示。
作为本发明技术方案的进一步改进,所述数据库模块的数据库系统使用分布式管理,每个数据库作为一个文件管理,添加扩展包版本编号,游戏时可定义不同的游戏池,通过版本编号来筛选卡牌。
作为本发明技术方案的进一步改进,所述通信模块将核心化为同一个线程,将需要显示给玩家的信息拷贝到缓存中,在每个游戏响应时间点刷新游戏信息,并将其转化打包为网络信息,供多线程玩家客户端进行访问。
与现有技术相比,本发明具有以下有益效果:
1)游戏规则更加独立,与核心的耦合性低。
2)游戏规则机制更加规范,歧义与冲突大大减少。
3)由单层结构的效果组成的描述语言可以简单地图形化,使得游戏编辑能够面向更多用户。
4)框架开放,可以任意修改游戏机制,并能支持更多地游戏。
附图说明
图1为本发明提供的卡牌游戏引擎模块结构。
图2为本发明提供的桌面游戏各元素间的泛化与包含关系。
图3为本发明提供的世界分支机制过程。
图4为本发明提供的卡牌效果处理流程的活动图。
具体实施方式
现结合说明书附图对本发明做详细说明。
本实施例提供一种桌面卡牌游戏引擎,该桌面卡牌游戏引擎的模块结构如图1所示,包括核心模块、控制模块、文法分析模块、卡牌管理模块、数据库模块、通信模块;
其中,核心模块用来模拟实际效果流程,其中包含实际效果处理的核心机制与语言解释器,与外部独立。控制模块用于处理分发事件,初始化游戏资源,为主控制流程。卡牌管理模块用于管理卡牌包、卡牌、效果,可独立于游戏单独进行数据库的编辑,也可用于游戏牌库编辑。文法分析模块用于将数据库中卡牌及效果文本转换为可使用的游戏资源,减少处理时间。通信模块将实际游戏中玩家可视资源通过通信方式传给客户端,并进行操作上的交互。
进一步地,所述控制模块包括游戏初始化单元、游戏设置读取单元与游戏主控制流程单元。
所述游戏初始化单元用于创建客户端资源、客户端通信线程,加载核心模块、文法分析模块、数据库模块。
所述游戏设置读取单元用于将游戏所使用卡牌扩展包、游戏规则效果从数据库模块中读取出来,加载至核心模块中。
所述主控制流程单元用于分发处理用户级事件,调用核心模块处理效果,将核心模块中的游戏资源信息显示给客户端。
所述文法分析模块包括效果描述语言的文法结构、LR分析与抽象语法树的文法解析器。
所述效果描述语言的文法结构包括元素的描述方式、效果的描述方式、以及条件分支与循环过程结构的支持方式。
所述元素的描述方式包括:
大多数卡牌类游戏都会有生物、法术、装备等不同类型的卡牌,这些牌会游走于战场的各个区域之间,通过效果、战斗等互动手段来进行对决。卡牌类游戏的基本元素有:区域、卡牌、效果、属性,各基本元素间的泛化与包含关系如图2所示。
游戏玩家拥有区域,区域拥有卡牌,卡牌拥有效果。为了使效果更加灵活,所有对象均可拥有效果,每种对象均拥有属性。
区域、卡牌、效果可归类为对象,对象间使用拥有的方式获取,具体体现为名称与属性或对象与属性的二元组,对象间是递归拥有的。
属性则是单一值,一般为数字或字符串,桌面卡牌效果中通常只出现数字或字符串这两种值,集体体现为对象与属性的二元组或常量。
当效果不是单一目标时,就需要对多个目标进行处理;多个对象可称为集合,集合由筛选获得或由对象与集合聚合获得。
对象聚合可表示为一个多元组与大小、权重的组合,多元组中的元素为对象或集合,关系为相并,支持其他操作是可行的,但并操作配合筛选已经能选出所有局面组合,此处只是实现可行的最小方案。大小用于在缩小集合时,标明从待选元素中选择的元素数量,权重用于在随机选择时赋权。对象筛选是在某个位置将满足条件的对象全部选出,条件可以有复数个,筛选后获得一个集合,仍可以对其进行集合的聚合。
所述效果的描述包括:
将卡牌效果分解为动作,所有每个动作均视为一个效果,所述一个效果含有多条命令,每条命令含有效果调用名、施法者、目标、参数。其中,所述参数是可变的,所有参数都由参数限定来指定。
文法规则实例:
arcane->{command}
command–>identifier caster target params;
params–>identifier:parameter{\|identifier:parameter}
桌面环境的卡牌游戏中含有分支结构、循环结构,本实施例中各类过程结构的支持方式采用分支结构、循环结构。
1)分支结构
形如“若…则…”或“在…的情况下”的分支结构描述。为了使语言描述尽量简洁并且可视化,在每条命令前加入条件,而所有命令仍构成同一效果,每个效果只可能有一层命令调用,分支的层数只有一层,复杂的分支结构使用多个效果叠加来实现。
文法规则实例:
block->{[IF condition{\|condition}]command}
2)循环结构
自然语言描述中“进行X次…”类似的循环结构描述。出于复杂度代价的考虑,选用递归的方式模拟可以实现不定次数的循环结构。对于特例,形如“对每个…”的描述出现频率较高,加入枚举的描述可获得较好的支持。
文法规则实例:
target->EVERY cardset
|cardset
所述基于LR分析与抽象语法树的文法解析器的语言可以简单地定义于LR文法中,可使用LR分析器进行解析,将效果转化为抽象语法树后存于游戏资源中,更利于下一步处理,效率较高。
所述核心模块的核心机制包括基于栈的效果调用机制、基于队列的事件机制、属性栈机制和世界分支机制;
基于栈的效果调用机制:
在本实施例中,一切的游戏动作均定义为效果,不论是将目标的生命值改变,还是从手牌打出一张卡,或是某些卡牌发生了战斗它都是一个效果,而并不是规则。
效果可以由效果产生,也可由效果触发。产生效果是指效果中所定义的必须发生的效果,产生效果是原效果的子效果。触发效果是指其它效果响应原效果后接连发生,触发效果与原效果之间可能并无关系。
由效果产生或触发的效果将在效果栈的最上层出现,并优先结算,为了动态处理接在效果后触发的效果,设置一个活动表记录活动的效果,以便在效果结束时进行搜索,直到调用了最底层的内建效果,则由核心模块中的内建效果对游戏资源进行操作。
基于队列的事件机制:
卡牌游戏的离散时空中不会产生并行的处理流程,本实施例中通过事件机制使用串行的方式模拟实体卡牌上描述的同时发生的效果。
当一个效果同时产生了多个效果时,在所述多个效果结算完毕之前,所述多个效果将不能触发新的效果,但所述多个效果仍将产生子效果,进而对局面进行改变,在所述多个效果的最后一个效果处理完之前,所述多个效果的其他前面的效果可能已经处理完成。
所述多个效果全部结算完毕前,每当一个效果结算完毕时,则需将已完成的效果加入事件队列,当所有效果结算完成后,由事件队列中的事件触发新的效果,触发的效果可根据任意自定义的顺序排序,加入效果栈。
属性栈机制:
为了描述属性中复杂的计算过程,采用实时演算来计算属性。
对属性的修正分为一次性修正与持续修正,一次性修正可直接作用在原属性值上,而持续修正则实时演算属性值,每当显示卡牌属性、请求对卡牌属性进行运算等需要获取属性的情形出现时均进行计算,故可将属性获取与计算都定义为效果,每当获取某属性时,获取的值将触发其它修正该值的效果,达到实时演算的目的。属性获取过程只演算获取到的值,而不对属性原本值进行修改。
由于属性获取过程不存在对局面的修改,单独设立属性栈,其基本处理流程与效果栈相同,在处理时没有中断、优先度优先于效果栈。
世界分支机制:
对于名义上同时发生的效果,存在着另一种更为复杂的情况。如果同时发生的效果以某一顺序处理,先处理的效果会产生局面的变动,导致同时发生的其它效果的处理方法发生了变化,这将产生意料之外的结果。将游戏过程类比为世界,当多个效果同时发生时,应当将当前世界复制两份并分为两个世界:原世界用以记录同时效果发生时,所有能影响此世界的效果与属性;新的世界用以记录多个效果处理后的世界。对于属性类的效果,从原世界中获取,对于操作类效果,则于新的世界中操作。
多个效果同时发生,相当于多个操作做卷积,但前提是多个效果互相不能有重叠,否则将无法在新世界中找到需要操作的对象。当结算完成后,新的世界即为处理后的世界。如图3所示,一个移除效果C将同时移除卡牌A、B,A的效果保护B,即使A被从新的世界中移除了,仍能从原世界中找到所述移除效果C处理时有A的效果在保护B,B将不被移除。
其中,卡牌效果处理流程如图4所示,卡牌效果处理的核心结构包括效果栈、活动记录表、事件队列、内建效果、以及效果解释器;
所述效果栈用以存储将要处理的效果,处理效果时生成新的效果,当效果处理完成时向事件队列中添加新的事件;
所述活动记录表包括使用字典以记录当前可被触发的效果,每次对卡牌对象的移动,都将检查卡牌中所有效果的位置是否与移动后的位置相符,并将其注册或取消注册。注册后的效果意味着其在可以触发的位置,满足条件即可触发,该注册后的效果在活动记录表中可以查询到。
所述事件队列用于存储发生的事件,每次效果结算时所有事件都将产生效果,不分先后。
所述内建效果用于定义内建效果,提供内建效果函数的回调,用以存储能直接作用于游戏资源的内建效果的源代码。
所述效果解释器用于记录当前全局与局部资源,递归调用自身,根据效果调用将定义效果的抽象语法树,通过全局资源与当前效果获得对应的值或对象,转化为更内层的效果的调用,直到调用了内建效果。效果调用的形式为名称、参数列表。
所述效果解释器据当前事件产生会触发的效果列表,对活动效果记录表进行条件匹配,直接将前一效果参数复制至新效果。其次对效果的实际动作所对应抽象语法树(AST)进行解释,从而产生新的效果。
所述效果解释器会直接调用底层内建效果,也会直接处理比较符,建立记录表,使用字符串与回调函数的字典保存。
卡牌管理模块与数据库模块:
为了实现对于任意游戏,可编辑游戏规则,并且快速的自定义效果。本实施例首先创建了卡牌效果编辑器用以编辑效果,可以手动向数据库添加、修改卡牌效果。每条效果是一组效果描述语言语句,每次添加或修改效果时进行文法分析,可以检测部分的错误。规则效果与自定义效果分别存储管理,可对数据库中效果进行显示,每次操作后重新读入数据库并刷新显示。
所述数据库模块的数据库系统使用分布式管理,也是考虑到对于玩家的自定义库管理,每个数据库作为一个文件管理,添加扩展包版本编号,游戏时可定义不同的游戏池,通过版本编号来筛选卡牌。
将卡牌效果编辑器进行扩展,从已有数据库表中选择“效果名”、“区域名”、“属性名”等信息,采用树形结构化的方式创建图形化的递归效果编辑器,用以图形化创建、修改新效果。
通信模块:
目前核心模块的设计过程使用的容器均没有考虑线程安全的问题,因此本实施例在核心模块中使用单线程,将需要显示给玩家的信息拷贝到缓存中,在每个游戏响应时间点由控制模块读取并刷新游戏信息,并将游戏信息转化打包为网络信息,供多线程玩家客户端进行访问。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种桌面卡牌游戏引擎,其特征在于,所述桌面卡牌游戏引擎包括:
核心模块、控制模块、文法分析模块、卡牌管理模块、数据库模块、通信模块;
所述核心模块用来模拟实际效果流程,其包含实际效果处理的核心机制与语言解释器;
所述控制模块用于处理分发事件、初始化游戏资源,为主控制流程;
所述卡牌管理模块用于管理卡牌包、卡牌、效果,其独立于游戏单独进行数据库的编辑或/和用于游戏牌库编辑;
所述文法分析模块用于将数据库中卡牌及效果文本转换为可使用的游戏资源;
所述通信模块用于将实际游戏中玩家可视资源通过通信传给客户端,并进行操作上的交互。
2.根据权利要求1所述的一种桌面卡牌游戏引擎,其特征在于,所述控制模块包括游戏初始化单元、游戏设置读取单元与游戏主控制流程单元;
所述游戏初始化单元用于创建客户端资源、客户端通信线程,加载核心模块、文法分析模块、数据库模块;
所述游戏设置读取单元用于将游戏所使用卡牌扩展包、游戏规则效果从数据库模块中读取出来,加载至核心模块中;
所述主控制流程单元用于分发处理用户级事件,调用核心模块处理效果,将核心模块中的游戏资源信息显示给客户端。
3.根据权利要求1所述的一种桌面卡牌游戏引擎,其特征在于,所述文法分析模块包括效果描述语言的文法结构、LR分析与抽象语法树的文法解析器;
所述效果描述语言的文法结构包括元素的描述方式、效果的描述方式、以及条件分支与循环过程结构的支持方式;
所述基于LR分析与抽象语法树的文法解析器的语言定义于LR文法中,使用LR分析器进行解析,将效果转化为抽象语法树后存于游戏资源中。
4.根据权利要求1-3任一项所述的一种桌面卡牌游戏引擎,其特征在于,
所述元素的描述方式为:所述元素包括区域、卡牌、效果、属性;游戏玩家拥有区域,区域拥有卡牌,卡牌拥有效果,区域、卡牌、效果可归类为对象,对象间使用拥有的方式获取,对象间是递归拥有的;
所述效果的描述包括:将卡牌效果分解为动作,所有每个动作均视为一个效果,所述一个效果含有多条命令,每条命令含有效果调用名、施法者、目标、参数;
条件分支与循环过程结构的支持方式包括:
1)分支结构,在每条命令前加入条件,而所有命令仍构成同一效果,每个效果只可能有一层命令调用,分支的层数只有一层,复杂的分支结构使用多个效果叠加来实现;
2)循环结构,选用递归的方式模拟可以实现不定次数的循环结构。
5.根据权利要求4所述的一种桌面卡牌游戏引擎,其特征在于,
所述核心模块的核心机制包括基于栈的效果调用机制、基于队列的事件机制、属性栈机制和世界分支机制;
所述基于栈的效果调用机制包括:将一切的游戏动作均定义为效果,效果可以由效果产生,也可由效果触发;产生效果是指效果中所定义的必须发生的效果,产生效果是原效果的子效果;触发效果是指其它效果响应原效果后接连发生;由效果产生或触发的效果将在效果栈的最上层出现,并优先结算,为了动态处理接在效果后触发的效果,设置一个活动表记录活动的效果,以便在效果结束时进行搜索,直到调用了最底层的内建效果,则由核心模块中的内建效果对游戏资源进行操作;
所述基于队列的事件机制包括:通过事件机制使用串行的方式模拟实体卡牌上描述的同时发生的效果;当一个效果同时产生了多个效果时,在所述多个效果结算完毕之前,所述多个效果将不能触发新的效果,但所述多个效果仍将产生子效果,进而对局面进行改变,在所述多个效果的最后一个效果处理完之前,所述多个效果的其他前面的效果可能已经处理完成;所述多个效果全部结算完毕前,每当一个效果结算完毕时,则需将已完成的效果加入事件队列,当所有效果结算完成后,由事件队列中的事件触发新的效果,触发的效果可根据任意自定义的顺序排序,加入效果栈;
所述属性栈机制包括:采用实时演算来计算属性,对属性的修正分为一次性修正与持续修正,一次性修正为直接作用在原属性值上,而持续修正为实时演算属性值,每当需要获取属性的情形出现时均进行计算,并将属性获取与计算都定义为效果,每当获取某属性时,获取的属性值将触发其它修正该属性值的效果,达到实时演算的目的;属性获取过程只演算获取到的值,而不对属性原本值进行修改;属性获取过程不存在对局面的修改,单独设立属性栈,其基本处理流程与效果栈相同,在处理时没有中断、优先度优先于效果栈;
所述世界分支机制包括:将游戏过程定义为世界,当多个效果同时发生时,将当前世界复制两份并分为原世界和新世界,所述原世界用以记录同时效果发生时,所有能影响原世界的效果与属性;所述新世界用以记录多个效果处理后的世界;对于属性类的效果,从原世界中获取,对于操作类效果,则于新世界中操作。
6.根据权利要求5所述的一种桌面卡牌游戏引擎,其特征在于,其中,卡牌效果处理的核心结构包括效果栈、活动记录表、事件队列、内建效果、以及效果解释器;
所述效果栈用以存储将要处理的效果,处理效果时生成新的效果,当效果处理完成时向事件队列中添加新的事件;
所述活动记录表包括使用字典以记录当前可被触发的效果,每次对卡牌对象的移动,都将检查卡牌中所有效果的位置是否与移动后的位置相符,并将其注册或取消注册;注册后的效果可以触发的位置,满足条件即可触发,该注册后的效果在活动记录表中可以查询到;
所述事件队列用于存储发生的事件,每次效果结算时所有事件都将产生效果,不分先后;
所述内建效果用于定义内建效果,提供内建效果函数的回调,用以存储能直接作用于游戏资源的内建效果的源代码;
所述效果解释器用于记录当前全局与局部资源,递归调用自身,根据效果调用将定义效果的抽象语法树,通过全局资源与当前效果获得对应的值或对象,转化为更内层的效果的调用,直到调用了内建效果;效果调用的形式为名称、参数列表;
所述效果解释器据当前事件产生会触发的效果列表,对活动效果记录表进行条件匹配,直接将前一效果参数复制至新效果;其次对效果的实际动作所对应抽象语法树(AST)进行解释,从而产生新的效果;
所述效果解释器会直接调用底层内建效果,也会直接处理比较符,建立记录表,使用字符串与回调函数的字典保存。
7.根据权利要求5所述的一种桌面卡牌游戏引擎,其特征在于,所述卡牌管理模块包括卡牌效果编辑器,所述卡牌效果编辑器用于编辑效果,实现手动向数据库添加、修改效果,每条效果是一组效果描述语言语句,每次添加或修改效果时进行文法分析以检测部分的错误;规则效果与自定义效果分别存储管理,可对数据库中效果进行显示,每次操作后重新读入数据库并刷新显示。
8.根据权利要求5所述的一种桌面卡牌游戏引擎,其特征在于,所述数据库模块的数据库系统使用分布式管理,每个数据库作为一个文件管理,添加扩展包版本编号,游戏时可定义不同的游戏池,通过版本编号来筛选卡牌。
9.根据权利要求5所述的一种桌面卡牌游戏引擎,其特征在于,所述通信模块在核心模块中使用单线程,将需要显示给玩家的信息拷贝到缓存中,在每个游戏响应时间点由控制模块读取并刷新游戏信息,并将游戏信息转化打包为网络信息,供多线程玩家客户端进行访问。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710102590.2A CN106919388B (zh) | 2017-02-24 | 2017-02-24 | 一种桌面卡牌游戏引擎系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710102590.2A CN106919388B (zh) | 2017-02-24 | 2017-02-24 | 一种桌面卡牌游戏引擎系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106919388A true CN106919388A (zh) | 2017-07-04 |
CN106919388B CN106919388B (zh) | 2020-06-26 |
Family
ID=59454268
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710102590.2A Active CN106919388B (zh) | 2017-02-24 | 2017-02-24 | 一种桌面卡牌游戏引擎系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106919388B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111388990A (zh) * | 2020-03-30 | 2020-07-10 | 苏州思酷数字科技有限公司 | 一种用于卡牌游戏的定制系统及其工作方法 |
CN113811373A (zh) * | 2019-03-07 | 2021-12-17 | Cy游戏公司 | 提取拥有媒介组中包括的出现频度高的任意数量的媒介的组合的系统和方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103336888A (zh) * | 2013-06-07 | 2013-10-02 | 南宁天梯网络科技有限公司 | 一种集换式卡牌逻辑引擎 |
WO2014091658A1 (en) * | 2012-12-13 | 2014-06-19 | Sony Corporation | Card, information processing unit, and recording medium having information processing program |
CN105944375A (zh) * | 2015-07-15 | 2016-09-21 | 万代股份有限公司 | 游戏用物品、程序及游戏装置 |
CN205832553U (zh) * | 2016-06-03 | 2016-12-28 | 常州市武进区半导体照明应用技术研究院 | 一种桌面卡牌游戏系统 |
US10467328B2 (en) * | 2013-04-30 | 2019-11-05 | Gree, Inc. | System and method of providing display information based on hybrid application |
-
2017
- 2017-02-24 CN CN201710102590.2A patent/CN106919388B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014091658A1 (en) * | 2012-12-13 | 2014-06-19 | Sony Corporation | Card, information processing unit, and recording medium having information processing program |
US10467328B2 (en) * | 2013-04-30 | 2019-11-05 | Gree, Inc. | System and method of providing display information based on hybrid application |
CN103336888A (zh) * | 2013-06-07 | 2013-10-02 | 南宁天梯网络科技有限公司 | 一种集换式卡牌逻辑引擎 |
CN105944375A (zh) * | 2015-07-15 | 2016-09-21 | 万代股份有限公司 | 游戏用物品、程序及游戏装置 |
CN205832553U (zh) * | 2016-06-03 | 2016-12-28 | 常州市武进区半导体照明应用技术研究院 | 一种桌面卡牌游戏系统 |
Non-Patent Citations (1)
Title |
---|
李勇: "基于Cocos2d_x引擎的游戏架构设计与实现", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113811373A (zh) * | 2019-03-07 | 2021-12-17 | Cy游戏公司 | 提取拥有媒介组中包括的出现频度高的任意数量的媒介的组合的系统和方法 |
CN113811373B (zh) * | 2019-03-07 | 2024-03-29 | Cy游戏公司 | 提取拥有媒介组中包括的出现频度高的任意数量的媒介的组合的系统和方法 |
CN111388990A (zh) * | 2020-03-30 | 2020-07-10 | 苏州思酷数字科技有限公司 | 一种用于卡牌游戏的定制系统及其工作方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106919388B (zh) | 2020-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Torrado et al. | Deep reinforcement learning for general video game ai | |
Treanor et al. | Game-o-matic: Generating videogames that represent ideas | |
Martens | Ceptre: A language for modeling generative interactive systems | |
CN105988934B (zh) | 手游自动化检测方法及装置 | |
CN103890815A (zh) | 用于主管可被远程自动创建、主管和终止的瞬变虚拟世界的方法和系统 | |
Świechowski et al. | Recent advances in general game playing | |
Pizzi et al. | Automatic generation of game level solutions as storyboards | |
CN110457200A (zh) | 一种测试用例生成方法及其设备、存储介质、电子设备 | |
Gold | Object-oriented game development | |
Smith et al. | Computational support for play testing game sketches | |
CN106919388A (zh) | 一种桌面卡牌游戏引擎 | |
De Oliveira et al. | Game modeling using WorkFlow nets | |
CN110772794A (zh) | 智能游戏处理方法、装置、设备及存储介质 | |
US20030199319A1 (en) | Method and system for enhanced role playing and computer-user interaction | |
Osborn | Operationalizing Operational Logics | |
KR20080067892A (ko) | 게임 모델링 장치 및 그 방법 | |
KR20050105080A (ko) | 특정 게이머의 캐릭터 및 게임 스타일을 적용하기 위한게임 캐릭터/스타일 제공시스템 및 그 방법 | |
KR20210068016A (ko) | 보행 또는 상호작용 가상 현실을 위한 데이터 관리 및 성과 추적 시스템 | |
KR20200040642A (ko) | 게임 프로그램의 가상 캐릭터 생성 장치 및 방법 | |
Areizaga | PROGRAMMING LEARNING GAMES: identification of game design patterns in programming learning games | |
Dameris et al. | Praxish: a rational reconstruction of a logic-based DSL for modeling social practices | |
Zook | Automated iterative game design | |
Walton-Rivers et al. | Hexboard: A generic game framework for turn-based strategy games | |
Gilmore et al. | Modelling role-playing games using PEPA nets | |
Gong | Design and Implementation of 2D Horizontal Version Level Game Based on Unity3D Engine |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |