上一章已经把整体的代码框架搭建完毕。然而整个游戏的功能非常的多,这就要求我们必须思路清晰,把所有功能依次分解开,逐步实现。
需求分析
整个游戏的核心玩法是放置挂机,打怪练级是核心功能,先实现一个最小可运行的DEMO,那么可以先实现玩家和怪物挂机战斗这部分。像装备、道具、掉落、随机词缀、组队等功能都可以放到后面做。想实现挂机战斗,那么要有一个战斗的逻辑模块,根据输入的战斗信息,计算出战斗结果,输出给客户端播放。整体逻辑大致如下图:
这里,我们需要对游戏战斗相关的属性有个规划。我们暂时规定一级属性有力量、敏捷、智力、耐力,二级属性有生命值、护甲、攻击强度、法术强度、命中率、躲避率、暴击率。一级属性对二级属性提供加成,二级属性参与战斗逻辑计算,装备加成既可以加一级属性也可以加二级属性。人物每个等级自身四围的属性数值是固定的。人物的战斗属性由自身属性+装备加成+得出。怪物的属性比较简单,只有等级、生命值、护甲、伤害值,直接参与计算。
以上,我们需要配置人物每个等级的属性,怪物的属性。另外,人物和怪物都是在地图上移动的,因此还需要配置地图信息。要配置这些信息,我们就需要先搭建后台管理系统,通过excel,把我们的数值配置导入系统。下面,我们就开始搭建我们的rms模块。
RMS系统搭建
1.引入依赖
首先,有一些常用的工具类,插件类,几乎每个模块都要用到的,我们在父级节点idlewow的pom中引入:
注意:lombok是个IDE的插件依赖,需要有一步在Idea中安装此插件的操作。插件的安装请查看此篇:
org.apache.commons
commons-lang3
3.8.1
com.alibaba
fastjson
1.2.57
com.fasterxml.jackson.core
jackson-databind
2.9.8
com.fasterxml.jackson.core
jackson-core
2.9.8
org.projectlombok
lombok
1.18.6
provided
idlewow的pom.xml
idlewow-core模块需要访问数据库,添加相关依赖:
org.mybatis
mybatis
3.5.1
mysql
mysql-connector-java
8.0.15
pom.xml
在idlewow-rms中,我们使用springmvc+mybatis,需要添加的引用较多:
org.springframework
spring-context
5.1.6.RELEASE
org.springframework
spring-context-support
5.1.6.RELEASE
org.springframework
spring-core
5.1.6.RELEASE
org.springframework
spring-web
5.1.6.RELEASE
org.springframework
spring-webmvc
5.1.6.RELEASE
org.springframework
spring-aop
5.1.6.RELEASE
org.springframework
spring-jdbc
5.1.6.RELEASE
org.springframework
spring-tx
5.1.6.RELEASE
javax.servlet
javax.servlet-api
4.0.1
provided
javax.servlet
jstl
1.2
provided
org.aspectj
aspectjweaver
1.9.3
org.apache.commons
commons-dbcp2
2.6.0
org.mybatis
mybatis-spring
2.0.1
pom.xml
2.添加相关配置
已经引入了依赖,还有很多配置文件需要配。
首先,我们来配置一下最基本的配置,也就是web容器的配置: web.xml
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
IdleWow RMS
contextConfigLocation
classpath:spring/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
encodingFilter
/*
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/spring-mvc.xml
1
springmvc
/
30
web.xml
在 web.xml 里主要配置了一个spring的上下文listener,用来在启动时,自动扫描注入;一个spring的servlet,用来实现mvc路由;还有一个字符编码的filter,用来把请求数据转换成utf-8编码,防止出现乱码。
现在我们针对web.xml中Spring的上下文listener和servlet添加单独的配置。在resources目录下新建spring文件夹,并新建applicationContext.xml文件,applicationContext.xml 主要配置spring需要扫描的包,并引入了数据源的配置文件。
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
classpath:/properties/jdbc.properties
applicationContext.xml
在/resources/spring路径下,新建spring-mvc.xml文件,主要配置mvc的路由规则,并启动spring的mvc注解。
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
spring-mvc.xml
在/resources/spring路径下,新建dataSource.xml文件,主要配置数据库连接,连接池,启动spring的事务注解。并指定mybatis需要扫描的包。
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
dataSource.xml
在resources目录下,新建properties文件夹,并新建文件jdbc.properties。具体定义了数据库连接的账号、密码等,供dataSource.xml使用。
writeConn.jdbcUrl=jdbc:mysql://localhost:3306/idlewow?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC
writeConn.user=admin
writeConn.password=123456readConn.jdbcUrl=jdbc:mysql://localhost:3306/idlewow?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&flag=readonly&serverTimezone=UTC
readConn.user=admin
readConn.password=123456
jdbc.properties
3.最简页面搭建
配置完毕,我们先搭建一个最简的管理员登陆页面和登陆后的首页,让整个项目能够跑起来。
这里我们直接使用一套网上开源免费的基于layui实现的前端框架xadmin,下载地址:http://x.xuebingsi.com/。下载后,把css, js, fonts, images, lib目录都拷贝到webapp目录下即可。
然后,我们写一个简单的登陆验证。这里,我规定数据库建表时,所有表均需包含id, create_user, update_user, create_time, update_time, is_delete, version几个字段。在facade模块中,新建一个包com.idlewow.common.model, 并新建一个抽象类BaseModel,后面凡是数据库的实体类,均需继承此类。
packagecom.idlewow.common.model;importlombok.Data;importjava.io.Serializable;importjava.util.Date;
@Datapublic abstract class BaseModel implementsSerializable {/*** 主键ID*/
privateString id;/*** 创建人*/
privateString createUser;/*** 修改人*/
privateString updateUser;/*** 创建时间*/
privateDate createTime;/*** 修改时间*/
privateDate updateTime;/*** 是否删除 0-否 1-是*/
privateInteger isDelete;/*** 版本号*/
privateInteger version;
}
BaseModel.java
另外,再facade模块中,新建一个包com.idlewow.admin.model,并添加管理员类SysAdmin,
packagecom.idlewow.admin.model;importcom.idlewow.common.model.BaseModel;importlombok.Data;
@Datapublic class SysAdmin extendsBaseModel {privateString username;privateString password;
}
SysAdmin.java
在rms模块中,新建包com.idlewow.rms.controller, 并新建一个登陆认证的controller, 在这里,我们直接写死账号admin可登陆,并自动添加密码123456,方便开发,
1 packagecom.idlewow.rms.controller;2
3 importcom.alibaba.fastjson.JSONObject;4 importcom.idlewow.admin.model.SysAdmin;5 importorg.apache.commons.lang3.StringUtils;6 importorg.springframework.beans.factory.annotation.Autowired;7 importorg.springframework.stereotype.Controller;8 importorg.springframework.web.bind.annotation.RequestMapping;9 importorg.springframework.web.bind.annotation.ResponseBody;10
11 importjavax.servlet.http.HttpSession;12
13 @Controller14 @RequestMapping("/authorize")15 public classAuthorizeController {16 @Autowired17 HttpSession httpSession;18
19 @ResponseBody20 @RequestMapping("/login")21 publicObject longin(SysAdmin sysAdmin) {22 String userName =sysAdmin.getUsername();23 String password =sysAdmin.getPassword();24 if (userName.equalsIgnoreCase("admin")) {25 userName = "admin";26 password = "123456";27 }28
29 JSONObject jsonObject = newJSONObject();30 //验证用户名和密码不能为空
31 if (StringUtils.isBlank(userName) ||StringUtils.isBlank(password)) {32 jsonObject.put("status", false);33 jsonObject.put("msg", "用户名和密码不能为空");34 returnjsonObject.toJSONString();35 }36
37 httpSession.setAttribute("loginuser", sysAdmin);38 jsonObject.put("status", true);39 jsonObject.put("msg", "登录成功");40 returnjsonObject;41 }42 }
AuthorizeController
在webapp目录下,添加login.html登陆页面,这里直接使用xadmin提供的模板,对js稍作改动,
1
2
3
4
5
后台登录6
7
8
9 content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
10
11
12
13
14
15
16
17
18
19
20 idlewow管理登录