基于Java Web的猜歌游戏设计与实现

Posted epoch211

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Java Web的猜歌游戏设计与实现相关的知识,希望对你有一定的参考价值。

获取项目源文件,技术交流与指导联系Q:1225467431

   

随着社会的不断发展,越来越多的人面临的压力越来越大,人们渴望随时随地都能放松自我。然而游戏正成为人们释放压力,放松自己最行之有效的娱乐方式之一。而基于Java Web的猜歌游戏以其界面美观,操作简单,对硬件要求低等优点将会备受大家的青睐。系统通过数据库对用户基本信息和歌曲信息进行统一管理,借助经典的框架Servlet对数据进行处理,又选择了前端一些功能强大的插件对数据进行展示,将猜歌与游戏很好的结合起来,意在给用户创造了一个良好的交互平台。为了更好地管理和维护本系统,系统还专门设置了管理员角色和用户角色。管理员主要的任务在于对用户上传的歌曲进行审核。而用户则是享受猜歌的乐趣,使得猜歌游戏能够稳定、高效地运行。

 为了增强游戏的趣味性,告别了原始猜歌游戏的不灵活性。该系统通过用户上传歌曲功能时时更新数据库,使得歌曲不断地更新,玩家与玩家之间可以互相分享歌曲。随着网络的发展,该游戏还存在大量地后续研究工作。

    

关键词:猜歌;游戏;数据;Servlet框架;Java Web

 

Java Web-based song guessing game design and implementation

Abstract

With the continuous development of society, more and more people are faced with the pressure increasing, people want to relax yourself anytime, anywhere. However, the game is becoming a people release stress and relax one of their most effective forms of entertainment. The Java Web-based song guessing game with its beautiful interface, easy operation, and low hardware requirements will be much everyone of all ages. System through a database of user information and song information for unified management, with classic Servlet framework for data processing, and selected a number of powerful front-end plug-ins for data display, the song guessing game a good combination, meaning giving the user to create a good interactive platform. , intended for the user to create a good interactive platform. In order to better manage and maintain the system, the system also sets the administrator role and user roles. Administrator main task is to audit users to upload songs. And users will enjoy the fun of guessing the song, so guess song game can be stably and efficiently run.

 In order to enhance the game interesting, bid farewell to the original song guessing game inflexibility. The system functions by users to upload songs from time to time to update the database, so the song constantly updated, you can share songs with each other between players and the players. With the development of the game there are a large number of follow-up research.

 

KeywordsGuess the song; play; data; Servlet framework; Java Web


   

1     1

1.1 研究的背景及意义 1

1.1.1 研究的背景 1

1.1.2 研究的目的与意义 1

1.2 研究的主要内容 2

1.3 本文组织结构 3

1.4 本章小结 3

2 系统研究的理论依据和技术背景 5

2.1 猜歌游戏的设计思想 5

2.2 系统开发环境简介 5

2.2.1 Eclipse简介 6

2.2.2 Tomcat介绍 6

2.2.3 mysql数据库简介 7

2.2.4 系统开发环境的搭建 7

2.2.5 Servlet框架简介 7

2.3 本章小结 8

3 系统的需求分析和概要设计 9

3.1 系统需求分析 9

3.1.1 系统功能需求分析 9

3.1.2 系统性能需求分析 10

3.2 系统概要设计 11

3.2.1 系统流程的设计 11

3.2.2 系统主要的难点设计界面 12

3.2.3 数据库表的设计 13

3.3 本章小结 14

4 系统的实现 15

4.1 系统界面的实现 15

4.2 登录界面的实现 15

4.3 游戏菜单界面的实现 17

4.4 选择歌曲类型界面的实现 18

4.5 猜歌游戏主界面的实现 18

4.6注册账号界面的实现 22

4.7 上传歌曲菜单的实现 23

4.7 游戏排名界面的实现 25

4.7 歌曲审核界面的实现 27

4.8 本章小结 29

5     30

5.1 单元测试 30

5.2 系统测试小结 36

6 总结与展望 37

6.1 论文总结 37

6.2     37

   38

参考文献 39

 

 

1  绪 论

本章首先介绍了课题的研究背景、研究的目的与意义,其次对本文主要研究的内容进行了叙述。

1.1 研究的背景及意义

1.1.1 研究的背景 

接口到手机App的纯数据化接口,变化是如此地翻天覆地。显然的,这些变化推动了Web框架的发展,如考虑到REST 服务支持,Tomcat 6Tomcat 7从只支持GET,POST方法到对GET,POST,DELETE,PUT,HEAD等多种方法的支持[1];与此同时,Jdk的每次发布都会给Web mvc框架带来新的技术热点,如Spring3 Mvc Annotation 配置取代Spring2 Mvc原有的XML配置文件升级[2]

然而随着网络的发展,网页游戏已经逐渐取代以往的单机游戏成为游戏界的主流。网页游戏凭着它特有的互动性,深受各个年龄段人们的喜爱。网页游戏从其重返网游市场之始,就已经注定了它在网游市场中必定占有一席位置,而以Java为核心技术的必定是网页游戏未来发展的重头戏

所以设计一款休闲娱乐、简易方便的益智游戏前景非常客观。本系统就是基于Java Web开发的一款休闲益智游戏。意在于将歌曲与游戏相结合,给用户一个不一样的娱乐方式。

1.1.2 研究的目的与意义

