场景的内容讲解到今天算是暂时划上一个句号了,接下来为大家讲解的是AI部分(大型AI),如果有兴趣的朋友不妨持续关注这些文章,大家一起学习和进步。动态场景和副本是场景中特殊的类型,副本在这里想必已经是无人不知无人不晓的,那么动态场景又是什么样的呢?

游戏截图

副本(管理器)

1、初始化(init)

副本管理器数据初始化。

2、数据选择(select scene)

根据传入的数据获得副本的创建者,并判断副本创建者关联的场景数据是否正确,再根据场景类型加入到副本场景节点列表中。

3、放入场景节点(push node)

将场景节点的数据放入到场景节点中。

4、弹出场景节点(pop node)

将场景节点数据弹出节点列表。

5、心跳(heart beat)

主要是弹出场景信息,并装载该场景数据进行处理,并向中心数据服务器发送消息。

动态场景

动态场景就如其名字一样是动态的,也就是说场景本身可能被改变,举个例子来说一间破土屋一下子变成了豪门大院。动态场景可以被创建,同时可能被销毁,与副本不同的是动态场景有存储的过程,一旦动态场景创建之后所有数据将被保存在服务器中,直到进行了删除操作。在天龙八部OL中动态场景的表现主要在城市的数据,即帮派城市上。

1、数据

typedef struct citynode_struct {
scene::Base *scene; //场景指针
int16_t port_sceneid; //入口场景ID
int32_t player_guid; //玩家GUID
} citynode_t; //城市节点数据结构 typedef struct loadnode_struct {
int16_t scene_datatype; //场景数据类型
citynode_t citydata;
} loadnode_t; //节点加载结构

2、管理器

1. 初始化(init)

动态场景数据初始化。

2. 数据选择(select scene)

从场景配置文件中加载场景数据,需要符合城市数据的规则才能被正常加入到管理器中。

3. 放入场景节点(push node)

将场景节点的数据放入到节点列表中。

4. 弹出场景节点(pop node)

将场景节点的数据弹出节点列表。

5. 心跳(heat beat)

循环弹出处理节点列表中的数据,主要是场景数据的加载,以及向中心数据服务器请求场景数据。

算法(精确迭代法)

1、最大公约数和最大公倍数

code.

#include <stdio.h>
#include <inttypes.h> /**
* 精确迭代法指的是通过迭代可以得到一个精确的解
*/ /**
* 求两个正整数的最大公约数和最大公倍数
* 利用辗转相除法求最大公约数,然后根据最大公约数得到最小公倍数
* 假如这两个正整数是M和N
* 1 用M对N求余,余数记作R,即R = M % N
* 2 将除数作为被除数,余数作为除数求新的余数,即M = N, N = R
* 3 重复执行步骤2,直到余数为0为止
*/ int32_t main(int32_t argc, char *argv[]) {
int32_t m, n, m1, n1, r;
printf("please input two int nuber: ");
scanf("%d,%d", &m, &n);
m1 = m;
n1 = n;
r = m % n;
while (r != ) {
m = n;
n = r;
r = m % n;
}
printf("%d and %d max common divisor is: %d\n", m1, n1, n);
printf("%d and %d min common multiple is: %d\n", m1, n1, m1 * n1 / n);
return ;
}

result.

2、十进制转二进制

code.

#include <stdio.h>
#include <inttypes.h> /**
* 十进制转二进制
* 1 将该数除以2,得到商和余数。
* 2 将商作为被除数,并除以2,得到新的商和余。
* 3 重复执行步骤2,直到商为0为止。将余数反向排列即为所求。
*/ int32_t main(int32_t argc, char *argv[]) {
int32_t i, n, x, array[];
printf("please input a int number: ");
scanf("%d", &x);
n = ;
while (x != ) {
array[n] = x % ;
x = x /;
++n;
}
printf("binary value: ");
for (i = n - ; i >= ; --i)
printf("%d", array[i]);
printf("\n");
return ;
}

result.

3、质因数分解

code.

