从零开始实现放置游戏(十一)——实现战斗挂机(2)注册登陆和游戏主界面

简介:  本章主要实现注册登陆功能和游戏的主界面。有了游戏的界面,大家能有更直观的认识。  本章我们主要开发的是idlewow-game模块,其实就是游戏的客户端展示层。因为是放置游戏,为了方便,主要使用spring-mvc来开发,整个游戏形式是类似web端的文字mud游戏,会稍带一些图形图片。当然,游戏的客户端可以是多种多样的,也可以使用U3D开发成移动端或者C++/flash/silver light,开发成PC端、网页端、微端等等形式,但需要更多的美术资源。

本章主要实现注册登陆功能和游戏的主界面。有了游戏的界面,大家能有更直观的认识。


  本章我们主要开发的是idlewow-game模块,其实就是游戏的客户端展示层。因为是放置游戏,为了方便,主要使用spring-mvc来开发,整个游戏形式是类似web端的文字mud游戏,会稍带一些图形图片。当然,游戏的客户端可以是多种多样的,也可以使用U3D开发成移动端或者C++/flash/silver light,开发成PC端、网页端、微端等等形式,但需要更多的美术资源。


一、注册登陆和角色创建


  首先,我们把idlewow-game的框架搭建好,因为也是spring-mvc项目,可以基本参照前面的rms模块。各种配置,这里就不再赘述了。可以先把源代码下载下来,对照着看。


  一)添加jsp页面


  为了便于理解,这里我们先添加个首页,即登陆页面。其实就是一个背景图,带上登陆输入框和注册、登陆按钮。如下图,是我从网上随便找的一个背景图。这里,注册和登陆页面的展示,不需要经过controller做什么处理,直接在"/webapp/"目录下添加jsp页面即可。代码如下,比较简单,注意里面引用的css和js就不粘贴了。


 index.jsp


register.jsp


502227-20191018185813327-168926509.png


 好了,现在页面有了,接下来,在注册页面点击“注册”和登陆页面点击“登陆”按钮时,就需要controller来做后台逻辑处理了。


 二)hessian客户端配置


  在添加controller前,我们先把hessian客户端配置好。注意,在调用hessian接口的客户端,同样需要在pom中引用hessian的包。


  因为game模块作为游戏的客户端展示层,本身不访问底层数据库,这里就需要调用上一章提供的hessian服务,来完成注册和登陆功能。hessian的服务端配置上一章已经讲过了,在调用时,上一章我们直接使用代码生成代理类进行测试。实际使用时,一般只需要配置一个xml文件,就可以在项目中引用对应的对象。


  在game模块的"/resources/properties"目录下,添加 hessian.properties 文件,用来存放 hessian 服务的url地址,内容如下:


 server.url=http://localhost:20000


  再在"/resources/spring"目录下,添加 hessian-client.xml 文件,用来配置需要引用的接口地址(即hessian服务端暴露出的接口),内容如下:


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd">
    <util:properties location="classpath:/properties/hessian.properties" id="hessian"/>
    <bean id="userService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
        <property name="serviceUrl" value="#{hessian['server.url']}/remoting/UserService"/>
        <property name="serviceInterface" value="com.idlewow.user.service.UserService"/>
    </bean>
    <bean id="characterService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
        <property name="serviceUrl" value="#{hessian['server.url']}/remoting/CharacterService"/>
        <property name="serviceInterface" value="com.idlewow.character.service.CharacterService"/>
    </bean>
</beans>


 然后,在spring的上下文配置文件 applicationContext.xml 中,将这段配置引入即可,即:


<beans>        
        ........
        <import resource="hessian-client.xml"/>
        ........
</beans>


  全部配置完成,就可以在项目中引用并调用hessian服务了。注意,以后服务端每次添加新的接口,都需要在服务端和客户端的配置文件添加配置。


    三)添加controller


  页面完成后,点击“注册“和”登陆“按钮时,需要后台进行相应的逻辑处理,在spring-mvc框架下,就需要新建一个controller。


  在com.idlewow.game.controller包下,新建一个类GameController,内容如下:


GameController


其中,userService和characterService就是对hessian接口的引用。这里注解使用@Autowired或者@Resource均可。具体区别可以百度一下。


   @Autowired

   UserService userService;

   @Autowired

   CharacterService characterService;


  controller中的方法,对应提供了“注册”、“登陆”、“获取角色列表”、“创建角色”、“进入游戏主界面”、“错误页面”几个功能。其中,还需要对应的创建几个页面,目录结构如下图。页面代码就不粘贴了,可以下载源码查看。这里需要注意的是,由controller路由的页面,根目录是"/WEB-INF/views/”,这是我们在spring-mvc.xml中的视图解析节点配置的,属于mvc的路由机制。而前面的index.jsp和register.jsp,是直接从文件目录结构访问的,未参与mvc路由。


502227-20191021102011064-1590665363.png


四)数据库设计


  项目中用到的sql建表语句等,都在idlewow-doc目录下。这里账号表和角色表比较简单,sql里也有相应的注释。这里需要注意的是,角色表 user_character 中,有一个字段 extra_info。这个字段主要以json文本的形式存储一些缓存数据。比如角色身上的装备信息,角色所在的地图,等等等等。


  试想一下,在游戏世界中,一个角色可能会频繁的进行更换装备、切换地图等操作,这些信息都需要记录。如果游戏中每个角色有此类动作时,都进行更新写库,对数据库会造成巨大的压力。因此这部分数据,会在游戏一开始时,读取到缓存中(比如redis)。在游戏进行时,只需要更新缓存数据。在游戏退出时,再将缓存中的数据写回数据库。


