MMORPG大型游戏设计与开发(服务器 AI 逻辑设定和状态结点)
人工智能(AI)中往往都会有这么一个问题,那就是我要做什么?我该怎么做?我需要什么?所以这里所谓的智能就是赋予AI对象的判断力,以及它根据判断得到的相应反应。就好比,你去商店买东西,钱够别人才卖给你,不够不可能卖你,这里就会触发了两种结果,如果你要强买的话,那么店员就可能产生相应的措施了。其实这里的店员,就相当于我们所谓的人工智能,不过店员的反应和动作是根据他自身思考产生的,人工智能也有这个思考的过程,只不过比店员想的少很多。这个思考的过程,也就是逻辑设定与处理的过程,那么什么又是状态结点呢?
游戏截图


逻辑设定(logic)
1、内部接口
创建(setup)
逻辑设定初始化,初始化对应的类型,根据传入的脚本ID中的创建方法。
获得动作(get action)
根据动作的ID查找对应的动作指针,注意这里的动作列表是逻辑设定对象中的数据。
获得状态(get state)
根据状态查找对象状态表中对应的状态数据指针。
获得初始化状态(get init state)
获得初始化设置的状态。
获得脚本ID(get script id)
获得当前的脚本ID。
调用动作(call action)
根据角色的对象指针,以及动作处理,调用脚本相应的方法,并返回下一个动作。
2、lua接口
创建动作(new action)
在lua中传入两个参数:动作ID和动作的键(回调),根据这两个参数将动作加入到管理器中。
增加状态(new state)
从lua中传入一个状态,并加入到状态表中。
设置初始化状态(set init state)
脚本中传入一个状态,并将该状态设置为初始状态。
注册用户动作(register user action)
两个参数:动作回调的key,动作回调的方法字符串,并将这两个数据加入到用户动作表中。
状态结点(state)
1、内部接口
获得事件回调(get event handler)
输出状态信息(print state info)
2、lua接口
处理事件(handle event)
算法(矩阵算法)
反螺旋矩阵
code.
#include <stdio.h>
#include <stdint.h> /**
* 反螺旋矩阵
* 例如:5x5的反螺旋矩阵
*
* - 0 1 2 3 4 ---- 作为列序号
* ————————————————————
* 0 | 1 16 15 14 13
* 1 | 2 17 24 23 12
* 2 | 3 18 25 22 11
* 3 | 4 19 20 21 10
* 4 | 5 6 7 8 9
* |
* |
* 作为行序号
*
* 根据行与列,可以将这样的矩阵视作array[5][5]的数组
* 首先我们要知道反螺旋的规则,就是从某一点开始以1开始逆时针方向依次增加1
* 其次我们都知道螺旋,分为一圈圈的,那么一个螺旋就有其圈数,与圆形不同的是矩阵
* 分为4个方向,分别为上、左、下、右(组成一圈的数据)
* 再来从数据递增的方向分析序号的规则
* 左边:行号依次递增为1,列号不变
* 下边:列号依次递增为1,行号不变
* 右边:行号依次递减为1,列号不变
* 上边:列号依次递减为1,行号不变
* 如果定义行号为i,列号为j,圈数为k的话,那么这三个数据在每圈是不是都有相似的规则呢?
* 首先我们需要确定圈数,其与矩阵的大小有关,即如果是NxN的矩阵的话,圈数m=(N + 1) / 2
* 有了圈数,我们才好确定我们需要几次循环来组成每圈的数据
* 我们将最外层的一圈的圈数设置为0,让其循环到最后一圈即k - 1为止
* 假设数据的变量为value,从1开始
* 数据从1开始从最外层一次加1,并依次从左、下、右、上形成圈的数据,到最后一层为止
* 左边的数据规律:行的序号从圈数k开始,依次累加1,列号等于圈数k
* for (i = k; i < n - k; ++i) array[i][k] = value++;
* 下边的数据规律:列号从圈数k+1开始,循环到小于数据n - k为止,其行数为n - k - 1
* for (j = k + 1; j < n - k; ++j) array[n - k - 1][j] = value++;
* 左边的数据规律:行号从n - k - 2开始,依次循环到不小于k为止,其列数为n - k - 1
* for (i = n - k - 2; i <= k; --i) array[i][n - k - 1] = value++;
* 上边的数据规律:列号从n - k - 2开始,依次循环到k,其行数为k
* for (j = n - k - 2; j > k; --j) array[k][j] = value++;
*/ #define ARRAY_MAX 100 //最大支持的矩阵数 //生成矩阵
void generate_array(int32_t array[ARRAY_MAX][ARRAY_MAX], int32_t length);
//打印矩阵
void display_array(int32_t array[ARRAY_MAX][ARRAY_MAX], int32_t length); void generate_array(int32_t array[ARRAY_MAX][ARRAY_MAX], int32_t length) {
int32_t i, j, k;
int32_t value, circle_count;
value = ;
int32_t &n = length;
circle_count = (n + ) / ;
for (k = ; k < circle_count; ++k) {
for (i = k; i < n - k; ++i) array[i][k] = value++; //left
for (j = k + ; j < n - k; ++j) array[n - k - ][j] = value++; //bottom
for (i = n - k - ; i >= k; --i) array[i][n - k - ] = value++; //right
for (j = n - k - ; j > k; --j) array[k][j] = value++; //top
}
} void display_array(int32_t array[ARRAY_MAX][ARRAY_MAX], int32_t length) {
int32_t i, j;
for (i = ; i < length; ++i) {
for (j = ; j < length; ++j) printf("%4d", array[i][j]);
printf("\n");
}
}; int32_t main(int32_t argc, char *argv[]) {
int32_t n = ;
int32_t array[ARRAY_MAX][ARRAY_MAX];
while (n <= || n > ARRAY_MAX) {
printf("please input a unsigned int number(less than 0 and not above %d): ",
ARRAY_MAX);
scanf("%d", &n);
}
generate_array(array, n);
printf("the anti spiral array is: \n");
display_array(array, n);
return ;
}
result.

