从零开始手写mmo游戏从框架到爆炸(十二)— 角色设定

2024-02-20 04:20

本文主要是介绍从零开始手写mmo游戏从框架到爆炸(十二)— 角色设定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

        写了这么多的框架,说好的mmo游戏呢?所以我们暂时按下框架不表,这几篇我们设计英雄角色、怪物、技能和地图。本篇我们来对游戏角色进行设定。

       用户在注册成功之后,可以登录,登录好像还没有说,这个不重要,就需要选择存档或者新开游戏,就好像暗黑2一样。存档!好的这个也不重要。我们先说选英雄,英雄就有职业,职业就有技能,英雄升级之后属性要提升。野怪也是一样的,有技能有等级,而且还要区分品质,不如白银怪,黄金怪等等。

       英雄或者说职业,野怪等等需要有模板,数据来源一种是存在数据库里面的,一种是存在文件中的。我更倾向于存在文件中,为什么呢,因为我开心。现在我们正式开始职业的设定。

首先我们先创建游戏引擎模块:

定义角色模板

         角色模板是英雄和野怪通用的

CharacterTemplate.java

package com.loveprogrammer.factory.template;import java.io.Serializable;/*** @version 1.0.0* @description: 角色模版* @author: eric* @date: 2024-02-7 13:54**/
public class CharacterTemplate implements Serializable {private int id;private String name;private String desc;private int strength;                  // 力量 影响物理输出 物理技能输出private int armature;                 // 护甲值 影响物理防御和法术防御private int constitution;               // 体质 影响生命值 一点体质增加10点生命值private int magic;                       // 魔力 影响法术输出 法术技能输出private int technique;                   // 技巧 影响闪避率、暴击率private int speed;                         // 攻击速度private int levelUpStrength;                   // 每升一级力量增加值private int levelUpArmature;                 // 每升一级护甲增加值private int levelUpConstitution;         // 每升一级生命力增加值private int levelUpMagic;                   // 每升一级魔法增加值private int levelUpTechnique;         // 每升一级技巧增加值private int levelUpSpeed;              // 每升一级速度增加值private int highestLevel;            // 转职前的最高级别private String skills;         // 技能id字符串,逗号隔开// 技能品级private String skillQuality;      // 技能品级private String acquiredLevel;     // 技能习得的等级private String extSkills;private int attackType;     // 是物理攻击还是魔法攻击private String states;     // 附带状态,比如眩晕免疫,毒免疫等// 毒抗private int poisonResistance;// 火抗private int flameResistance;// 电抗private int thunderResistance;// 冰抗private int iceResistance;// 经验private double exp = 1.0;// 武器类型private int weaponType;// 可转职的职业private String nextLevelJobList;// 战斗位置,数字越小越靠近前排private int position;@Overridepublic String toString() {return "HeroTemplate{" +"角色 ='" + name + '\'' +", 说明='" + desc + '\'' +", 力量=" + strength +", 护甲=" + armature +", 体力=" + constitution +", 魔力=" + magic +", 技巧=" + technique +", 速度=" + speed +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public int getStrength() {return strength;}public void setStrength(int strength) {this.strength = strength;}public int getArmature() {return armature;}public void setArmature(int armature) {this.armature = armature;}public int getConstitution() {return constitution;}public void setConstitution(int constitution) {this.constitution = constitution;}public int getMagic() {return magic;}public void setMagic(int magic) {this.magic = magic;}public int getTechnique() {return technique;}public void setTechnique(int technique) {this.technique = technique;}public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}public int getLevelUpStrength() {return levelUpStrength;}public void setLevelUpStrength(int levelUpStrength) {this.levelUpStrength = levelUpStrength;}public int getLevelUpArmature() {return levelUpArmature;}public void setLevelUpArmature(int levelUpArmature) {this.levelUpArmature = levelUpArmature;}public int getLevelUpConstitution() {return levelUpConstitution;}public void setLevelUpConstitution(int levelUpConstitution) {this.levelUpConstitution = levelUpConstitution;}public int getLevelUpMagic() {return levelUpMagic;}public void setLevelUpMagic(int levelUpMagic) {this.levelUpMagic = levelUpMagic;}public int getLevelUpTechnique() {return levelUpTechnique;}public void setLevelUpTechnique(int levelUpTechnique) {this.levelUpTechnique = levelUpTechnique;}public int getLevelUpSpeed() {return levelUpSpeed;}public void setLevelUpSpeed(int levelUpSpeed) {this.levelUpSpeed = levelUpSpeed;}public String getSkills() {if(skills == null){skills = "";}return skills;}public void setSkills(String skills) {this.skills = skills;}public String getExtSkills() {return extSkills;}public void setExtSkills(String extSkills) {this.extSkills = extSkills;}public int getAttackType() {return attackType;}public void setAttackType(int attackType) {this.attackType = attackType;}public String getStates() {if(states == null){states = "";}return states;}public void setStates(String states) {this.states = states;}public int getPoisonResistance() {return poisonResistance;}public void setPoisonResistance(int poisonResistance) {this.poisonResistance = poisonResistance;}public int getFlameResistance() {return flameResistance;}public void setFlameResistance(int flameResistance) {this.flameResistance = flameResistance;}public int getThunderResistance() {return thunderResistance;}public void setThunderResistance(int thunderResistance) {this.thunderResistance = thunderResistance;}public double getExp() {return exp;}public void setExp(double exp) {this.exp = exp;}public int getIceResistance() {return iceResistance;}public void setIceResistance(int iceResistance) {this.iceResistance = iceResistance;}public int getWeaponType() {return weaponType;}public void setWeaponType(int weaponType) {this.weaponType = weaponType;}public String getAcquiredLevel() {return acquiredLevel;}public void setAcquiredLevel(String acquiredLevel) {this.acquiredLevel = acquiredLevel;}public String getSkillQuality() {return skillQuality;}public void setSkillQuality(String skillQuality) {this.skillQuality = skillQuality;}public int getHighestLevel() {return highestLevel;}public void setHighestLevel(int highestLevel) {this.highestLevel = highestLevel;}public String getNextLevelJobList() {return nextLevelJobList;}public void setNextLevelJobList(String nextLevelJobList) {this.nextLevelJobList = nextLevelJobList;}public int getPosition() {return position;}public void setPosition(int position) {this.position = position;}
}

  职业模板集成通用模板。JobTemplate中的newSkills是后期做转职的时候用的,先忽略。

JobTemplate.java

package com.loveprogrammer.factory.template;/*** @ClassName JobTemplate* @Description 职业模板* @Author admin* @Date 2024-02-7 13:54* @Version 1.0*/
public class JobTemplate extends CharacterTemplate{private String newSkills;public String getNewSkills() {return newSkills;}public void setNewSkills(String newSkills) {this.newSkills = newSkills;}
}

创建模板文件

job.json

[{"id":1,"name":"战士","strength":60,"magic":0,"constitution":80,"technique":15,"speed":130,"armature":5,"levelUpStrength":45,"levelUpMagic":0,"levelUpConstitution":35,"levelUpTechnique":25,"levelUpSpeed":25,"levelUpArmature":15,"attackType":0,"weaponType":1,"totalA":230,"totalB":152.5,"skills":"1,11,19,32","newSkills":"1,11,19,32","skillQuality":"E,E,E,E","acquiredLevel":"0,5,10,15","extSkills":0,"nextLevelJobList":100101,"position":1,"desc":"剑类武器","highestLevel":15,"init":0}
]

 创建职业工厂

JobFactory

package com.loveprogrammer.factory;import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.loveprogrammer.factory.template.JobTemplate;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;/*** @ClassName JobFactory* @Description 英雄职业工厂* @Author admin* @Date 2024/2/7 15:49* @Version 1.0*/
public class JobFactory {private static List<JobTemplate> templates;private static Map<Integer,JobTemplate> jobMap;static {try {// 读取配置文件,然后加载到weaponTemplates中ClassLoader classLoader = JobFactory.class.getClassLoader();InputStream inputStream = classLoader.getResourceAsStream("template/job.json");assert inputStream != null;BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));StringBuilder responseStrBuilder = new StringBuilder();String inputStr;while ((inputStr = streamReader.readLine()) != null)responseStrBuilder.append(inputStr);templates = JSONArray.parseArray(responseStrBuilder.toString(),JobTemplate.class);jobMap = templates.stream().collect(Collectors.toMap(JobTemplate::getId, e ->e));} catch (IOException e) {e.printStackTrace();}}public static List<JobTemplate> getTemplates(){return templates;}public static void main(String[] args) {System.out.println("加载的职业有:" + JSON.toJSONString(templates));}}

运行一下工厂的main方法:

加载的职业有:[{"acquiredLevel":"0,5,10,15","armature":5,"attackType":0,"constitution":80,"desc":"剑类武器","exp":1.0,"extSkills":"0","flameResistance":0,"highestLevel":15,"iceResistance":0,"id":1,"levelUpArmature":15,"levelUpConstitution":35,"levelUpMagic":0,"levelUpSpeed":25,"levelUpStrength":45,"levelUpTechnique":25,"magic":0,"name":"战士","newSkills":"1,11,19,32","nextLevelJobList":"100101","poisonResistance":0,"position":1,"skillQuality":"E,E,E,E","skills":"1,11,19,32","speed":130,"states":"","strength":60,"technique":15,"thunderResistance":0,"weaponType":1}]

这样我们就有了职业的模板了。 

全部源码详见:

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

分支:step-08

这篇关于从零开始手写mmo游戏从框架到爆炸(十二)— 角色设定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/727023

相关文章

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核