从零开始手写mmo游戏从框架到爆炸(二十四)— 装备系统二

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客

      本章主要是补充装备工厂,增加根据野怪等级和品质获得装备的方法:

      增加的代码如下- EquipmentFactory:

public static Equipment createEquipment(Monster monster,QualityEnum qualityEnum){Equipment result;// 根据怪物等级,找到对应的装备; 去掉等级过高的装备List<EquipmentTemplate> templates = allEquipmentTemplates.stream().filter(e -> e.getLevel() <= monster.getLevel()).collect(Collectors.toList());// 随机找到一个装备模板EquipmentTemplate equipmentTemplate = templates.get(new Random().nextInt(templates.size()));// 找到装备的品质if(equipmentTemplate.getType().equalsIgnoreCase(EquipmentEnum.WEAPON.getCode())){result = getWeapon(equipmentTemplate,qualityEnum);}else{// 不是武器的话都一样result = getOtherEquipment(equipmentTemplate,qualityEnum);}// 添加词缀return result;}private static Weapon getWeapon(EquipmentTemplate equipmentTemplate, QualityEnum qualityEnum) {Weapon weapon = new Weapon(equipmentTemplate.getName(),equipmentTemplate.getType(),equipmentTemplate.getDesc(), EquipmentEnum.WEAPON,WeaponTypeEnum.getByCode(equipmentTemplate.getWeaponType()),qualityEnum,equipmentTemplate.getId());// 品质越高,浮动越小weapon.setGoods_id(equipmentTemplate.getId());weapon.setLevel(equipmentTemplate.getLevel());weapon.setArmature(calculate(equipmentTemplate.getArmature(),qualityEnum));weapon.setStrength(calculate(equipmentTemplate.getStrength(),qualityEnum));weapon.setSpeed(calculate(equipmentTemplate.getSpeed(),qualityEnum));weapon.setConstitution(calculate(equipmentTemplate.getConstitution(),qualityEnum));weapon.setTechnique(calculate(equipmentTemplate.getTechnique(),qualityEnum));weapon.setHp(calculate(equipmentTemplate.getHp(),qualityEnum));weapon.setMagic(calculate(equipmentTemplate.getMagic(),qualityEnum));weapon.setSpeed(calculate(equipmentTemplate.getSpeed(),qualityEnum));weapon.setEvasion(calculate(equipmentTemplate.getEvasion(),qualityEnum));weapon.setFortune(calculate(equipmentTemplate.getFortune(),qualityEnum));weapon.setPoisonResistance(calculate(equipmentTemplate.getPoisonResistance(),qualityEnum));weapon.setFlameResistance(calculate(equipmentTemplate.getFlameResistance(),qualityEnum));weapon.setThunderResistance(calculate(equipmentTemplate.getThunderResistance(),qualityEnum));weapon.setIceResistance(calculate(equipmentTemplate.getIceResistance(),qualityEnum));return weapon;}public static Equipment getOtherEquipment(EquipmentTemplate equipmentTemplate, QualityEnum qualityEnum) {Equipment equipment = new Equipment(equipmentTemplate.getName(),equipmentTemplate.getType(),equipmentTemplate.getDesc(),EquipmentEnum.getByCode(equipmentTemplate.getType()),qualityEnum,equipmentTemplate.getId());// 品质越高,浮动越小equipment.setGoods_id(equipmentTemplate.getId());equipment.setLevel(equipmentTemplate.getLevel());equipment.setArmature(calculate(equipmentTemplate.getArmature(),qualityEnum));equipment.setStrength(calculate(equipmentTemplate.getStrength(),qualityEnum));equipment.setSpeed(calculate(equipmentTemplate.getSpeed(),qualityEnum));equipment.setConstitution(calculate(equipmentTemplate.getConstitution(),qualityEnum));equipment.setTechnique(calculate(equipmentTemplate.getTechnique(),qualityEnum));equipment.setHp(calculate(equipmentTemplate.getHp(),qualityEnum));equipment.setMagic(calculate(equipmentTemplate.getMagic(),qualityEnum));equipment.setSpeed(calculate(equipmentTemplate.getSpeed(),qualityEnum));equipment.setEvasion(calculate(equipmentTemplate.getEvasion(),qualityEnum));equipment.setFortune(calculate(equipmentTemplate.getFortune(),qualityEnum));// 四种元素的抗性equipment.setPoisonResistance(calculate(equipmentTemplate.getPoisonResistance(),qualityEnum));equipment.setFlameResistance(calculate(equipmentTemplate.getFlameResistance(),qualityEnum));equipment.setThunderResistance(calculate(equipmentTemplate.getThunderResistance(),qualityEnum));equipment.setIceResistance(calculate(equipmentTemplate.getIceResistance(),qualityEnum));return equipment;}private static int calculate(String data, QualityEnum qualityEnum) {if(StringUtils.isEmpty(data)){return 0;}String[] split = data.split("-");int min = Integer.parseInt(split[0]);int max = Integer.parseInt(split[1]);int add = max - min;if(add > 1){switch (qualityEnum){case 黄色:min = min + add/5;break;case 紫色:min = min + add/4;break;case 红色:min = min + add/3;break;case 暗金:min = min + add/2;break;default:break;}}if(max > min) {// 根据品质改变最大最小值return min + new Random().nextInt(max - min);}else if (max == min){return max;}return 0;}

       大概解释一下就是根据野怪的等级找到可获得的装备模板列表,再根据品质去获得属性的浮动,品质越高浮动越小,这样品质高的武器将有机会获得更高的属性加成。

      我们来测试一下-测试代码:

    public static void main(String[] args) {
//        for (EquipmentTemplate template : allEquipmentTemplates) {
//            System.out.println(template.toString());
//        }Equipment equipment = createEquipment(MonsterFactory.createMonster(101, 10), QualityEnum.白色);System.out.println("获得装备");System.out.println(equipment.prettyPrint());}

结果:

获得装备****物品信息****名称:布甲品质:普通位置:胸甲说明:布甲护甲:6体力:13***************

全部源码详见:

gitee : eternity-online: 多人在线mmo游戏 - Gitee.com

分支:step-12

请各位帅哥靓女帮忙去gitee上点个星星,谢谢! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/494224.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mistral发布语言大模型Mistral Large;法国新星Mistral挑战 OpenAI 霸主地位

&#x1f989; AI新闻 &#x1f680; Mistral发布语言大模型Mistral Large 摘要&#xff1a;Mistral Large 是 Mistral AI 公司最新发布的旗舰语言模型&#xff0c;具备顶尖水平的推理能力。它主要被设计用于处理复杂的多语言推理任务&#xff0c;比如文本理解、转换和代码生…

Nginx的核心配置指令及调优

目录 Nginx 核心配置指令 一、Nginx配置文件详解 1、配置文件目录 2、配置文件结构 二、调优 1、在全局域进行的调优 1.1线程池指令 1.2 工作进程数指令 1.3工作进程优先级指令 1.4 工作进程 CPU 绑定指令 1.5 调试可打开的文件个数 1.6 调试文件大小指令 1.7 只运…

JAVA面向对象高级部分

1、static static修饰成员变量 基本概念和定义 static修饰的称为类变量。 使用方法 1、类变量的用法 如下图红框中 1&#xff09;类名.类变量&#xff0c;通过类名直接调用 2&#xff09;对象.类变量 2、实例变量的用法 实例化之后才能调用&#xff1a;对象.实例变量…

.NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】

设计模式是软件工程中常用的解决特定问题的通用设计方法。它们提供了经过验证的解决方案&#xff0c;可用于解决在软件开发过程中经常遇到的一些常见问题。设计模式不是一种具体的编程语言特性或语法&#xff0c;而是一种通用的设计思想或模板&#xff0c;可以帮助开发人员设计…

一份系统的“光影猫”使用教程(下)

欢迎大家关注我一下 后面几天可能没有话题可以写了……大家见谅 原文地址&#xff1a;一份系统的“光影猫”使用教程&#xff08;下&#xff09; - Pleasure的博客 下面是正文内容&#xff1a; 前言 这是&#xff08;上&#xff09;个人NAS系统的搭建——光影猫 - Pleasure…

【SRE系列之Jenkins的使用】--实现ssh和http克隆

1、Jenkins的概念 1.1Jenkins的介绍 Jenkins是一个独立的开源软件项目&#xff0c;是基于Java开发的一种CI&#xff08;Continuous integration&#xff0c;持续集成&#xff09; &CD (Continuous Delivery&#xff0c;持续交付)工具&#xff0c;用于监控持续重复的工作&a…

Django后台管理(二)

一、自定义注册管理类介绍 官网:Django 管理站点 | Django 文档 | Django 注册模型除了使用 Django 默认的管理类admin,也可以自定义,比如: class StudentAdmin(admin.ModelAdmin):pass admin.site.register(Student, StudentAdmin)ModelAdmin 类是管理界面中模型的表示。…

pycharm控制STM32F103ZET6拍照并上位机接收显示(OV7670、照相机、STM32、TFTLCD)

基于STM32的照相机 准备工作最终效果一、下位机1、主函数2、OV7670初始化 二、上位机1、控制拍照2、接收图片数据 三、资源获取 准备工作 一、硬件及片上资源: 1,串口1(波特率:921600,PA9/PA10通过usb转ttl连接电脑&#xff0c;或者其他方法)上传图片数据至上位机 2,串口2(波特…

JSON简介以及如何在Python中使用JSON

什么是JSON&#xff1f; JSON是"JavaScript Object Notation"的简称&#xff0c;是一种数据交换格式 JSON格式 假设我们有一个对象&#xff0c;这个对象有两个属性&#xff1a;“name”跟“age”。 在JSON中是这样表达的&#xff1a; { "name":"男孩…

【HarmonyOS】鸿蒙开发之Stage模型-基本概念——第4.1章

Stage模型-基本概念 名词解释 AbilityStage:应用组件的“舞台“ UIAbility:包含UI界面的应用组件&#xff0c;是系统调度的基本单元 WindowStage:组件内窗口的“舞台“ Window&#xff1a;用来绘制UI页面的窗口 HAP:Harmony Ability Package(鸿蒙能力类型的包) HSP:Harmony Sh…

【Flink精讲】Flink状态及Checkpoint调优

RocksDB大状态调优 RocksDB 是基于 LSM Tree 实现的&#xff08;类似 HBase&#xff09; &#xff0c;写数据都是先缓存到内存中&#xff0c; 所以 RocksDB 的写请求效率比较高。 RocksDB 使用内存结合磁盘的方式来存储数据&#xff0c;每 次获取数据时&#xff0c;先从内存中 …

Unity:WWW工具类的使用技巧

1、简述 Unity的WWW类是一种用于发送HTTP请求和接收HTTP响应的类。它可以用来访问网络上的资源&#xff0c;如文本、图像、音频和视频等。本文将介绍如何使用Unity的WWW类来访问网络资源。 2、创建一个简单的HTTP请求 首先&#xff0c;我们需要创建一个WWW对象来发送HTTP请求…