JAVA面向对象编程课程设计——网络版单机斗地主
@
一、团队介绍
| 成员姓名 | 任务分配 | 成员课程设计博客链接 |
|---|---|---|
| 兰泽祥(组长) | 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 | JAVA面向对象编程课程设计——web版斗地主 |
| 吴修恩 | JSP界面的设计,前后端数据的交互,servlet设计,动态更新界面 | Java课程设计---web版斗地主 |
二、项目GIT地址
三、项目git提交记录截图













四、项目功能架构图、主要功能流程图

五、面向对象设计类图
1、CardGames类图:该类为牌局组类,与2的牌局类不同的是,牌局组对象里包含了一个Map以及牌局标识ID。

2、CardGame类图:该类为牌局对象,包含了一个牌局中需要用到的地主牌,3副手牌,地主标识,是否出牌的标识等等。

3、Card类图:该类为卡牌对象,用于存放54张扑克牌,只包含了卡牌的名称,即图片名

4、UserUserInformation类图:该类为用户信息类,包含了用户信息有用户的账号,昵称和积分

5、User类图:该类为用户类,包含了用户的账号密码

六、项目运行截图与屏幕录制
1、登录界面

2、注册界面

3、初始界面

4、排行榜界面

5、游戏界面


6、项目运行屏幕录制(主要展示多人同时进行游戏)

七、项目关键代码
1、通过Ajax提交数据
本次课设中是调用jQuery中的ajax()方法进行发送请求的,所以首先需引入jQuery。

type: 所要请求的方式(post或get)。
url: 发送请求的地址。
contentType:内容编码类型,默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。但是要传输复杂的json对象时就须要使用application/json 。
traditional: 有true和false两种值,默认的话,traditional为false,即jquery会深度序列化参数对象,servrlet api 无法处理, 而设为true便可阻止深度序列化。这样就可以在Java后台通过request.getParameterValues() 就可以简单获取数组了。(适用于简单的字符串数组,复杂的对象还是使用默认值,在后台再使用流进行读取)
success: 载入成功后执行回调函数

还有个getJSON专门请求json数据,格式为$.getJSON(url,[data],[callback])
url:string类型, 发送请求地址
data :可选参数, 待发送 Key/value 参数 ,同get,post类型的data
callback :可选参数,载入成功时回调函数,同get,post类型的callback
后台数据返回:

后台可以定义一个map集合,然后将键值对一一对应,最后使用JSON.toJSONString()方法转化为json字符串返回给前端。
2、斗地主规则的设计
既然是一个游戏,那就要有规则,其中最主要的就是,判断所选的牌型是否正确,即是否符合规则。在牌型符合规则时,需要判断是否能够出牌。
在判断所选的牌型是否符合规则的设计中,因为规则中的牌型是固定的,所以设计了一个常量CardType类,这个常量类中包括了符合斗地主规则的所有可选牌型以及不允许出牌的常量。

判断牌型的时候,需要根据所选的牌的数量,以及各个牌型的特征,如:连对的基本特征为,需要连续3对,并且这三对的数值是连续的等等,来判断用户所选的牌是否为规则内的牌型,是的话返回相应的牌型,供后面的算法判断,如果不是则返回c0,服务器就会给客户端相应的反馈,禁止用户出所选的牌。

判断完牌型后,如果返回的不是c0,则需要判断用户是否能够出所选的牌。在这个判断中,首先就需要判断用户是主动出牌还是跟牌,如果为主动出牌,则服务器就会给客户端相应的反馈,同意用户出牌;如果为被动出牌,则需要判断当前用户所选的牌,与前面的用户出的最大的牌进行比较。
当前面出的牌不是炸弹,而用户选的牌型为炸弹时,既可以出牌。当用户选的牌型不为炸弹时,需要判断该用户所选的牌是否与前面用户所出的牌型相符合,若符合,则判断该用户所选的牌是否比前面用户所出的牌大,若符合则允许出牌,否则禁止用户出牌。

八、项目代码扫描结果及改正
使用阿里巴巴静态扫描工具对我们的项目进行扫描,得到的结果为:79 Blockers, 15 Criticals, 240 Majors。经过3个多小时的修改,将所有工具给我们的建议,全部修改完。