成员招募(长期有效)
如果你也对开源知识比较感兴趣,如果也对网络应用或者网络游戏感兴趣,如果你也对该框架感兴趣,你可以加入我们的QQ群(348477824)。
欢迎大家进群相互交流学习,同时也欢迎各位朋友对该框架供出自己的一份心力。
plain framework 商业版核心成员招募
请加入上面的框架QQ群,商业版核心成员的招募资格和形式将以博客或者文档等的形式公布(14年内确认人选)。
MMORPG大型游戏设计与开发(服务器 AI 逻辑设定和状态结点)的更多相关文章
- MMORPG大型游戏设计与开发(服务器 AI 概述)
游戏世界中我们拥有许多对象,常见的就是角色自身以及怪物和NPC,我们可以见到怪物和NPC拥有许多的行为,比如说怪物常常见到敌对的玩家就会攻击一样,又如一些NPC来游戏世界中走来走去,又有些怪物和NPC ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 核心详述)
核心这个词来的是多么的高深,可能我们也因为这个字眼望而却步,也就很难去掌握这部分的知识.之所以将核心放在最前面讲解,也可以看出它真的很重要,希望朋友们不会错过这个一直以来让大家不熟悉的知识,同我一起进 ...
- MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)
我们在玩游戏的时候,我们进入游戏后第一眼往往都是看到游戏世界中的场景,当然除了个别例外,因为那些游戏将游戏场景隐藏了起来,如文字游戏中的地点一样.既然我们接触了游戏世界的核心,那么作为核心的场景又包括 ...
- MMORPG大型游戏设计与开发(概述)updated
1.定义 MMORPG,是英文Massive(或Massively)Multiplayer Online Role-PlayingGame的缩写,即大型多人在线角色扮演游戏. 2.技术与知识 在这系列 ...
- MMORPG大型游戏设计与开发(UI SYSTEM SHOW)
接下来一段时间,这些文件可能不再更新,期间我会学习和掌握一些前端知识.虽然我非常欣赏剑侠网络版叁和九阴真经的画面,但是那是一个庞大的游戏引擎,一般人是无法窥伺的,除非你是天才而且要拥有机器毫无中断的毅 ...
- MMORPG大型游戏设计与开发(客户端架构 part8 of vegine)
脚本模块是游戏设计中争论比较多的话题,那是因为作为脚本本身所带来的利弊.其实这都无关紧要,取舍是人必须学会的一项技能,如果你不会取舍那么就让趋势给你一个满意的答复.自从魔兽世界以及传奇(世界)问世以来 ...
- MMORPG大型游戏设计与开发(服务器 AI 基础接口)
一个模块都往往需要统一的接口支持,特别是对于非常大型的模块,基础结构的统一性非常重要,它往往决定了其扩展对象的通用性.昨天说了AI的基本概述以及组成,作为与场景模块中核心一样重要的地位,基础部分的设计 ...
- MMORPG大型游戏设计与开发(服务器 AI 事件)
AI中的事件与场景中的事件大致相同,都是由特定的条件触发的.只不过AI的事件与其他事件不同的是,对于AI的事件往往是根据不同的AI类型,和动态的触发条件下才产生的.其实不管AI多么智能,它对应的触发条 ...
- MMORPG大型游戏设计与开发(服务器 AI 控制器)
上一篇我们说了基础接口的组成,想必大家对AI中的基础方法有了一定的了解,而基础接口只能一个通用的,要实现不同的类别还需子类中实现,这就形成了玩家.主动.被动.木桩这些类型.不同类型的AI需要有一个统一 ...
随机推荐
- php登录注册页面及加载
php注册界面 <h1>注册页面</h1> <form acti ...
- SELECT TOP 1 比不加TOP 1 慢的原因分析以及SELECT TOP 1语句执行计划预估原理
本文出处:http://www.cnblogs.com/wy123/p/6082338.html 现实中遇到过到这么一种情况: 在某些特殊场景下:进行查询的时候,加了TOP 1比不加TOP 1要慢(而 ...
- 用CIL写程序:写个函数做加法
前言: 上一篇文章小匹夫为CIL正名的篇幅比较多,反而忽略了写那篇文章初衷--即通过写CIL代码来熟悉它,了解它.那么既然有上一篇文章做基础(炮灰),想必各位对CIL的存在也就释然了,兴许也燃起了一点 ...
- ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化
原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...
- 高分辨率下IE浏览器缩放导致出现右侧滚动条问题的解决
0 问题描述 由于需要演示触控操作,采购了SurfacePro,SurfacePro的推荐分辨率为2736×1824,且默认缩放比例为200%,IE浏览器的默认缩放比例也是200%,这样就导致右侧出现 ...
- C#设计模式之简单工厂模式(Simple Factory)
1. 概述 简单工厂模式就是将一个类的实例化交给一个静态工厂来执行. 2. 使用频率 中 3. 模式结构 3.1 机构图 3.2 模式中的角色 Product:抽象类,把具体产品类公共的代码进行抽象和 ...
- json显示日期带T问题的解决方法
此问题是由Newtonsoft.Json转换json导致的: Newtonsoft.Json产生的默认日期时间格式为: IsoDateTimeConverter 格式 解决方法: 需要引用下面的命名空 ...
- python之最强王者(3)——变量,条件、循环语句
1.Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的 ...
- 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]
如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...
- CodeSmith7 系列 破解教程
CodeSmith[点此下载] 学过三层的人应该认识CodeSmith Generator吧,今天我就跟大家一起探讨下CodeSmith Generator 7.0.2的激活,这最新版本破解的难度也是 ...