#include <stdio.h>
#include <inttypes.h> /**
* 质数:除了1乘以自身以外不能再分解为其他两个或两个以上相乘的数。(个人理解)
*/ /**
* 质因数分解
* 假如待分解的整数为M,则分解过程如下:
* 1 如果M不等于1,则从x = 2开始,让M除以x,如果能够被整除,则x是其中的一个因子,将
* x存入数组array中,并用商代替M。
* 2 如果M能被x整除,转到步骤1执行,否则x增加1。
* 3 如果M不为1, 则转步骤1执行,否则算法结束。
*/ int32_t main(int32_t argc, char *argv[]) {
int32_t array[], m, m0, x = , i = , j;
printf("please input a number you want decompose: ");
scanf("%d", &m0);
m = m0;
while (m != ) {
while ( == (m % x)) {
++i;
array[i] = x;
m = m /x;
}
++x;
}
printf("decompose result: %d = ", m0, i);
for (j = ; j < i; ++j)
printf("%d*", array[j]);
printf("%d", array[i]);
printf("\n");
return ;
}

result.

4、谷角猜想

code.

#include <stdio.h>
#include <inttypes.h> /**
* 谷角猜想:
* 前提是对象是一个自然数。
* 任何偶数一直除以2,经过有限次之后总能得到1;任何奇数乘以3 + 1后一直除以2,经过
* 有限次数后也能得到1。
*/ int32_t main(int32_t argc, char *argv[]) {
int32_t x;
printf("please input a unsigned int number: ");
scanf("%d", &x);
printf("the gujiao process every number: \n%d", x);
while (x != ) {
if ( == (x % )) { //偶数
x /=;
printf("->%d", x);
} else {
x = x * + ;
printf("->%d", x);
}
}
printf("\n");
return ;
}

result.

总结

这是场景讲解的最后一篇,已经将场景大部分的内容进行了一边粗略的讲解,不过设计很灵活,规则由人去运用,所以不需要生搬硬套。再次感谢各位读者的关注,我会不定期更新这些文章,使之更为成熟和严谨。顺便为自己的框架来个广告,一个设计的核心往往需要核心的底层支持,简约框架就是基于此为了方便和快捷而产生的。

plain framework成员招募QQ群:348477824

MMORPG大型游戏设计与开发(服务器 游戏场景 动态场景与副本)的更多相关文章

  1. MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)

    我们在玩游戏的时候,我们进入游戏后第一眼往往都是看到游戏世界中的场景,当然除了个别例外,因为那些游戏将游戏场景隐藏了起来,如文字游戏中的地点一样.既然我们接触了游戏世界的核心,那么作为核心的场景又包括 ...

  2. MMORPG大型游戏设计与开发(服务器 AI 概述)

    游戏世界中我们拥有许多对象,常见的就是角色自身以及怪物和NPC,我们可以见到怪物和NPC拥有许多的行为,比如说怪物常常见到敌对的玩家就会攻击一样,又如一些NPC来游戏世界中走来走去,又有些怪物和NPC ...

  3. MMORPG大型游戏设计与开发(概述)updated

    1.定义 MMORPG,是英文Massive(或Massively)Multiplayer Online Role-PlayingGame的缩写,即大型多人在线角色扮演游戏. 2.技术与知识 在这系列 ...

  4. MMORPG大型游戏设计与开发(客户端架构 part8 of vegine)

    脚本模块是游戏设计中争论比较多的话题,那是因为作为脚本本身所带来的利弊.其实这都无关紧要,取舍是人必须学会的一项技能,如果你不会取舍那么就让趋势给你一个满意的答复.自从魔兽世界以及传奇(世界)问世以来 ...

  5. MMORPG大型游戏设计与开发(服务器 游戏场景 地图和区域)

    地图的数据以及区域的信息是场景的重要组成部分,这些数据同时存在客户端和服务器,而且都是由编辑器生成的.那么保存的文件数据结构是怎样的?一张3D的场景地图又是怎样处理这些数据的?同时告诉大家这里同样只是 ...

  6. MMORPG大型游戏设计与开发(服务器 游戏场景 多线程)

    多线程在随着cpu发展应用的是越来越多,游戏场景因为其在服务器所占的数据量与逻辑复杂度的原因必须依赖于它.为什么场景要采用多线程?场景的线程是怎样的?场景的线程又是如何创建的?场景的线程又是怎样管理的 ...

  7. MMORPG大型游戏设计与开发(服务器 游戏场景 核心详述)

    核心这个词来的是多么的高深,可能我们也因为这个字眼望而却步,也就很难去掌握这部分的知识.之所以将核心放在最前面讲解,也可以看出它真的很重要,希望朋友们不会错过这个一直以来让大家不熟悉的知识,同我一起进 ...

  8. MMORPG大型游戏设计与开发(服务器 AI 事件)

    AI中的事件与场景中的事件大致相同,都是由特定的条件触发的.只不过AI的事件与其他事件不同的是,对于AI的事件往往是根据不同的AI类型,和动态的触发条件下才产生的.其实不管AI多么智能,它对应的触发条 ...

  9. MMORPG大型游戏设计与开发(服务器 AI 基础接口)

    一个模块都往往需要统一的接口支持,特别是对于非常大型的模块,基础结构的统一性非常重要,它往往决定了其扩展对象的通用性.昨天说了AI的基本概述以及组成,作为与场景模块中核心一样重要的地位,基础部分的设计 ...