游戏在现今社会里已为人们释放压力、放松自己最行之有效的娱乐方式之一。随着网络技术的快速发展,网页小游戏以其界面美观、操作简单、无需安装、对硬件要求低等优点备受广大玩家的青睐。因此,设计一款符合大众风格的网页小游戏具有重要意义。在分析网页游戏的基础上,首先通过游戏策划和需求分析确定游戏规则、界面布局和游戏所需实现的功能然后用htmlCSS处理各种界面元素,完成游戏界面的制作;最后采用Java Scrip语言和Java 面向向对象语言编程实现游戏选泽类型、游戏开始、音乐播放、上传歌曲、个人信息查询、猜歌排名、歌曲审核、选择歌曲类型、友好的猜歌界面、猜中提示、猜错提示、图片消除、图片重置,积分等级提高、虚拟金币获取以及重新开始和下一关等功能。为了体现游戏的竞技性,增加趣味性,特设计sql2008数据库以保存玩家的得分及排名信息,用Java实现对数据库的直接操作,通过框架连接前端页面和后台Java代码,实现提交分数和查看排行榜的功能。同时为了提高游戏性能,对路径判断算法进行了优化。本文论述了猜歌游戏的开发背景、意义,介绍了系统开发所使用的环境、工具以及开发语言,并对相关的开发技术进行了阐述。重点论述了游戏策划、需求分析、详细设计、动画设计、代码实现和游戏测试的过程。综上所述现阶段网页游戏的开发进入了一个新的阶段,在这个阶段的开发中网页游戏不仅需要丰富的编程经验,还需要掌握不同框架的优缺点和用户新的娱乐需求的进一步发掘,从而开发出符合用户需求,吸引用户的游戏。

1.2 研究的主要内容

该游戏是一个益智休闲的小游戏。歌曲能让人心情舒畅,而游戏则让人轻松愉悦,但如果两者结合,这无疑将会受到广大玩家的青睐。本游戏还有一大特点是无需下载客户端,一经注册便能使用。当进入游戏时玩家可以任选所需要挑战的难度。游戏分为普通场和挑战赛。在普通场当中你可以选择不同类型的歌曲进行猜歌,歌曲类型分为流行歌曲、经典歌曲、民族歌曲、黄梅戏。很显然,这基本满足所有玩家的需求。在普通场中,你可以随意猜歌,并且猜对以后你可以获取一定的金币和积分,但是你是不能获取等级的。即使你猜错了,你也可以选择继续猜或者选择下一首。然而在挑战赛中,这四种歌曲类型都有可能出现,并且如果你猜错了,你只有用你的一定的金币去换取下一首歌曲。倘若你余额不足,将会终止你的猜歌游戏,你也可以选择放弃使用金币。在挑战赛中,每猜对一首歌,你的积分、等级、金币都会上升。而且你所闯的关数与你领取的奖励成正比。但是如果你猜错了,系统也会扣除一定的积分。下面我将会阐述金币、积分和等级这三者的意义和区别。积分只是代表你猜歌场次的多少。不论你猜对猜错,都会增加。而金币则是一个类似虚拟的网络人民币,你只有在猜对歌曲的情况下才能获得,当你有一定的金币的时候,你在挑战赛当中将会很随意的通过,毫无疑问,你领取的奖励也就会越多,同时等级也会越来越高。所以玩好这个游戏的根本在于储存金币。

 如果你认为该游戏仅仅是这样,那你就大错特错了。为了体现游戏的公平性和趣味性,游戏中还有一个上传歌曲的功能。凡是注册账号者都可以将你喜爱的歌曲进行上传。为了保证歌曲的质量,该系统有一个歌曲审核的功能。审核歌曲有一个专门的负责人。负责人通过歌曲的信息通过试听和查阅资料,核实歌曲是否能够加入到猜歌游戏当中。如果审核通过,则加入到猜歌游戏列表当中,给广大玩家进行猜歌,如果审核过程中发现上传的歌曲不符合要求,则不给予通过。

1.3 本文组织结构

本文主要详细介绍了Java Web的发展史和现在所占的主导地位,而网页游戏又以其界面美观,操作简单,对硬件要求低等优点将会备受大家的青睐。

1首先概述了项目的研究背景,分析当前Java Web在当前发展下的一种趋势,提出了本文研究的主要内容。其次,对项目研究的目的和意义进行了综述,其中也阐述了

2章本章主要介绍了系统研究的理论依据,如何才能实现猜歌游戏,如何对猜歌游戏实现多样化、趣味化、简易化、动态化、管理化、为主题进行展开。同时对系统的开发环境做了简单介绍。

3章本章主要对游戏所实现的功能进行需求分析,对猜歌游戏和系统性能进行了分析,分析了猜歌游戏实现的可行性。对系统的性能进行了详细的分析同时也提出来解决性能问题的解决方案。同时对系统的流程进行了设计。

4章根据系统的概要设计进行详细的设计与实现。功能来具体实现。

5章主要对系统的功能进行单元测试,并对系统的测试结果进行总结。

6章是对全文的总结与展望,总结本文的研究工作和成果,展望未来的技术努力方向。

1.4 本章小结

本章首先概述了项目的研究背景,分析了Java Web 在当今社会的地位和发展并且也将自己的优势发展到未来。随后又提出了网页游戏也随着 Web的发展而越来越受到大众的喜欢,进而提出了本文研究的主要内容。随后又对猜歌游戏实现的可行性和性能进行综合考虑,提出猜歌游戏的需求和设计出猜歌游戏的流程。再通过设计出的需求对猜歌游戏功能实现进行详细设计。最后对系统进行单元测试并且总结自己的成果和后期维护性。

                   

 

