一种基于unity3D引擎的跳棋信息处理器系统的制作方法

文档序号:12212618阅读:998来源:国知局

本发明涉及一种游戏引擎,尤其是涉及一种基于unity 3D引擎的跳棋信息处理器系统。



背景技术:

3D游戏是使用空间立体计算技术实现操作的游戏。从编程实现角度来说游戏基础模型(游戏的人物,场景,基础地形)是使用三维立体模型实现的。它是相对于二维游戏(2D游戏又称平面游戏)而言的,因其采用了立体空间坐标的概念,所以更显真实,而且对空间操作的随意性也较强。也更容易吸引人。

网络技术通过将互联网上分散的资源融为有机整体,实现资源的全面共享与有效协作。将网络技术应用于游戏领域,提高了游戏的现实感,使游戏本身成为一个全民娱乐的虚拟社区。

3D技术与网络技术的日益发展,为传统游戏的发展打开了一道新的大门。由于玩法单一、游戏性不高的桎梏,许多传统游戏被弱化。我们的工作就是基于3D引擎和网络平台,丰富传统游戏的游戏内容,以达到使其更加吸引人的预期效果。



技术实现要素:

本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于unity3D引擎的跳棋信息处理器系统。

本发明的目的可以通过以下技术方案来实现:

一种基于unity 3D引擎的跳棋信息处理器系统,包括:

全局主控模块,与unity 3D引擎连接,用于向用户展示棋盘和棋子;

棋子信息模块,与全局主控模块连接,用于保存棋子信息;

AI决策模块,与棋子信息模块和全局主控模块连接,用于根据棋子分布生成AI棋子的走步;

网络连接模块,与全局主控模块连接,用于对外通信,传输棋子信息以实现用户对战。

所述棋子信息模块包括用于保存棋子位置的位置保存单元和用于存储棋子属性的中枢单元,所述位置保存单元和中枢单元连接,所述中枢单元还与AI决策模块连接。

所述AI决策模块的决策过程包括步骤:

S1:计算所有棋子的最优走步;

S2:从所有棋子中选出最优棋子进行走步。

所述步骤S1中对于任一棋子最优走步的计算过程具体包括步骤:

S11:判断尚未进入目的区域的棋子是否大于2,若为是,则执行步骤S12,若为否,则执行步骤S15:

S12:载入该棋子每种走法走步后距离目的区域的距离和偏离行进方向的距离,其中,所述行进方向为从棋子初始区域指向目的区域的方向;

S13;计算每种走法的走法权重w1:

w1=a·dis+bias/b

其中:dis为走步后棋子距离目的区域的距离,bias为棋子走步后偏离行进方向的距离,a,b为大于0的常数且;

S14:挑选出权重最大的走法作为该棋子的最优走步;

S15:在预设棋谱列表中搜索对应的最优走步。

所述步骤S2具体包括步骤:

S21:判断尚未进入目的区域的棋子是否大于2,如为是,则执行步骤S22,若为否,则执行步骤S24;

S22:根据棋子所处位置生成位置权重w2,其中棋子位置距离目的区域越远,位置权重w2越大;

S23:合成w1和w2得到棋子权重,并选取棋子权重最大的棋子作为最优棋子进行走步;

S24:在预设棋谱列表中搜索对应的最优棋子。

与现有技术相比,本发明具有以下优点:

1)可以同时实现AI对战和玩家对战。

2)基于走法权重得到棋子的最优走步可以提高前期的处理效率,并且在棋盘到达中后期时采用棋谱搜索的方式可以避免后期AI走蠢棋。

3)在挑选最优棋子时,融入了棋子位置的因素,可以避免因末端棋子被忽略而造成的失误。

附图说明

图1为本发明的结构示意图;

其中:1、全局主控模块,2、棋子信息模块,3、AI决策模块,4、网络连接模块。

具体实施方式

下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

一种基于unity 3D引擎的跳棋信息处理器系统,如图1所示,包括:

全局主控模块1(即GameManager),与unity 3D引擎连接,用于向用户展示棋盘和棋子;

棋子信息模块2,与全局主控模块1连接,用于保存棋子信息;

AI决策模块3(即AI层),与棋子信息模块2和全局主控模块1连接,用于根据棋子分布生成AI棋子的走步;

网络连接模块4(即Network),与全局主控模块1连接,用于对外通信,传输棋子信息以实现用户对战。

棋子信息模块2包括用于保存棋子位置的位置保存单元(即HoodleMove)和用于存储棋子属性的中枢单元(即Board),位置保存单元和中枢单元连接,中枢单元还与AI决策模块3连接。

其中,GameManager为全局主控模块,是信息发送和接收的最重要的站点,也是物体层和代码层的连接纽带。在GameManager模块中,unity引擎中创建的物体通过GetGameObject语句与代码层互连。用户在游戏中出现的移动、点击等动作,都是通过GameManager将信息的变动传送至各个分支模块的。而各个分支模块确认相应的操作后,最终也是在GameManager上完成操作的。

Board为代码层游戏的中枢模块,存放着关于棋盘上棋子信息的所有属性,如各个棋子的坐标、当前玩家等等。Board与其它各个分支层次交互十分频繁,因为几乎任何一项操作都必须从棋盘上读出相应的信息。同时,Board也将GameManager中的实物抽象化,转变为易于进行编程的信息。如某个棋子,在Board中即是以一个特定的编号而出现的。