随机推荐

  1. 万能的SqlHelper,麻麻再也不用担心用什么数据库了

    以前只用一种数据库,倒也无所谓,但是再数据库切换的时候,发现代码差不多呀. 最初,两种数据库,大不了写两个SqlHelper,但是多了也就发现代码重用率太低了吧. 因此,下面的SqlHelper诞生了 ...

  2. Z.ExtensionMethods 一个强大的开源扩展库

    今天有意的在博客园里面搜索了一下 Z.ExtensionMethods 这个扩展类库,确发现只搜到跟这个真正相关的才两篇博文而已,我都点进去看了一下,也都只是提到而已,没有专门介绍,才引起我写这篇文档 ...

  3. [WCF编程]10.操作:回调操作

    一.回调操作概述 WCF支持服务将调用返回给它的客户端.在回调期间,许多方面都将颠倒过来:服务将成为客户端,客户端将编程服务.回调操作可以用在各种场景和应用程序中,但在涉及事件或者服务发生时间需要通知 ...

  4. 基于小脚丫DDS 调频 调幅 调相 切换波形 AD5601输出模拟波形

    先讲讲里面的矩阵键盘,矩阵键盘列有下拉电阻,默认全为0000,默认行输入为1111,当有按键按下的时候,列输入会被拉高,这时控制行的输出做行扫描,电子琴用key_flag_r0电平作为使能,这里用ke ...

  5. Cats(2)- Free语法组合,Coproduct-ADT composition

    上篇我们介绍了Free类型可以作为一种嵌入式编程语言DSL在函数式编程中对某种特定功能需求进行描述.一个完整的应用可能会涉及多样的关联功能,但如果我们为每个应用都设计一套DSL的话,那么在我们的函数式 ...

  6. MongoDB主从复制(主从集群 )

    1.简介 主从复制是MongoDB最常用的复制方式.这种方式非常灵活,可用于备份.故障恢复.读扩展等. 最基本的设置方式就是建立一个主节点和一个或者多个从节点,每个从节点要知道主节点的地址.运行mon ...

  7. MySQL 5.7:非结构化数据存储的新选择

    本文转载自:http://www.innomysql.net/article/23959.html (只作转载, 不代表本站和博主同意文中观点或证实文中信息) 工作10余年,没有一个版本能像MySQL ...

  8. css知多少(12)——目录

    <css知多少>系列就此完结了.常来光顾的朋友可能会觉得突然:css的知识点还有很多,怎么突然就完了,还没讲完呢?这样说是对的.不过凡事都有一个定位,如果盲目求多,定位模糊,那样就没有目的 ...

  9. JS中的函数(二):函数参数(你可能不知道的参数传递)

    前言: 函数分为有参有返回值,有参无返回值,无参无返回值,无参有返回值:那么对于无参数的函数你想使用函数的调用怎么办呢?如果你想封装一个代码,实现多种功能,但是形参大于实参或者实参大于形参又该如何?本 ...

  10. 使用 Jquery-UI 实现一次拖拽多个选中的元素操作

    项目需要,实现一个拖放操作,要求每次可以拖拽选中的多个元素,释放到目标容器后可排序.考虑了一下,觉得jquery-ui比较合适,毕竟它提供了项目需要的交互性事件机制.拖拽.释放.排序.选择等效果.而在 ...