MMORPG大型游戏设计与开发(服务器 游戏场景 动态场景与副本)
场景的内容讲解到今天算是暂时划上一个句号了,接下来为大家讲解的是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大型游戏设计与开发(服务器 游戏场景 动态场景与副本)相关推荐
- 游戏设计与开发_Unity游戏开发——设计模式概述
0.前言 这一系列的文章其实应该算作几本书和一些资料总结的笔记,是有关设计模式与游戏开发之间的应用.笔者将阅读学习过程中的思考和总结记录下来,也希望能提供给同样在这方面有疑问的朋友一些帮助. 1.设计 ...
- 《基于Unity的2D多人乱斗闯关游戏设计与开发》--小组博客综述
文章目录 项目名称 项目背景 项目简介 项目架构 项目特色 大致功能需求 游戏模式/内容 项目技术选型 项目分工 项目具体计划 此次项目实训不完全按照项目计划书进行,因为游戏范围太广,可能随时调整游戏 ...
- 基于android的2048游戏设计,基于Android平台的2048游戏设计与开发.docx
基于Android平台的2048游戏设计与开发 高级操作系统论文(设计) 题 目 基于Android个人2048 小游戏的设计与开发姓 名 学 号 院. 系 信息学院 专 业 指导教师 职称(学历)目 ...
- 基于Java多线程的打怪升级类游戏设计与开发
摘要:本文论述了通过JAVA多线程.基于JAVA Swing的GUI图形用户界面设计.IO输入输出流.JDBC技术,实现了游戏系统的UI设计.游戏数据的存储.关卡的设置.用户头像的上传与更改.游戏数据 ...
- java俄罗斯方块ppt_基于Java俄罗斯方块游戏设计与开发PPT.ppt
基于Java俄罗斯方块游戏设计与开发PPT 基于Java的俄罗斯方块游戏的设计与实现 答 辩 人:xxx 学 号:201012120201 指导老师:xxx副教授 专 业:网络工程 学 院:信息科学与 ...
- 美国计算机游戏设计专业排名,美国游戏设计专业大学排名TOP5推荐!
首先明确的是游戏产业的就业前景还是非常好的,尤其是美国,游戏领域方向是游戏设计留学大多数人都会选择的国家,因为美国的游戏专业是比较强的.今天,美行思远小编就来和大家简单推荐一下美国游戏设计专业大学排名 ...
- c/c++游戏逆向驱动开发,游戏辅助保护盾
功能介绍: 1.降低游戏权限,提升游戏权限,禁止游戏后台截图. 2.保护进程,隐藏进程,进程内存不被读取. 如图: 部分功能展示: //程序降权 NTSTATUS ChangeHandleAccess ...
- 扫雷程序设计Android答辩,基于QT的扫雷游戏设计与实现扫雷游戏答辩.ppt
基于QT的扫雷游戏设计与实现扫雷游戏答辩.ppt 程序设计 基于QT语言的扫雷游戏,答辩学生,一.分析扫雷游戏的基本功能,1.从外观上分析 方块 笑脸 计时器 有雷标识 无雷标识 胜利画面 失败画面, ...
- Silverlight开发MMORPG大型多人在线角色扮演游戏(团队项目)
MMORPG,是英文"Massive Multiplayer Online Role Playing Game"的缩写,意为"大型多人在线角色扮演游戏".是电脑 ...
最新文章
- Ubuntu16.04 pip3 install 报错 working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
- IOS - 设置与帮助界面
- OSPF详解-2 区域结构
- C/S框架网介绍|.NET快速开发平台|Winform开发框架
- Linux硬盘分区的格式化
- boost::graph模块实现bfs算法的测试程序
- 利用反射获得委托和事件以及创建委托实例和添加事件处理程序
- RuntimeError: readexactly() called while another coroutine is already waiting for incoming data
- mysql中decimal与float_MySQL float 与decimal 各中的区别。
- [leedcode 52] N-Queens II
- 电路结构原理_精密半波、全波整流电路结构原理图解
- linux驱动开发框架
- linux python守护进程编写
- 判断单链表中的元素是否递增_判断某单链表l总的元素是否是递增的算法
- mysql varbinary 插入_Mysql中如何插入VarBinary二进制类型?
- 不看后悔!史上最全面的电力系统150+90问!——电力巡检篇
- 迪文屏DMT12800K070_A2WTC踩坑实录(二)
- 梦想cms-v1.4-后台存在任意文件读取漏洞
- java牛客网输入输出
- Oracle数据库各版本下载(迅雷复制粘贴直接下载,别进目录)