2 系统研究的理论依据和技术背景

本章主要介绍了系统中猜歌游戏的理论依据和系统的开发环境。

2.1 猜歌游戏的设计思想

本系统主要是通过Java Web实现猜歌游戏,那么Java Web的优势体现在以下几个方面。安全性:有Java做强有力的后盾支撑,安全性高;广泛性:不但有成熟的设计模式,而且还有成熟的框架,可以用很多表达式以及标签来展示我们需要的内容;稳定性:安全性高,也是它具有稳定性的原因之一,另外,因为Java Web被用来做很多大型的商业项目,所以说,稳定性比较高,然而还有很多高手不断的改进;又有强大的数据库统一管理数据,要实现猜歌游戏一点也不困难。猜歌游戏的主要设计在于表设计。通过建立表关系,使得数据与数据之间既能独立又能共享。

显然用户表主要用于管理用户的基本信息,通过该表能够给用户提供查询排名,查看基本信息功能,而管理员则可以对用户进行修改删除功能。音乐表主要是为了管理音乐功能。通过这张表可以实现猜歌功能。同时这张表也关联其本身,用于音乐的分类,又管理用户表是为了查询该歌曲是哪一位用户上传的。还有一张音乐审核表。主要目的是为了管理用户上传歌曲。管理员通过查看音乐信息,试听功能,审核该歌曲能否加入到音乐列表中,为广大的猜歌爱好者进行服务。很显然,他需要关联音乐表,当然我们也需要知道是哪位用户进行上传的,所以也需要关联用户表。通过这三张表基本上能够管理猜歌游戏的基本数据,然而Java Web又有比较流行的Java语言做支撑。还有许多开源的前端框架,比如Jquery实现局部刷新技术。又有特有的标签对音乐进行播放,再加上许多架包都能提供上传与下载功能。实现猜歌游戏的登陆、开始游戏,玩家排名,注册用户、查看个人信息、上传歌曲、歌曲审核等功能一点也不困难。

 

2.2 系统开发环境简介

2.2.1 Eclipse简介

Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境[3]。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development KitJDL. 虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development EnvironmentPDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所[4]

2.2.2 Tomcat介绍

TomcatApache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由ApacheSun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 JSP 2.0 规范。因为Tomcat 技术先

进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发

商的认可,成为目前比较流行的Web 应用服务器[5]。目前最新版本是8.0

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和

调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上

配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)

页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运

行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独

运行的[6]。诀窍是,当配置正确时,Apache HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet[7]。另外,TomcatIISWeb服务器一样,具有处理HTML页面的功能,另外它还是一个ServletJSP容器[8],独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为8.0

 

2.2.3 Mysql数据库简介

MySQL是一个关系数据库,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一[9]MySQL 是一种关联数据库管理系统[10],关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 php Apache 可组成良好的开发环境[11]

 

 2.2.4 系统开发环境的搭建

Java Web开发环境的搭建主要分为软件和硬件两个部分。

1Java Web开发的系统需求

操作系统支持:Windows 系统或者Linx系统

硬件配置:系统盘需要至少2G的剩余硬盘空间,用于安装Eclipse TomcatMysql

2)系统的开发工具

①Eclipse8.0

②Tomcat8.0 

③ Mysql

④ Window系统电脑一台

3)系统的开发语言

① Java

2.2.5 Servlet框架简介

Servlet是一种服务器端的编程语言,是J2EE中比较关键的组成部分(其实学到现在J2EE里面的13个标准才接触了3个,他们分别MWC)上发布的手机操作系统[12]Servlet本质上也是Java类,编写Servlet需要遵循java的基本语法,但是与一般的Java类不同的是Servlet是只能运行在服务器端的Java类,而且必须遵循特殊的规范,在运行过程中有自己的生命周期,这些特性都是Servlet所独有的[12]。另外Servlet和HTTP协议是紧密联系的[13],所以使用Servlet几乎可以处理HTTP协议所有方面的内容,这也正是Servlet受到开发人员青睐的最大原因[14]

2.3 本章小结

本章主要介绍了猜歌游戏的设计思想,通过表结构分析该猜歌游戏的可行性。重点讲解了为了实现猜歌游戏所需要开发环境。

 

3 系统的需求分析和概要设计

系统的需求分析是系统开发过程中的基石,是系统开发过程中比不可少的环节,影响着系统的整个开发过程。在开发本课题前,本人对有关本课题的国内外市场以及现有成果进行了研究和分析,在实现基本功能的前提下又加入了新的功能,因此具有一定的竞争力和市场价值。

3.1 系统需求分析

3.1.1 系统功能需求分析

系统主要实现以下几个功能:登录注册开始游戏上传歌曲歌曲审核个人信息查询游戏帮助、猜歌排名、关卡设置、猜歌、猜错猜对提示等