AI层是AI的主控模块,用于引导AI完成相应的动作。当轮到某个AI玩家时,GameManager会先将程序的控制权移交至AI,AI向Board发送一个请求,Board根据棋盘上现有的信息和设计好的AI算法,给出AI的移动特征,并返回给AI模块。AI模块获得移动特征好,将控制权还给GameManager,由GameManager进行移动。

Network是网络层的主要模块。

HoodleMove保存棋子的信息,Board中会同时保存实际棋子(HoodleMove)与虚拟棋子(棋子的编号)。这两者在Board中进行统一。

AI决策模块3的决策过程包括步骤:

S1:计算所有棋子的最优走步,其中对于任一棋子最优走步的计算过程具体包括步骤:

S11:判断尚未进入目的区域的棋子是否大于2,若为是,则执行步骤S12,若为否,则执行步骤S15:

S12:载入该棋子每种走法走步后距离目的区域的距离和偏离行进方向的距离,其中,行进方向为从棋子初始区域指向目的区域的方向;

S13;计算每种走法的走法权重w1:

w1=a·dis+bias/b

其中:dis为走步后棋子距离目的区域的距离,bias为棋子走步后偏离行进方向的距离,a,b为大于0的常数且;

S14:挑选出权重最大的走法作为该棋子的最优走步;

S15:在预设棋谱列表中搜索对应的最优走步。例如,两种情况(因为有两个棋子和两个剩余位置)选一最优解;对于已经进入目的地的棋子,如果棋子位于目的地的内层(最后一层和倒数第二层,共是三个位置),则不移动该棋子;如果棋子位于目的地外层(倒数第三层和倒数第四层,共7个位置)且可以一步到达内层,则将该走法作为该棋子的最优解。

S2:从所有棋子中选出最优棋子进行走步,具体包括步骤:

S21:判断尚未进入目的区域的棋子是否大于2,如为是,则执行步骤S22,若为否,则执行步骤S24;

S22:根据棋子所处位置生成位置权重w2,其中棋子位置距离目的区域越远,位置权重w2越大;

S23:合成w1和w2得到棋子权重w(该过程可以是将w1和w2相加得到w),并选取棋子权重最大的棋子作为最优棋子进行走步;

S24:在预设棋谱列表中搜索对应的最优棋子,例如,该模型的选子过程分为两步,第一是预处理过程,已经在营地内的棋子必须满足靠后的三个位置占满,才能保证还未进营的棋子能正常跳入目的地。因此,先挪动已经进入目的地的棋子,直到最深的三个位置被填充。

网络模块是基于Photon Networking实现的。Photon Networking是通过Photon Cloud进行Unity多玩家游戏开发的一个库,为网络游戏提供可靠的信息交流。其服务器遍及全球,比官方的Unity Networking网络引擎覆盖率更高。二者的一个关键区别在于,Unity Networking把其中一个客户设置成服务器,而Photon Network使用专用的服务器,从而防止一名玩家退出导致其他玩家全部掉线的情况。

一、加入游戏

在Unity工程中嵌入Photon Networking提供的密钥之后,从该工程建立的应用程序都可以进入到同一个游戏大厅(Lobby)。通过密钥可以保证与其他游戏互不干扰,并且同一个游戏的所有玩家都有交互的机会,就像拥有了一个该游戏专用的服务器一样。

二、进出房间

进入大厅之后我们为玩家显示房间列表,包括房间的名称以及每个房间的属性(玩家人数、游戏模式等等)。玩家可以自己选择加入某个房间,或者创建一个新的房间。

创建房间的同时玩家可以选择房间人数和游戏模式。进入房间以后,通过PhotonNetwork.room可以获取或设置房间的各种属性,包括当前房间内的人数,控制房间的开关等等。

Photon Network提供了一系列的借口函数用来进出房间、响应进入大厅、进入房间等事件。在第一个玩家创建并进入房间之后,需要马上设置房间的最大人数,与玩家的选择相匹配。这时就可以在OnJoinedRoom()这个函数里面进行设置,该函数在进入房间时立即调用。进入一个房间后,玩家可以通过按钮选择离开,这时只要调用LeaveRoom()即可。这些接口在继承了Photon.PunBehaviour的类当中都可以得到。使用Photon Network时必须要定义这样一个类的脚本,并把他放到任意一个物体上。在我们的项目中创建了一个RadomMatchmaker.cs脚本,并把他附在一个名为NetworkManger的空物体上。

三、玩家交互与同步

实现玩家的交互与同步是最重要的一个环节。由于棋子数目较多,动作频率高,以及游戏中的一些随机事件,让同步变得困难。我们想了很多办法才解决了这个问题。

首先,要通过Photon Networking同步信息必须有一个配置了Photon Network View游戏模块的物体。该物体需要在运行时实例化。在我们的游戏中,创建了一个名为port的预制件(prefab),并给他配备上Photon Network View。

每个玩家还有一个Photon Stream,Photon Network View会观察一个物体某些属性的变化,并实时把这些变化写到Photon Stream上,其他玩家从自己的Photon Stream上可以接受到这些信息,从而做出各种反应。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1