九、尚待改进
1、本次课设只有一周的时间,时间赶,任务重,没有在界面上画太多的时间,所以这个界面有点丑陋。
2、我们这次课程设计写的程序已经支持多人同时进行游戏,但是只能是单机游戏,尚未实现多人进行同一场游戏。
3、我们所设计的机器人算法比较直白,比较“傻”,可以深入研究,甚至是通过人工智能的算法来提高人机的出牌机制,使得人机变得更“聪明”。
十、附录
1、我们写的课程设计是JAVA web项目,故我们买了一个阿里云学生服务器,在课程设计结束时,我们已经将我们的项目部署到了该服务器上,有效期至2019-02-16。大家有兴趣了解一下的可以访问:网络版单机斗地主。
2、项目部署方法
JAVA面向对象编程课程设计——网络版单机斗地主的更多相关文章
- JAVA面向对象编程课程设计——web版斗地主
一.团队课程设计博客链接 JAVA面向对象编程课程设计--网络版单机斗地主 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记 ...
- JAVA面向对象编程课程设计——项目部署
目录 一.Java环境的安装 1.下载 2.安装 3.配置环境变量 二.Tomcat的安装 1.下载 2.安装 3.启动Tomcat(默认已经安装好java环境,如果未安装java会报错.) 三.My ...
- Java面向对象编程基础
一.Java面向对象编程基础 1.什么是对象?Object 什么都是对象! 只要是客观存在的具体事物,都是对象(汽车.小强.事件.任务.按钮.字体) 2.为什么需要面向对象? 面向对象能够像分析现实生 ...
- (一)如何理解java面向对象编程
哲学中,事物总是螺旋式上升,波浪式前进.因而编程也逐渐向人类更容易理解的方向前进,多年来人们苦苦追求的编程境界 : 高扩展性(extensibility),高复用性(reuseable).java语言 ...
- java 面向对象编程。。。。
经过一周的学习(java),总结了许多,对java的理解,java的类型,运用,安装,基础语法,变量,常量,表达式,语句 java从C语言中继承了大量语言特性.java面向对象编程的基本特征,包括继承 ...
- 《Java面向对象编程》
<Java面向对象编程> 第11章 对象的生命周期 11.1 创建对象的方式 用new语句创建对象 运用反射手段,调用java.lang.Class 或者 java.lang.Const ...
- java面向对象编程知识点总结
一:今天完成 上午详细了解了java面向对象编程的一些细节,记录如下. 1)类 是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法.初始化程序和嵌套类 ...
- Java面向对象编程(一)
由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymo ...
- JAVA学习(五):Java面向对象编程基础
Java面向对象编程基础 面向对象(Object oriented programming,OOP)技术是一种强有力的软件开发方法,它採用数据抽象与信息隐藏技术,来使软件开发简单化,以达到代码重用的目 ...
随机推荐
- Awk 从入门到放弃(2)– 分隔符 学习笔记
转:http://www.zsythink.net/archives/1336 学习输入分隔符FS及输出分隔符OFS 通过-v 修改内置的变量,在$1 $2 之间不指定 ‘,’, 会做合并输出.
- struts2的execAndWait拦截器
struts2中有许多默认拦截器,这里我们看一下execAndWait拦截器. 当一个页面需要加载一段时间的时候,我们希望它不是一直呆在原页面直到加载完成,而是进入等待页面,加载完毕后自动进入目标页面 ...
- BeanFactory工厂
Core模块主要的功能是实现了反向控制(Inversion of Control)与依赖注入(Denpendency Injection).Bean配置以及加载. Beans为Spring里的各种对象 ...
- Word文档加密小技巧
文件菜单设置: 1.打开需要加密的Word文档. 2.选“文件”的“另存为”,出现“另存为”对话框,在“工具”中选“常规选项”,出现“保存”选项卡. 3.分别在“打开权限密码”和“修改权限密码”中输入 ...
- iOS 工程自动化 - OCLint
前言 最近一直在做 iOS 工程自动化方向的事情,所以把自己研究和实践的内容进行记录并分享,希望能给大家一些帮助. 为什么要使用 OCLint 做为一个静态代码分析工具,我们引入 OCLint 的目的 ...
- delphi批量存入多媒体字段 遇到内存溢出的坑
最近delphi做一个小工具其中一个需求要把上W张照片存入数据库多媒体字段. 程序转到1,2W的时候即内在溢出了.最多一次转了3W张照片.很简单的一段代码后来仔细检查发现其中的坑. 下面放上代码 wi ...
- X-Mirage苹果屏幕录制工具7天试用期破解 imsoft.cnblogs
X-Mirage (PC) 能让你的 Windows 变成一个 iPhone.iPad 或者 iPod Touch 的屏幕镜像,应用程序.游戏.照片.视频等等一切可以在 iOS 移动端显示的东西,都镜 ...
- Unity打安卓包 Android 所有错误解决方案大全(几乎囊括所有打包错误 )
Unity打包出错解决方案 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- java正则表达式——Greedy、Reluctant和Possessive
测试1: package jichu; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Mai ...
- Loj 2008 小凸想跑步
Loj 2008 小凸想跑步 \(S(P,p_0,p_1)<S(P,p_i,p_{i+1})\) 这个约束条件对于 \(P_x,P_y\) 是线性的,即将面积用向量叉积表示,暴力拆开,可得到 \ ...