登录是为了防止没有申请账号的用户访问本系统,却无法对这些用户进行统一管理。要想玩该游戏需要申请账号以后方能通过登录界面进入本系统,然后进行猜歌。选择开始游戏后,为了增加游戏的趣味性和挑战性。可以挑战不同类型的歌曲,分为流行歌曲、经典歌、民族歌曲、黄梅戏、随机歌曲。选择游戏类型以后便可以进行猜歌。为了体现游戏的操作方便,用点击按键获得歌曲而代替以前的文本输入,而且还可以修改自己选定的歌曲。猜歌的关卡分为普通场和挑战赛,两者都有奖励。在普通场中,当猜错以后,会有一定的积分奖励。但如果猜对以后,不仅积分奖励翻倍,还会奖励金币。并且猜错以后还可以选择继续猜,也可以选择挑战下一首。然而对于挑战赛来说,当你猜错以后,你将无法继续进行下一首,除非你愿意花费一定的金币。对于猜错的玩家会扣除一定的等级。但是还会有积分的奖励。倘若你猜对了,你将会获得一定的积分、等级、金币。而且这些奖励会随着你挑战的关数而逐渐翻倍。为了让广大的玩家很快的熟悉该系统,还专门有个游戏帮助。点击以后即可下载。通过查看游戏帮助很容易上手该游戏。但是如果仅仅是这些功能很难满足广大玩家的需求。为了增强游戏的趣味性和挑战性。本系统还增加了歌曲排名和上传歌曲的功能。玩家可以查询所有的玩家的排名,也可以按条件进行查询。在上传歌曲的过程中,系统还专门设置了管理员角色和用户角色。用户可以将自己喜欢的歌曲进行上传(如图3.1所示)。但是为了保证歌曲的质量,管理员会对歌曲进行审核。审核过程中管理员可以查看歌曲的信息和试听该歌曲来判断该歌曲的信息是否属实。如果属实,则给予上传。并且该歌曲将会是广大玩家所猜的对象。倘若审核不通过。则无法加入猜歌游戏列表当中(如图3.2所示)。

 

          

 

3.1 管理员功能

 

          

3.1 用户功能

 

3.1.2 系统性能需求分析 

选择一个好的框架对于提高系统的性能有很大的提高。虽然如今市场上都流行SSH框架,也就是Struts+Spring+Hibernate,又或者是Mybatis作为访问数据库的桥梁。但是这些框架都是为了提高开发速度,降低开发的成本。比较适合大型的项目。然而计算机的性能与速度成反比。要想提高计算机的速度,就必须要多消耗一定的内存。所以我选择了Servlet框架。其实这些框架本质都是从Servlet演变而来。为了实现多人开发。用XML技术做了一系列的配置。也做了许多的判断。所以自然而然对于原始的Servlet框架性能明显高于这些框架。因为这个系统基本上是自己独立完成。综合考虑,Servlet框架性才是适合自己的框架

对于猜歌排名中的列表展示,为了提高用户的查询速度,我选择了分页模式进行查询。可以分页的方式可以由玩家自己来定义。本来一次性全部加载完数据变为分批加载。这样既能满足玩家的需求,又能提高系统的性能

 而另一个则是用局部刷新代替了整个页面的刷新。也就是用Ajax进行异步刷新,又以前的整个页面进行传输转化为数据以键值对的方式进行传输,性能显然提高了许多。

3.2 系统概要设计

3.2.1 系统流程的设计

通过浏览器访问站点以后进入到登录界面,未注册的可以注册账号再进行登录。在用户名丶密码验证码都正确的情况进入游戏菜单界面。趟若不正确又跳到登录界面进行再次登录。在游戏菜单中选择所想要操作的功能。选择开始游戏后进行猜歌,根据猜歌的结果返回给歌曲排名。选择上传歌曲后,在长传歌曲填写歌曲信息以后对歌曲进行上传。上传完以后,管理员对所有玩家的上传的歌曲进行审核,审核通过的加入到猜歌游戏当中,审核不通过的保留在审核列表当中。选择游戏帮助以后即可下载该游戏的帮助文档。即可快速熟悉该系统。游戏的流程图如图3.23.3所示

 

                           3.2 系统总体流程图

 

 

3.3 猜歌流程图

3.2.2 系统主要的难点设计界面

为了使得用户猜歌更加的方便和增加游戏的趣味性,便由按键选择框代替原本的输入框。当一首歌曲随机出现时,便获取该歌曲的名称,然而从140个常用字中随机取出一定的汉字,使得随机产生的汉字和歌曲的名称加起来正好30个字符,展现给玩家。玩家通过点击按键能获取到汉字,并且也可以删除所选择的汉字。最终获取出歌曲的名称,返回给服务器进行判断。如图3.4所示

而另一个难点则是为了页面的美观,和系统性能的考虑。在游戏排名列表和审核列表中选择了Ecside 前端页面框架。该框架不仅样式好看,还具有很多种功能。其中主要的可以选择玩家所需要分页的页大小、以Excel或者Csv格式导出列表、打印列表等功能.如图3.5所示

 

3.4选择歌曲名称

          3.5 猜歌排名列表

 

3.2.3 数据库表的设计

一个系统好坏在于数据库表的设计,一个完美的设计不仅能体现代码逻辑结构的清晰,更能体现代码的质量。提高代码的重复利用性,减少计算机的内存,提高效率。本系统通过需求分析设计出了用户表,歌曲表和歌曲审核表。用户表作为基本信息表,歌曲表则关联用户表,将用户和歌曲紧密的联系起来。而歌曲审核表既关联歌曲表又关联用户表。通过一对一、一对多、多对多的关系,三者既能独立,又互相联系。如图3.6所示

 

 

3.6 表与表之间的关系

3.3 本章小结

