基于移动环境的纸牌游戏程序开发毕业论文
2020-02-23 18:21:38
摘 要
近两年移动设备的不断更新换代,引领着移动游戏市场快速发展,中外游戏产品如雨后春笋般涌出。用户在享受移动便捷化的同时,也能够沉浸入游戏中,感受另一个世界的精彩。
本系统采用近几年较为流行的纸牌游戏为基础,进行游戏规则简化,结合卡牌的对战模式,设计实现出一款操作简单的纸牌游戏。游戏采用WebSocket协议对游戏时的数据请求进行优化,使得服务器能够自主发送消息给客户端,避免了轮询和长连接带给服务器的压力。游戏规则的优化更改,使得纸牌游戏适用于双人。游戏界面简洁明快,使用surfaceView控制了帧频刷新,提高了利用率,便于迭代开发更多功能。系统服务器端使用SSM框架搭建,极大的简化了后端数据库操作的工作量。系统的设计实现过程合理,各个部分协同合作,功能完善。
关键词:移动;纸牌游戏;WebSocket
Abstract
The continuous upgrading of mobile devices in the past two years has led to the rapid development of the mobile game market. Chinese and foreign gaming products are springing up. While enjoying the convenience of mobile, users can also immerse themselves into the game and experience the excitement of another world.
Based on the more popular card games in recent years, this system simplifies the rules of the game and combines the battle mode of card game to design and implement a simple card game. The game uses the WebSocket protocol to optimize the data requests during the game, so that the server can send messages to the client autonomously, avoiding the pressure of polling and long connections to the server. The game rules have been optimized to make card games suitable for doubles. The game interface is simple and neat, using surfaceView to control the refresh rate of the frame, improve the utilization rate, and iteratively develop more functions. The system server uses SSM framework to build, which greatly simplifies the workload of the back-end database operations. The system's design and implementation process is reasonable, and all parts cooperate and function perfectly.
Key Words:mobile;card game;WebSocket
目 录
摘 要 I
Abstract II
第1章 绪论 1
1.1开发背景 1
1.2国内外现状 1
1.3系统设计目的及意义 2
1.4论文结构 2
第2章 相关技术分析 3
2.1 spring-mvc框架 3
2.2 websocket通信框架 4
2.3 okhttp框架 5
2.4 surfaceView框架 5
第3章 系统需求分析架构设计 7
3.1系统需求分析 7
3.2系统框架设计 8
3.2.1服务器端模块 8
3.2.2客户端模块 10
3.2.3通信模块 10
3.2.4数据库信息管理模块 11
第4章 系统详细设计 12
4.1系统功能 12
4.2游戏端设计 13
4.2.1游戏功能设计 13
4.2.2游戏规则设计 14
4.3服务器端设计 15
4.4数据库设计 17
第5章 系统功能实现 19
5.1数据库实现 19
5.2服务器实现 19
5.3 客户端实现 22
第6章系统测试 27
结论 29
参考文献 30
致 谢 31
第1章 绪论
1.1开发背景
当今世界,智能手机飞速发展,不断更新换代,各种便捷性应用的制作和实现,让手机作为了日常生活中不可分割的一部分。电子游戏作为电子行业应运而生的一种娱乐休闲的产物,自然紧随智能手机发展的潮流,手游现在经过近几年的发展,风靡世界。无论是益智动脑类型,冒险竞技类型,角色扮演类型,还是休闲娱乐类型,都能在各大手机商城里面挖掘出许多种类。
纸牌游戏是从现实生活中搬到了电子产品上,从电脑游戏再到手机游戏,都因为其本身通俗易懂的玩法,吸引了很多玩家。纸牌相传诞生于唐宋时期的叶子牌,因为规则简单,但牌面组合多变,使得游戏过程十分有趣,也逐渐流行于大江南北。将纸牌游戏移动化不仅方便大家随时随地进行游戏,也避免了无人可以一起游戏的困扰,的确是老少皆宜。现有的纸牌游戏包括通俗性扑克牌例如斗地主,和地域性比较强的像德州扑克,五十K等,但基本上包含了我们平时生活中所熟悉的所有扑克牌游戏,基于此,我结合卡牌类游戏的规则设计出一款双人竞技类游戏。游戏结合了卡牌游戏的数值和攻击功能,保留了扑克牌的花色和牌面设计,通过更为简单的随机数值为玩家提供多变的游戏环境。
1.2国内外现状
随着全球互联网水平的提高和智能手机应用的更新迭代,网络游戏载体丰富多样,游戏质量不断提高,游戏受众越来越广泛。从2007年到2016年,全球网络游戏市场规模年均复合增长率达到了16.57%,经过2016和2017年的井喷式发展,手机游戏趋于稳定。
据中国产业信息网调查网《2018年中国网络游戏行业发展现状及发展趋势分析》一文显示,2008 年我国游戏用户规模为 0.67 亿人,到了 2017 年我国游戏用户规模增长至 5.83 亿人,复合增长率达 27.17%,2017 年,国家新闻出版广电总局批准出版国产游戏约 9,800 款,其中移动游戏约占 96.00%,而其中移动休闲游戏占整个市场的十分之一。2017年下半年,从博雅、闲来到网狐,再到同城游、花色互娱等一众平台的加入推动了移动端棋牌游戏的井喷式发展。
1.3系统设计目的及意义
本系统旨在创作出一款不同于传统纸牌游戏的,双人对战类纸牌游戏。游戏有新的玩法,并打破了现有三人以上玩纸牌的形式,解决了牌面预知的问题,随机数的应用使得整个游戏过程充满不确定性,提高了游戏趣味。同时,在实现项目的过程中,我需要整合现有的知识,学习新知识,在系统开发的过程中,实践运行,融会贯通。
1.4论文结构
论文将从以下四点进行系统项目实施过程的阐述:
- 项目需求分析和系统结构规划
- 项目详细设计
- 系统实现及编码
- 系统测试及总结
第2章 相关技术分析
2.1 spring-mvc框架
Spring-MVC是一个强大的web框架,属于SpringFrameWork的后续产品,作为前后台的一个粘合剂使用【1】。借助于强大的注解功能,Spring-MVC提供了类似于POJO的开发模式,极大地简化了控制器的开发和测试。Spring MVC建立在Servlet API上,并使用了多线程处理请求的I/O异步的模式。Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。运行原理如下:
图2.1 Spring MVC运行原理图
(1) Http请求:客户端提交的数据请求提交到DispatcherServlet
(2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。
(3) 调用处理器:DispatcherServlet将请求提交到Controller。
(4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。
(8) Http响应:视图负责将结果显示到客户端,由于客户端属于Android 程序,所以实际并没有使用到“V”这一部分,只是把Model传给客户端,再做其他处理。
2.2 websocket通信框架
Websocket是一种基于tcp传输控制协议的新的网络协议,它允许服务器端主动发消息给客户端,真正实现了(full-duplex)全双工通讯【2】。
图2.2 websocket运行模式
http协议是一种单向的,无状态的,无连接的应用层协议,它采用了点对点的请求和响应模式,一个请求对应一个响应,而且只能由客户端发起通信请求,服务端对请求做出应答处理。所以说,http协议有一个弊端则是服务器无法实现主动向客户端发送消息。这种单向请求,注定了无法实现较为复杂多变的通讯状态,而且服务器端有什么连续的变化,客户端都无法及时获取到。为了实时监听服务器端状态,大多数web应用程序都将通过频繁的异步javaScript和ajax请求实现轮询或者长连接,客户端以一定频率不停向服务器端发送请求,来保持两端的数据同步。但这种方式效率比较低,因为需要不停地进行请求,或者http连接始终保持打开状态,非常浪费资源。在基于此的情况下,基于http的websocket协议就被提出来。
Websocket是基于http协议的,websocket协议的握手类似于http,多加入了Upgrade: websocket,Connection: Upgrade这两个属性,这就是websocke区别于http的地方,它告诉服务器自身是一个websocket协议,需要找到对应的处理器处理。Sec-WebSocket-Key是WebSocket客户端发送的一个 base64编码的密文,要求服务端必须返回一个对应加密的Sec-WebSocket-Accept应答,否者将会抛出错误,并关闭连接。
websocket只要建立连接后,便可以维持双方通讯,直到服务器和客户端断开连接为止,一旦websock连接建立起来,后续的数据都会以帧序列的模式进行传输,不再需要发送新的连接请求。而在http的长连接中,每次数据请求,都需要客户端和服务器交换大量的http头部消息,交换率很低。
2.3 okhttp框架
在网络通信中,数据的交换效率是非常重要的,高效地进行http请求会加快下载速度,减少带宽。Okhttp便是基于此目的设计出来的一个轻量的Android端网络框架,也是目前比较很受欢迎的几个框架之一。它具备以下优势:
a.允许连接到同一个主机地址的所有请求,提高请求效率[3]
b.共享Socket,减少对服务器的请求次数[3]
c.通过连接池,减少了请求延迟[3]
d.缓存响应数据来减少重复的网络请求[3]
e.减少了对数据流量的消耗[3]
f.自动处理GZip压缩[3]
在okhttp3中加入了对websocket的支持。相比于httpClient庞大的API数量和较难升级和扩展的特性,和HttpURLConnection而言,okhttp无意识高效,快速的。而且,从Android 4.4开始Google官方以及开始将源码中的HttpURLConnection替换成了okhttp,在6.0版本以后移除了对httpClient的支持。
2.4 surfaceView框架
surfaceView是属于android的一个视图类,是View的继承类,在视图中内嵌了一个专门用于绘制的surface(屏幕缓存),我们可以控制这个Surface的格式和尺寸[4]。Surfaceview控制这个Surface的绘制位置。SurfaceView是在最底层的,在其上可以用来显示其他的组件。
surfaceView继承于View,而View本身便具有刷新重绘的能力,View在onDraw中绘图,View的重绘便通过invalidate或postInvalidate方法不断重新执行onDraw,但是onDraw是在Android的UI线程,即主线程中进行的,此时UI线程不断执行onDraw,可能会造成线程阻塞无法去响应触屏和按键请求,虽然两次重绘之间加入了线程休眠,但是仍处于不可控的状态。SurfaceView带有独立于窗口的surface,这样可以让子线程在这个独立的surface表面绘制,然后通过post一个消息发送给子线程,把surface中绘制的东西绘制到真正的界面上来,这样子UI线程就空闲出来,这也是surfaceView经典的双缓冲机制。可以通过子线程进行不同画布大小的锁定和线程刷新的快慢,这样可以通过指定不同的线程休眠时间来实现不同帧频的游戏。
第3章 系统需求分析架构设计
3.1系统需求分析
本系统定位是一个基于Android的对战类纸牌游戏,系统使用简单的游戏规则,游戏玩家在两幅牌中决出胜负。玩家下载app后,注册后开始游戏,在连网的情况下,匹配对手,进行游戏,按照游戏规则判定最终胜负。
具体功能包括:
1.用户下载安装客户端之后可以连接服务器,可以通过手机号注册,绑定身份。
2.用户可以对游戏配置进行设置,例如声音开关,账号注销,信息隐藏等。
3.用户有虚拟金币,注册时赠送。
4.用户可以在个人中心添加和修改自身资料。
5.用户匹配对手进行公平的游戏体验,游戏结束会根据结果进行经验和金币分发。
6.服务端器端存储用户信息,用户可以查看其它用户的部分信息。
基于以上功能,设计用例图如下:
图3.1 用例图
根据游戏规则,设计游戏界面状态图如下:
图3.2 游戏界面状态图
3.2系统框架设计
3.2.1服务器端模块
在本系统中,服务器端的主要作用在于构建数据存储的通道,响应客户端进行的数据请求,以及在游戏中及时更新对手的消息,所以选择java开发语言,以及eclipse开发平台,使用spring spring mvc MyBatis框架来搭建整个项目,项目采用maven构建而成。
选择ssm的框架模式,主要是因为各自业务分工比较明确,编码简单,在java web开发中,ssm框架是首选的主要框架之一[5]。其中spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架[6]。SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制[7]。MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。如下图所实controller负责接收客户端发送过来的action请求,通过调用相应的service将业务拆分开来,找到对应的dao,通过daoMapping映射到对应的数据库语句上面,完成数据的增删改查[8]。
图3.3 ssm框架图
采用maven项目管理工具,可以通过一小段描述来管理整个项目的构建,maven在项目中最主要的作用就是管理jar包,在程序开发中,会使用到三种以上的框架和各种源工具,这些都需要jar包的依赖,在没有使用maven之前,即使是搭建一个小的web项目,都要引入十几,几十个包,不仅要费尽心思从网上下载,还要验证版本是否可用,而往往不同版本的jar包之间可能会有千丝万缕的关系,导致jar包冲突,项目报错或者崩溃。使用maven管理项目后,使用哪些jar包只需要在pom.xml文件中按要求写上包名,版本即可,如何有jar包发生冲突,只需要修改版本号,或者使用provided兼容模式即可。Maven安装成功后,会在主机上建立本地仓库,同时它本身又有一个远程仓库。在项目编译时,maven会查找本地仓库是否有所需要的包,如果没有就需要连接程仓库进行下载。遇到依赖冲突时,也可以使用exclusions进行依赖排除。
3.2.2客户端模块
Android客户端负责游戏界面的展示以及所有功能的展示,使用了AndroidStudio开发平台。Android Studio 基于IntelliJ IDEA,是一个智能便捷的Android集成开发工具。相比于Eclipse,AS在经过了初期的测试和不稳定后,现在已经很非常稳定和先进,其强大的代码提示功能和gradle脚本化构建工程的方式极大地提高了编程效率[9]。AS会根据你输入的内容,匹配出所有结果,而不是很严谨地需要输入开始部分。Gradle的使用,只需要一句简单的脚本compile 'xxx'即可将它们添加到你的工程依赖中来,并且通过依赖关系来升级和管理这些jar 包和aar包。AndroidStudio还包含了许多其他很实用的功能如下:
- 颜色,图片可以在布局和代码中实时预览
- 具有各种实用插件:ADB、Git、markdown等
- 自动保存,无需手动保存
- 图片可以转换成.9图片,并可以直接编辑.9图片
- 智能重构、智能预测报错
- 多资源文件夹配置,所有资源文件一目了然
3.2.3通信模块
在游戏中玩家需要等待对方出牌,按照http的方式只能发送一个长连接或者使用轮询的方式,不断请求对方是否出牌,而且,在游戏初始时,需要服务器发送一个双方共享的开始信号,总之,对比http现有的请求方式后,选择websocket可以比较好的实现玩家即时获取消息的功能。
客户端使用okhttp框架进行数据请求,okhttp3支持websocket协议,对它进行封装,在使用时相比于普通http请求只是请求方法发生变化,因此作为客户端的请求工具非常合适。
以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。
相关图片展示: