场景的内容讲解到今天算是暂时划上一个句号了,接下来为大家讲解的是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; //入口场景IDint32_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 != 0) {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 0;
}

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[16];printf("please input a int number: ");scanf("%d", &x);n = 1;while (x != 0) {array[n] = x % 2;x = x /2;++n;}printf("binary value: ");for (i = n - 1; i >= 1; --i)printf("%d", array[i]);printf("\n");return 0;
}

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[16], m, m0, x = 2, i = 0, j;printf("please input a number you want decompose: ");scanf("%d", &m0);m = m0;while (m != 1) {while (0 == (m % x)) {++i;array[i] = x;m = m /x;}++x;}printf("decompose result: %d = ", m0, i);for (j = 1; j < i; ++j)printf("%d*", array[j]);printf("%d", array[i]);printf("\n");return 0;
}

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 != 1) {if (0 == (x % 2)) { //偶数x /=2;printf("->%d", x);} else {x = x * 3 + 1;printf("->%d", x);}}printf("\n");return 0;
}

result.

总结

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

plain framework成员招募QQ群:348477824

转载于:https://www.cnblogs.com/lianyue/p/4097384.html

MMORPG大型游戏设计与开发(服务器 游戏场景 动态场景与副本)相关推荐

  1. 游戏设计与开发_Unity游戏开发——设计模式概述

    0.前言 这一系列的文章其实应该算作几本书和一些资料总结的笔记,是有关设计模式与游戏开发之间的应用.笔者将阅读学习过程中的思考和总结记录下来,也希望能提供给同样在这方面有疑问的朋友一些帮助. 1.设计 ...

  2. 《基于Unity的2D多人乱斗闯关游戏设计与开发》--小组博客综述

    文章目录 项目名称 项目背景 项目简介 项目架构 项目特色 大致功能需求 游戏模式/内容 项目技术选型 项目分工 项目具体计划 此次项目实训不完全按照项目计划书进行,因为游戏范围太广,可能随时调整游戏 ...

  3. 基于android的2048游戏设计,基于Android平台的2048游戏设计与开发.docx

    基于Android平台的2048游戏设计与开发 高级操作系统论文(设计) 题 目 基于Android个人2048 小游戏的设计与开发姓 名 学 号 院. 系 信息学院 专 业 指导教师 职称(学历)目 ...

  4. 基于Java多线程的打怪升级类游戏设计与开发

    摘要:本文论述了通过JAVA多线程.基于JAVA Swing的GUI图形用户界面设计.IO输入输出流.JDBC技术,实现了游戏系统的UI设计.游戏数据的存储.关卡的设置.用户头像的上传与更改.游戏数据 ...

  5. java俄罗斯方块ppt_基于Java俄罗斯方块游戏设计与开发PPT.ppt

    基于Java俄罗斯方块游戏设计与开发PPT 基于Java的俄罗斯方块游戏的设计与实现 答 辩 人:xxx 学 号:201012120201 指导老师:xxx副教授 专 业:网络工程 学 院:信息科学与 ...

  6. 美国计算机游戏设计专业排名,美国游戏设计专业大学排名TOP5推荐!

    首先明确的是游戏产业的就业前景还是非常好的,尤其是美国,游戏领域方向是游戏设计留学大多数人都会选择的国家,因为美国的游戏专业是比较强的.今天,美行思远小编就来和大家简单推荐一下美国游戏设计专业大学排名 ...

  7. c/c++游戏逆向驱动开发,游戏辅助保护盾

    功能介绍: 1.降低游戏权限,提升游戏权限,禁止游戏后台截图. 2.保护进程,隐藏进程,进程内存不被读取. 如图: 部分功能展示: //程序降权 NTSTATUS ChangeHandleAccess ...

  8. 扫雷程序设计Android答辩,基于QT的扫雷游戏设计与实现扫雷游戏答辩.ppt

    基于QT的扫雷游戏设计与实现扫雷游戏答辩.ppt 程序设计 基于QT语言的扫雷游戏,答辩学生,一.分析扫雷游戏的基本功能,1.从外观上分析 方块 笑脸 计时器 有雷标识 无雷标识 胜利画面 失败画面, ...

  9. Silverlight开发MMORPG大型多人在线角色扮演游戏(团队项目)

    MMORPG,是英文"Massive Multiplayer Online Role Playing Game"的缩写,意为"大型多人在线角色扮演游戏".是电脑 ...

最新文章

  1. Ubuntu16.04 pip3 install 报错 working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
  2. IOS - 设置与帮助界面
  3. OSPF详解-2 区域结构
  4. C/S框架网介绍|.NET快速开发平台|Winform开发框架
  5. Linux硬盘分区的格式化
  6. boost::graph模块实现bfs算法的测试程序
  7. 利用反射获得委托和事件以及创建委托实例和添加事件处理程序
  8. RuntimeError: readexactly() called while another coroutine is already waiting for incoming data
  9. mysql中decimal与float_MySQL float 与decimal 各中的区别。
  10. [leedcode 52] N-Queens II
  11. 电路结构原理_精密半波、全波整流电路结构原理图解
  12. linux驱动开发框架
  13. linux python守护进程编写
  14. 判断单链表中的元素是否递增_判断某单链表l总的元素是否是递增的算法
  15. mysql varbinary 插入_Mysql中如何插入VarBinary二进制类型?
  16. 不看后悔!史上最全面的电力系统150+90问!——电力巡检篇
  17. 迪文屏DMT12800K070_A2WTC踩坑实录(二)
  18. 梦想cms-v1.4-后台存在任意文件读取漏洞
  19. java牛客网输入输出
  20. Oracle数据库各版本下载(迅雷复制粘贴直接下载,别进目录)

热门文章

  1. SQL Server 语法大全
  2. python及格率公式_python案例----学生管理系统(实现学员的增删改查功能)
  3. Mac scp文件传输
  4. 找一个机器学习的工作,学历重要吗?
  5. 【电子电路入门】电阻、电容、电感...
  6. Java的instanceof关键字
  7. 长时间居家度过疫情的经验
  8. python创建sqlite3数据库_Python连接SQLite数据库
  9. Git 的安装以及环境配置
  10. 使用QT绘制直线【DDA算法】