本章主要对游戏所实现的功能进行需求分析,对图形和系统性能进行了分析,分析了图形的特点和实现的可行性。对系统的性能进行了详细的分析同时也提出来解决性能问题的解决方案。 对系统的流程,系统所需的图形文件,系统的总体架构和系统用例进行了设计。通过本章的分析、设计能更加具体的了解系统功能,对系统所要实现的功能和图形文件有了更深的认识。为下一章系统功能的具体实现提供了可靠的参考依据。

 

4 系统的实现

本章主要是对系统的主要功能的实现。

4.1 系统界面的实现

系统的每个页面都会有一个按钮来实现页面的跳转。当点击按钮以后,系统会去寻找用户所需要请求的页面,也就是控制器。控制器会根据用户的业务需求去调用业务逻辑层的代码去处理业务,业务逻辑层则会访问数据库,提取用户所需要的数据,最后以页面的方式将数据返回给用户[15]。如图4.1所示

 

 

4.1 基于mvcServlet实现原理

4.2 登录界面的实现

通过登录页面获取用户的基本信息,包括用户名、密码、验证码。在服务器端首先对验证码进行验证。然后再去验证用户名和密码。通过用户名去查询数据库中有无该用户的信息,如果存在再去验证密码是否正确,倘若都正确,则允许进入猜歌游戏系统进行猜歌。否则返回登录界面。

 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String account = request.getParameter("account").trim();

String password = request.getParameter("password");

String captche = request.getParameter("captche").trim();

HttpSession session = request.getSession(false);

if(null != session){

String identityings = String.valueOf(session.getAttribute("identityings"));

if(identityings.equals(captche)){

Credential credential = UserService.Login(account, password);

if(credential.isApproved()){

session.setAttribute("GameUser", credential.getUser());

response.sendRedirect("home");

}

else{

request.setAttribute("msg", "你输入的用户名或密码有误,请重新入");

           request.getRequestDispatcher("/views/login.jsp").forward(request,response);

}

}

else{

request.setAttribute("msg", "你输入的验证码有误!");

request.getRequestDispatcher("/views/login.jsp").forward(request, response);

}

}

else{

request.setAttribute("msg", "超时");

request.getRequestDispatcher("/views/login.jsp").forward(request, response);

}

}

   

    

4.2 登录界面

4.3 游戏菜单界面的实现

 用户可以根据游戏菜单进行不同的操作。

      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       List<User> userList=UserService.query( " where 1=1 ");

       request.setAttribute("userList", userList);

       System.out.println(userList.size());

   request.getRequestDispatcher("/views/gameList.jsp").forward(request, response);

  }

 

4.3 菜单界面

4.4 选择歌曲类型界面的实现

点击开始按钮以后进入歌曲类型界面。游戏分为两种类型:普通场和挑战赛。普通场又分为流行歌曲、民族歌曲、经典歌曲、黄梅戏。挑战赛随机歌曲。

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String flag=request.getParameter("flag");

request.setAttribute("flag", flag);

request.getRequestDispatcher("/views/playgame.jsp").forward(request, response);

}

 

 

4.4 关卡挑战界面

 

4.5 猜歌游戏主界面的实现

        用户选择不同类型的歌曲以后,将选择的信息反馈到服务器端,在服务器端通过查询数据库找到用户选择类型的歌曲。随机产生一首歌曲,并获取歌曲的歌名和地址。再从数据库中取出140个常用的汉字。随机产生的汉字与歌曲的名称组合成30个汉字。再随机排列,展现在页面上。

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//获得session

User user=(User)request.getSession().getAttribute("GameUser");

//获取玩家基本信息

int userId;

if(user!=null&&!"".equals(user)){

userId=user.getIid();

User userGame=UserDao.getUser(String.valueOf(userId));

request.setAttribute("user", userGame);

int userDj=user.getDj();

String dj=null;

if(userDj<1000){

dj="青铜";

}

else if(userDj>=1000&&userDj<3000){

dj="白银";

}

else if(userDj>=3000&&userDj<6000){

dj="黄金";

}

else if(userDj>=6000&&userDj<8000){

dj="白金";

}

else if(userDj>=8000&&userDj<12000){

dj="钻石";

}

else if(userDj>=12000){

dj="最强王者";

}

request.setAttribute("dj", dj);

}

 

//获得关卡

String guanka=request.getParameter("dqdjg");

//定义当前第几关

int dqdjg;

if(guanka==null||"".equals(guanka)){

dqdjg=1;

}

else{

dqdjg=Integer.parseInt(guanka)+1;

}

request.setAttribute("dqdjg", dqdjg);

List<Grade> gcList=GradeDao.query();

int count=gcList.size();

List list=new ArrayList();

String msg="true";

// 1. 流行歌曲  2。民族歌曲 3.经典歌曲 4.黄梅戏 5. 随机歌曲

String flag=request.getParameter("flag");

String where=" where 1=1 ";

//表示挑战赛

if(flag!=null&&flag.equals("5")){

}

////表示普通场

else{

where=where+" and musicFid="+flag;

}

 

List<Music>  musicList=MusicDao.query(where);

