![](https://img-blog.csdnimg.cn/direct/08cba14fe06a42bc863b42f9b0a60eda.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
从零开始MMO游戏
文章平均质量分 67
从零开始MMO游戏
专业的程序员
十五年开发经验,10年互联网老兵,曾担任旺旺集团核心开发课副课长兼架构师,在多家互联网企业中担任架构师、开发组长等职位。常年奋战在微服务、高并发、低代码一线,喜欢钻研技术,喜欢分享经验
展开
-
从零开始手写mmo游戏从框架到爆炸(二十七)— 英雄属性展示及穿戴装备-1
本章我们把命令行客户端与后台串起来,并完成穿戴装备的功能。原创 2024-02-28 13:59:01 · 662 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(二十六)— 装备、金币、经验的掉落与获取二
上一章我们完成了装备金币和经验掉落的计算,这一章我们来完成装备、金币与经验的获取。这里我们先改造英雄封装 - HeroWrapper。改造BattleEngine中获取经验、金币和物品的方法。分支:step-13。原创 2024-02-28 10:41:27 · 248 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(二十五)— 装备、金币、经验的掉落与获取一
装备已经可以通过模板生成出来了,但是正式使用过程中,应该是根据野怪的等级、品质、还有地图等级等等来随机获得装备。掉落装备的同时也应该同时掉落金币。金币的作用就不用多说了。原创 2024-02-27 09:19:24 · 533 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(二十四)— 装备系统二
大概解释一下就是根据野怪的等级找到可获得的装备模板列表,再根据品质去获得属性的浮动,品质越高浮动越小,这样品质高的武器将有机会获得更高的属性加成。分支:step-12。原创 2024-02-27 09:19:02 · 940 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(二十三)— 装备系统一
下一步,就是要考虑经验、金币、和装备掉落的问题。经验金币都好说,装备系统是目前需要考虑的问题。为了简化我们把装备分成武器、胸甲两个部位,后期可以慢慢扩展。此时我们还是需要装备模板。这个功能和之前的野怪模板、地图模板差不多。原创 2024-02-26 15:32:15 · 937 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(二十二)— 战斗系统三
其中大部分上一章已经基本讲过了,大家对着gitee上的分支源码来看即可,我们重点关注地图已经搜寻野怪的代码。地图中存储了野怪的等级已经出现的概率。)中,客户端已经可以创建英雄并且进入游戏主界面了,下一步,我们需要选择地图,并且和地图中的野怪来一张遭遇战。首先我们把上一章中的test路径下的demo移动到正式路径下并进行修改。我们把战斗系统demo应用到实际的项目中来。这个接口就一个方法,寻找野怪。选择地图:MenuHandler。客户端的相关handler。地图:TownMap。分支:step-12。原创 2024-02-26 15:31:41 · 462 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(二十一)— 战斗系统二
上一章我们说过,比如速度是1000的时候是每隔2秒钟攻击一次,但是服务器不能真的等两秒再计算攻击的结果,那么这个战斗的时长将会超过几分钟,用户也可能等这么久。首先Action接口中增加一个interval()的方法,用于获取时间间隔,这个时间间隔是预计攻击时间距离战斗开始时间的间隔,例如计算出来的攻击间隔是500,那么每次计算的结果就是500,1000,1500,2000...以此类推。第一个就是速度和出手间隔的换算,我们使用一个比较简单的公式,就是。那么根据这个方法我们来尝试改造战斗引擎。原创 2024-02-22 09:26:02 · 1071 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(二十)— 战斗系统一
我们现在设计并尝试开发战斗系统。战斗系统我们先设定几个规则 1、多人对多人:英雄可以携带宝宝,面对的野怪也可以是成群的,故要设计成多人对多人的战斗引擎; 2、速度快的先出手:这点应该没有异议,根据速度来判定出手间隔,但是这里要有一个数据转换的问题,比如并不是速度100的就比速度50的出手速度快一倍,应该有一个计算公式来根据英雄的速度属性计算出手间隔。原创 2024-02-22 09:25:22 · 654 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(十九)— 用户数据封装与存储
首先一个用户应该会创建多个角色,故而先创建一个用户游戏封装类UserGameWrapper,每个角色也有一个封装类HeroWrapper。当一个用户登录或者注册成功的时候,要把其game数据查询并放到缓存中。用户在选择了职业之后, 后台接收需要创建用户的数据,这里我们要先把用户在后台的数据存储结构定义出来。客户端选择创建新英雄后,后端要生成英雄并保存到全局缓存中。客户端的LoginHandler的修改。LoginHandler修改。分支:step-11。原创 2024-02-21 09:37:40 · 333 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(十八)— 职业选择
本章我们在登录或者注册成功以后,让用户选择职业。选择好职业后再进入菜单。ClientMenuTag中增加新的tag在登录或者注册成功之后,返回可选职业列表已经和已经创建的英雄列表。目前暂时没有已创建英雄也没有存档的能力,故先返回可选职业列表,职业列表我们已经在前文【】实现了。原创 2024-02-21 09:37:13 · 493 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(十七)— 完善后端报错与客户端显示
从代码中可以看到,我们先是统一了返回的参数,同时对入参进行了解析,如果指定了转发的topic与tag就使用客户端指定的,如果没有指定就使用默认的。这里封装的还是有点粗糙但是味道是有了。这里其实就是把回调的topic和tag写入进去。这里最好强制所有的请求体都是对象而不是基础类型。我们在前后端交互的请求体的父类中再增加三个字段,分别是失败跳转topic,失败跳转tag,失败原因。修改所有的handler返回值都是 StringMessage。其他的代码就不贴出来了,大家可以自行去对应的tag中查看。原创 2024-02-20 09:09:20 · 186 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(十六)— 客户端指定回调路由与登录
在这之前,我们还要解决一个问题,就是服务端往客户端发消息的路由问题,这个路由其实应该由客户端来指定,因为客户端在不同的场景中可能会调用同一个服务端路由,比如查询英雄状态,装备状态等等。所以应该由客户端来指定回调地址比较友好。由于这个字段并不是必须的,我们可以把回调的topic和tag放到一个基类中。我们这次来把注册、登录、选择英雄,进入主页-选择地图的功能完善。补充登录相关的请求体以及执行handler。客户端增加登录的处理:LoginHandler。分支:step-09。原创 2024-02-20 09:09:04 · 400 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(十五)— 命令行客户端改造
之前的客户端就是简单的nettyclient,但是现在客户端也要解析topic和tag,所以我们根据server来改造客户端。剩余的改动这里就不一一赘述了,大家可以根据代码来看下调整的地方。到现在,我们切实需要一个客户端来完整的进行英雄选择,选择地图,打怪等等功能。修改command模块的结构,把tag根据不同的topic拆分到不同的类中,方便维护。首先再common模块中增加打印颜色的工具类:ConsoleColors。客户端的监听类- NetworkClientListener。分支:step-09。原创 2024-02-19 10:08:56 · 596 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(十四)— 英雄和野怪
之前都是模板的创建,现在我们来创建英雄和野怪。原创 2024-02-19 09:40:57 · 632 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(十三)— 地图与野怪模板
首先祝大家龙年大吉,大吉大利,财源滚滚,事事如意!角色有了,那么基本的功能应该包括选择地图,打怪,掉落装备,升级等等,我们一一来完成。首先我们设计野怪和地图。原创 2024-02-18 10:16:26 · 545 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(十二)— 角色设定
角色模板是英雄和野怪通用的/*** @description: 角色模版**/// 力量 影响物理输出 物理技能输出// 护甲值 影响物理防御和法术防御// 体质 影响生命值 一点体质增加10点生命值// 魔力 影响法术输出 法术技能输出// 技巧 影响闪避率、暴击率// 攻击速度// 每升一级力量增加值// 每升一级护甲增加值// 每升一级生命力增加值// 每升一级魔法增加值// 每升一级技巧增加值// 每升一级速度增加值// 转职前的最高级别。原创 2024-02-18 09:28:26 · 541 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(十一)— 注册与登录
从这一章开始,我们进入业务的部分,从注册登录开始。原创 2024-02-07 09:54:10 · 544 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(十)— 集成springboot-jpa与用户表
集成springboot-jpa,不用mybatis框架一个是方便对接不同的数据源。第二个目前规划的游戏内容可能对数据库的依赖不是很大,jpa应该肯定能满足要求了。我们先创建一个用户表方便后续注册和登录的功能开发。分支:step-07。原创 2024-02-07 09:13:05 · 625 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(九)— 消息路由最终实现
我们已经在HandlerFactory中注册了所有的handler,此时只需要把投递过来的消息根据topic和tag找到对应的handler去执行就可以了,但是这里还有一个新的问题,就是投递过来的消息body都是string,但是我们很多时候传递过来的应该是对象的json字符串,所以我们要考虑反序列化的问题。同时为了尽可能的使用服务器的资源,处理的时候应该放到线程池中去处理,所以还需要增加一个线程池。改造NetworkListener。改造HelloHandler。分支:step-06。原创 2024-02-06 16:20:55 · 206 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(八)— byte数组传输
在这种场景下,只需要把这个解码器加到 pipeline 中,Netty 会使用换行分隔符,把底层帧分割成一个一个完整的应用层数据包,发送到下一站。适用场景:每个上层数据包的长度,都是固定的,比如 100。在这种场景下,只需要把这个解码器加到 pipeline 中,Netty 会把底层帧,拆分成一个个长度为 100 的数据包 (ByteBuf),发送到下一个 channelHandler入站处理器。这是一种基于灵活长度的解码器。我们之前使用的是自定义分隔符帧解码器,现在我们改用自定义长度帧解码器。原创 2024-02-06 15:16:27 · 1270 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(七)— 消息封装
上一篇,我们初步把消息handler 注册到了服务中,在进行后续工作之前我们需要再做一些准备工作。第一:把之前自己管理的bean放到spring中去管理,后面大部分的bean都通过spring来管理。第二:为了方便路由消费,我们要创建一个消息体方便byte字节数组传输。原创 2024-02-06 09:08:42 · 859 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(六)— 消息处理工厂
就好像门牌号一样,我们需要把消息路由到对应的楼栋和楼层,总不能像菜鸟一样让大家都来自己找数据吧。首先这里我们参考了rabbitmq中的topic与tag模型,topic对应类,tag对应方法。新增一个模块,专门记录路由eternity-command。然后再core中引入这个模块,同时增加反射依赖。创建监听器工厂 HandlerFactory。启动server,查看监听器是否初始化成功。抽象实现类BaseHandler。在core中增加一个文件夹。接口IHandler。分支:step-06。原创 2024-02-06 09:07:32 · 692 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(五)— 集成springboot
算了,放弃挣扎了,笔者写了一些代码,发现还是绕不过springboot,或者说自己来进行依赖管理最后肯定会爆炸的。同时方便后续接入第三方框架,咱们还是老老实实的接入springboot框架吧。有了spring,我们开始下一步,增加消息分发功能。分支:step-05。原创 2024-02-05 15:18:42 · 418 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(四)— session session
session是灵魂,没有session谈什么框架。其实session就是用户的数据绑定和channel的绑定,有了session我们就可以做很多事情原创 2024-02-05 12:10:46 · 563 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(三)— 服务启动接口与网络事件监听器
上一章我们完成了netty服务启动的相关抽象(),这一章我们再新增一个全局的服务启动类,方便后续扩展。原创 2024-02-04 17:03:50 · 514 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(二)— 核心组件抽离与工厂模式创建
上一章我们已经完成了一个基本netty的通信,但是netty的启动很多代码都是重复的,所以我们使用工厂模式来生成不同的ServerBootstrap。首先创建一个新的组件core组件,和common组件,主要用于netty通信和工具类,从server中分离出来没有本质的区别,就是希望可以把功能分散在不同的组件中,后续方便多人进行协同开发(如果有多人的话)。原创 2024-02-04 16:15:58 · 651 阅读 · 0 评论 -
从零开始手写mmo游戏从框架到爆炸(一)— 开发环境
手写文字类mmo游戏框架与业务。首先完成服务端:eternity-server的开发,增加两个类:SocketServer.java、SocketServerHandler.java。然后完成客户端:eternity-client的开发,增加两个类:SocketClient.java、SocketClientHandler.java。让我们先把日志弄好,目前原则上咱们整体不考虑使用spring框架,所以综合考虑我们就使用log4j2。原创 2024-02-04 16:15:17 · 1076 阅读 · 2 评论 -
从零开始手写mmo游戏从框架到爆炸(零)—— 导航
从今天开始我们尝试从零开始写一个mmo的游戏。主要技术还是netty。参考了网上很多的大神的框架,本来希望基于ioGame或者vert.x等来直接写功能的,觉得从零开始更有意义,而且咱们也不需要太NB的底层功能,够用就行。原创 2024-02-06 15:47:55 · 588 阅读 · 0 评论