二、效果演示


微信图片_20220423212541.gif


小结


  本章主要实现了游戏的主界面,但界面上的角色信息、战斗记录、地图信息及怪物信息等,目前都是静态文本,接下来只要一点点往上添加就行了。


  本章的代码可能会有部分冗余,因为是从我已经开发好的分支上,直接拷贝过来的。有些代码可能目前还用不到,或者后期会有改进,有些地方是我还没想好最终会怎么做还在思考。看代码的时候,重点关注本章需要实现的内容就可以了,有些不合理的地方也可以自己发挥。


相关文章
|
定位技术
从零开始实现放置游戏(一)——游戏设计
想要做一款成功的游戏,离不开优秀的策划,设计,玩法,美术,等等等等。这其中需要学习的东西太多。然而多想无益,这些东西越学越多,只有先尽快做出成品,然后不断迭代,才能更加深入了了解。因此,这里我们直接参考已有的成功案例,并加入一些我们自己的理解,适当改良。
从零开始实现放置游戏(一)——游戏设计
|
存储 前端开发 算法
从零开始实现放置游戏(十五)——实现战斗挂机(6)在线打怪练级
 本章初步实现游戏的核心功能——战斗逻辑。   战斗系统牵涉的范围非常广,比如前期人物的属性、怪物的配置等,都是在为战斗做铺垫。   战斗中,人物可以施放魔法、技能,需要技能系统支持。   战斗胜利后,进行经验、掉落结算。又需要背包、装备系统支持。装备系统又需要随机词缀附魔系统。   可以说是本游戏最硬核的系统。   因为目前技能、背包、装备系统都还没有实现。我们先初步设计实现一个简易战斗逻辑。   战斗动作仅包括普通攻击,有可能产生未命中、闪避和暴击。
从零开始实现放置游戏(十五)——实现战斗挂机(6)在线打怪练级
|
缓存 NoSQL 数据库
从零开始实现放置游戏(十六)——道具系统(1)道具字典
道具系统是游戏的核心系统之一,常见的业务功能包括 “角色背包”, “道具商店”, “怪物掉落” 等,都依赖道具系统。     在实现这些功能之前,首先要解决的问题就是要定义我们的游戏世界中,到底会有哪些道具, 以及这些道具是如何分类的?     这就是我们这期要做的“道具字典“。首先必须要有一个“字典”来说明这个道具是什么,接下来才能有“背包”系统,来表示角色的背包里有些什么道具,数量有多少。
从零开始实现放置游戏(十六)——道具系统(1)道具字典
|
SQL IDE Java
从零开始实现放置游戏(二)——整体框架搭建
上一篇,我们讲解了游戏的大概背景,知道了要做什么内容。现在已经可以开始搭建游戏的代码框架。
从零开始实现放置游戏(二)——整体框架搭建
|
SQL XML JSON
从零开始实现放置游戏(四)——实现后台管理系统(2)数值配置的增删查改
 上一章我们将RMS后台管理系统搭建完毕,本章我们就在这个系统上实现录入游戏配置的功能。目前我们需要配置四项,每个等级的人物属性,每个等级的升级经验,游戏地图,地图中的怪物。下面我们以游戏地图配置为例子,实现对它的增删查改功能。
|
前端开发 JavaScript Java
从零开始实现放置游戏(三)——实现后台管理系统(1)后台管理系统搭建
上一章已经把整体的代码框架搭建完毕。然而整个游戏的功能非常的多,这就要求我们必须思路清晰,把所有功能依次分解开,逐步实现。
从零开始实现放置游戏(三)——实现后台管理系统(1)后台管理系统搭建
|
缓存 IDE PHP
另一个Swoole调试器-Yasd
前段时间说过如何使用 Sdebug(Xdebug)来调试 Swoole,现在 PHP8 和 Xdebug3 都发布了,也有小伙伴在 Swoole 的 ISSUE 中询问 Xdebug 的支持,不过如果还继续兼容 Xdebug 的话肯定不是一件容易的事情。 于是 Swoole 开发组成员 @codinghuang 开发了一个新的调试扩展,名为 Yasd ,另一个 Swoole 调试器。
301 0
|
物联网 程序员 网络性能优化
simps/mqtt:适用于PHP的 MQTT 协议解析和协程客户端
Simps 的第一个版本 MQTT 库 就是参考了 Workerman 的实现,使其能够使用 Swoole 的协程能力,同时也修复了一些问题
825 0
|
缓存 安全 PHP
Semgrep结合GitLab实现代码审计实践-服务端
为了能让开发者时时刻刻关注安全问题,我在gitlab服务端放了一个钩子,这个钩子主要是将本次提交的代码文件进行了检测,遇到可能存在安全风险的问题将其输出出来,这样开发者能够对培训的内容有更深的感受,更注重编码时候的安全问题。
707 0
Semgrep结合GitLab实现代码审计实践-服务端
|
数据可视化 程序员 开发者
如何自己制作一个游戏(附免费的游戏开发新手教程)
首先我们来看一下这个问题本身,能问出这个问题的基本上就是新手,小白,零基础,对于游戏开发这个领域没有任何的了解的人。为什么这么说呢?因为只有当你对于一个领域没有任何了解的时候,才会问出这么宽泛的问题。 所以你看,但凡问那种很宽泛的问题的,基本上都是对于这个领域没有任何了解的,也就是新手小白。但是新手小白也没有什么可丢人的,毕竟谁在接触一个新领域的时候不是新手小白呢?
2168 1

热门文章

最新文章