try {

 //获取有多少首歌

 int countMusic=musicList.size();

 //随机产生一首歌

 int a=(int) (Math.random()*countMusic+1);

 if(a>=1){

 Music music=musicList.get(a-1);

 request.setAttribute("music", music);

 //获取地址

 String musicUrl=music.getMusicPath();

 //获取歌曲真实名

 String musicRealName=music.getMusicRealName();

 // 获取歌曲名

 String musicName=music.getMusicName();

 request.setAttribute("musicUrl", musicUrl.trim()+musicName.trim());

 //获取music名字额长度

 int musicLength=musicRealName.trim().length();

 //随机获取30-musicLength个字

for (int i = 0; i < 30-musicLength; i++) {

     int b=(int) (Math.random()*count);

     list.add(gcList.get(b).getSjzd());

 }

 //将歌曲名称放入 list集合中

for(int i = 0; i < musicLength; i++){

list.add(musicRealName.charAt(i));

}

List<Grade> syList=new ArrayList<Grade>() ;

//再循环30次随机取出

for(int i = 0; i < 30; i++){

int c=(int) (Math.random()*list.size());

System.out.print(list.get(c)+",");

Grade grade=new Grade();

grade.setSjzd(String.valueOf(list.get(c)));

list.remove(c);

syList.add(grade);

}

//获取猜歌游戏按钮

StringBuilder gequan=new StringBuilder();

for(int i=0;i<30;i++){

int d=i+1;

 gequan.append("<li>

<a href="javascript:void(0);"

id=‘click_"+d+"‘ name =‘"+syList.get(i).getSjzd()+"‘ >"+syList.get(i).getSjzd()+"</a></li>");

}

System.out.println(gequan);

request.setAttribute("gequan", gequan);

StringBuilder gequz=new StringBuilder();

//获取猜歌的一共需要几个字

for(int i=0;i<musicLength;i++){

int d=i+1;

gequz.append("<li><span id=‘cgyx_"+d+"‘  onclick=‘deletecg()‘></span></li>");

}

request.setAttribute("flag", flag);

request.setAttribute("gequz", gequz);

request.setAttribute("musicLength", musicLength);

    request.setAttribute("syList", syList);

 }

} catch (Exception e) {

// TODO: handle exception

}

request.getRequestDispatcher("/views/partials/musicmain.jsp").forward(request,response);

}

 

4.5 猜歌游戏界面

 

4.6注册账号界面的实现

通过注册界面获取用户的注册信息,在服务器中将用户所填写的信息保存在数据库中。

 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String userName=request.getParameter("zcyhm");

String password=request.getParameter("zcmm");

User user=new User();

user.setAccount(userName);

user.setPassword(password);

user.setCjsj(new Date());

user.setDj(100);

user.setJb(100);

user.setJf(100);

user.setSfgly(0);

boolean result=true;

try {

result=UserDao.add(user);

} catch (Exception e) {

result=false;

}

 

PrintWriter out = response.getWriter();

out.printf("<script type="text/javascript" charset="utf-8">"

+ "parent.UploadCallback(%s);</script>", result);

}

 

 

4.6 上传歌曲弹出框

 

4.7 上传歌曲菜单的实现

点击保存将用户所填写的信息传输到服务器端,服务器解析数据,以二进制流的方式读取传过来歌曲信息。然后创建磁盘路径,分配空间。将歌曲存放在指定的磁盘中。然后将歌曲的路径和名称存放在数据库中。

 

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

   String encoding =request.getCharacterEncoding();

   String rootPath=this.getServletContext().getRealPath("/");

   Examine examine =new Examine();

   boolean msg=false;

   DiskFileItemFactory disFactory=new DiskFileItemFactory();

   disFactory.setSizeThreshold(1024*4);

   disFactory.setRepository(new File(String.format("%s/resources/music", rootPath)));

   ServletFileUpload uploard=new ServletFileUpload(disFactory);

      

   uploard.setFileSizeMax(32*1024*1024);

   uploard.setHeaderEncoding(encoding);

   try{

   List<FileItem> items=uploard.parseRequest(request);

       Iterator<FileItem> iterator=items.iterator();

       HashMap<String,String> mapMain=new HashMap<String, String>();

       while(iterator.hasNext()){

        FileItem item=iterator.next();

        if(item.isFormField()){

        mapMain.put(item.getFieldName(), item.getString(encoding));

        }else{

        String fileName=item.getName();

        int index=fileName.lastIndexOf(File.separator);

        fileName=fileName.substring(index+1,fileName.length());

        long size=item.getSize();

        if(0==size || "".equals(fileName)){

        continue;

        }

        Date date =new Date();

SimpleDateFormat format=new SimpleDateFormat("yyyyMMddmmssSSS");

String newFileName=String.format("%s_%s", format.format(date),fileName);

        mapMain.put("FileName", newFileName);

        examine.setMusicName(newFileName);

File(String.format ("%s/resources/music/%s",rootPath,newFileName));

        item.write(file);

        }

       }

       examine.setUploadTime(new Date());

       examine.setMusicRealName(mapMain.get("gqmc"));

       examine.setMusicPath("/resources/music/");

       examine.setShzt(1);

       try {

        examine.setMusicFid(Integer.parseInt(mapMain.get("gqlx")));

} catch (Exception e) {

// TODO: handle exception

}

       User user=(User)request.getSession().getAttribute("GameUser");

       if(user!=null&&!"".equals(user)){

        examine.setUserId(user.getIid());

       }

       

       try {

        msg=ExamineDao.add(examine);

} catch (Exception e) {

e.printStackTrace();

}

   PrintWriter out = response.getWriter();

   out.printf("<script type="text/javascript" charset="utf-8">"

   +"parent.UploadCallback(%s);</script>",msg);

     }catch(Exception e){

        e.printStackTrace();

       }

}

}

 

 

4.7 上传歌曲弹出框

 

4.8 游戏排名界面的实现

游戏排名也就是将所有用户的基本信息通过前端插件Ecside展现在页面中。这里涉及到一个玩家的名次。由于每次玩家的信息都在改变。所以不能直接读取数据就可以了。必须在每次读取的过程中按照玩家的等级进行排序。排序从高到低。然后每次取出一个用户的信息,再给该用户分配一个名次,然后保存在数据库中。

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String cxyhm=request.getParameter("cxyhm");//用户名

    String cxyhdj=request.getParameter("cxyhdj");//等级

    String where=" where 1=1 ";

        if(cxyhm!=null&&!"".equals(cxyhm)){

           where=where+" and account like ‘%"+cxyhm+"%‘ ";

        }

        

//         if(cxyhdj!=null&&!"".equals(cxyhdj)){

//            where=where+" and account like ‘%"+cxyhdj+"%‘ ";

//         }

        request.setAttribute("cxyhm", cxyhm);

    List<User> userList=UserDao.query(where);

    //获取当前排名

    int paiming=0;

    int sygyh=0;

    if(userList!=null&&userList.size()>0){

       for(int i=0;i<userList.size();i++){

       try {

       User user=userList.get(i);

       if(userList.get(i).getDj()==sygyh){

       user.setPm(paiming);

       UserDao.modify(user);

       }

       else{

       paiming++;

       user.setPm(paiming);

       UserDao.modify(user);

       }

       //再把该值当作上一个,如果积分相同,等级也就相同

       sygyh=userList.get(i).getDj();

} catch (Exception e) {

e.printStackTrace();

}

       }

    }

    request.setAttribute("userList", userList);

    request.getRequestDispatcher("/views/success.jsp").forward(request, response);

}

 

4.8 猜歌游戏排名界面

 

4.9 歌曲审核界面的实现

歌曲审核的界面也是通过前端插件Ecside将数据库中数据展现在页面上。通过歌曲类型字段来区分该歌曲的状态。歌曲状态分为审核未通过,审核通过和审核不通过。点击试听以后通过Ajax请求传输到服务器中。通过歌曲的id在数据库中搜索到该歌曲,然后获得歌曲的名称和存放的路径播放该歌曲。

 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//获取审核歌曲的id

        String shId=request.getParameter("shid");

String gqmc=request.getParameter("gqmc");

String gqwjmc=request.getParameter("gqwjmc");

String gqlx=request.getParameter("gqlx");

String scsj=request.getParameter("scsj");

String shjg=request.getParameter("shjg");

User user=(User)request.getSession().getAttribute("GameUser");

boolean result=true;

//判断审核是否通过

//审核通过

if(shjg!=null&&"1".equals(shjg)){

Examine examine=ExamineDao.get(shId);

examine.setShTime(new Date());

examine.setShzt(4);

try {

ExamineDao.modify(examine);

} catch (Exception e) {

e.printStackTrace();

}

Music music=new Music();

music.setMusicFid(Integer.parseInt(gqlx));

music.setMusicPath(examine.getMusicPath());

music.setUploadTime(examine.getUploadTime());

music.setMusicName(gqwjmc);

music.setMusicRealName(gqmc);

if(user!=null&&!"".equals(user)){

music.setUserId(user.getIid());

}

try {

result=MusicDao.add(music);

//jason格式的字符串

 

} catch (Exception e) {

// TODO: handle exception

}

}

//审核未通过

else{

Examine examine=ExamineDao.get(shId);

examine.setShTime(new Date());

examine.setShzt(3);

try {

result=ExamineDao.modify(examine);

} catch (Exception e) {

e.printStackTrace();

}

}

 PrintWriter out = response.getWriter();

   out.printf("<script type="text/javascript" charset="utf-8">"

   +"parent.UploadCallback(%s);</script>",result);

}

 

 

}

 

4.9 歌曲审核界面

 

4.10 本章小结

本章主要对第3章中的功能需求,性能需求和概要设计进行了实现,完成了系统的设计目标。对每个功能的实现进行了详细的论述。

 

5 测   试

本章主要对系统的功能进行单元测试,对系统的性能进行了测试。并对系统的测试结果进行总结。

5.1 单元测试 

测试时选取的硬件测试设备为:

(1) 一台windows系统或者linx系统的电脑一台

利用电脑通过浏览器输入网址访问站点,能否实现正常登录,能否实现猜歌游戏,能否上传歌曲成功。能否在歌曲审核成功后玩家可以猜这首歌,能否查看自己的排名等。主要的测试用例如下:

(1) 登录测试  当输入正确的用户名、密码、验证码后跳到游戏菜单主界面,假如有一个不正确,并给出相应的错误信息,则还是返回到登录界面。

 

5.1返回到登录界面

 

   

5.2 游戏菜单界面

(2)  猜歌流程测试,选择不同类型的歌曲能否正常进入猜歌游戏界面,随机播放的歌曲的名称是否能在按钮中找到,点击按钮是否能获取到自己想要猜的歌曲的名称,当猜错以后普通场和比赛场能否给出不同的提示,猜对以后等级、积分、金币能否正常的增加。

 

 

5.3 选择流行歌曲后进入的界面

 

    

                         

5.4 获得玩家猜的歌曲的名称

 

     5.5 普通场歌曲猜对提示和奖励

 

  

  5.6 普通场歌曲猜错提示和奖励

 

  5.7 挑战赛歌曲猜对提示和奖励

 

5.8 挑战赛歌曲猜错提示和奖惩

  

 (3) 上传歌曲流程玩家进行歌曲上传成功后,能否在歌曲审核中出现,管理员登录系统后能否对未审核的歌曲进行审核。审核通过以后能否在歌曲列表中出现,审核失败以后是否不在歌曲列表中出现。

 

5.9 歌曲上传成功

 

5.10上传的歌曲能够在歌曲审核中看到

 

5.11上传的歌曲成功审核

 

           5.12上传的歌曲能够出现在猜歌列表

 

5.12上传的歌曲未能通过审核

 

5.2 系统测试小结

本系统通过登录测试、猜歌测试、上传歌曲流程测试,玩家不仅可以正常猜歌,也未能发现任何异常。计算机硬件方面也均良好。游戏在经过多次测试过程

中,均能稳定运行。

 

 

 

 

 

6 总结与展望

6.1 论文总结

通过本次系统的开发,使得我对Java Web有了更深层次的理解。不仅如此,在Mysql数据库和Tomcat的运用当中也学习到了不少的东西。由于本系统基本上由自己一人独立完成,自然而然自己的自主创新能力有了很大的提高。为了提高该系统的性能,选择了Servlet框架和列表的展现采用分页的效果和局部刷新技术,为了体现页面的美观程度,引入了前端框架Ecside该系统开发的目的是为玩家提高一个良好的游戏平台,其根本目的在于减轻人们的生活压力,提高人们的娱乐方式。

6.2 展   望 

虽然本系统的开发已经为用户提供了一个很好的娱乐和沟通平台,但是仍然有很多待以改进以及进一步研究的方向:

(1) 新技术HTML5的应用

该页面基本都是采用HTML+CSS+JS技术进行开发,但是目前HTML5的发展前景非常可观。原因在于HTML5HTML性能更好,而且HTML5拥有更多自己轻量级的标签。而且相比较HTML技术而言页面效果更加的可观

(2) 游戏的挑战性设计

由于本系统虽然可以多人一起在线玩,并且还有网上排名,娱乐性很强。但是它毕竟不能满足多人一起同时猜一首歌。要想多人同时猜一首歌,就需要考虑到线程同步与异步问题,这显然对于Java Web即是机遇又是挑战。

 

 

历时将近四个月的时间终于将这篇论文写完,在论文的写作过程中遇到了无数的困难和障碍,都在同学和老师的帮助下度过了。尤其要强烈感谢我的论文指导老师—贺老师,她对我进行了无私的指导和帮助,不厌其烦的帮助进行论文

的修改和改进。另外,在校图书馆查找资料的时候,图书馆的老师也给我提供

了很多方面的支持与帮助。在此向帮助和指导过我的各位老师表示最中心的感

谢!感谢这篇论文所涉及到的各位学者。本文引用了数位学者的研究文献,如

果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。感

谢我的同学和朋友,在我写论文的过程中给予我了很多你问素材,还在论文的

撰写和排版灯过程中提供热情的帮助。由于我的学术水平有限,所写论文难免

有不足之处,恳请各位老师和学友批评和指正!最后我要感谢各位评审论文的老师能够在百忙之中抽出时间审阅我的论文,希望能够得到你们的批评指导。在未来的日子我会继续努力奋斗,用行动来向母校汇报我的成绩。


参考文献

[1] 赵俊峰.基于MVC模式的JSP+Servlet+JDBC和AJAX[M]. 清华大学出版社, 2012: 48-84.

[2] 刘晓义. XML技术及应用[M].哈尔滨工程大学出版社, 2011: 56-78.

[3] 温谦.网页设计与布局从入门到精通[M].人民邮电出版社, 2011: 64-86.

[4] 王玉英. 基于JSPMySQL数据库访问技术[J]. 现代计算机,2010,14:67-70.

[5] 柯钢,李建新,杨怀德,祝衍军. JSP编程技术》课程教学改革的探讨[J]. 福建电脑,2012,01:201-202. 

[6] 陈刚.Eclipse从入门到精通[M].北京:清华大学出版社, 2012: 22-46

[7] 畅玉洁. 基于J2EEMVC模式的企业信息管理系统的设计与实现[J]. 网络安全技术与应用,2013,11:121+126.

[8] 刘京华 等. Java Web整合开发王者归来[M]. 清华大学出版社, 2010: 32-50.

[9] 孙卫琴. Tomcat与Java Web开发技术详解[M]. 电子工业出版社,

2011: 111-148

[10] Metsker S J. Java设计模式[M]. 电子工业出版社, 2012:114-256

[11] 张峋, 杨三成. 关键技术JSP与JDBC应用详解[M].中国铁道出版社,

2010: 78-96

[12] 林信良. JSP & Servlet学习笔记[M]. 清华大学出版社, 2012: 87-100

[13] 杜波依斯. MySQL技术内幕[M]. 人民邮电出版社 , 2011: 66-88

[14] 耿祥义,张跃平.JSP实用教程[M]. 清华大学出版社, 2013: 1-354

[15] 蔡剑,景楠. J2EETomcat[M].北京:清华大学出版社,2014: 56-132

 

以上是关于基于Java Web的猜歌游戏设计与实现的主要内容,如果未能解决你的问题,请参考以下文章

基于java的拼图游戏的设计与实现

基于java的坦克大战游戏的开发设计与实现-(毕业论文+毕业设计源码+答辩PPT).rar

猜数小游戏代码实现

教你如何用C语言设计一个有趣的猜数字小游戏

用C语言实现一个简单的猜数字游戏

基于安卓手机连连看游戏设计