一、项目总体说明
1.1 项目总体说明
该项目是基于JSF框架的在线棋牌游戏平台,目前有五子棋和象棋两项已完成子模块,皆支持人机对战与在线匹配对战,其中象棋还支持大部分棋牌平台不支持的复盘功能。项目整体设计合理,功能齐全,有较好的用户交互功能界面。
1.2 开发环境的选择、安装与配置
IDE : NetBeans 8.0.02
数据库:javaDB
服务器:GlassFish 4
浏览器:Chrome
其它:JDK8、jquery3.0.1
二、项目设计概要
2.1 项目需求分析
项目要求使用B/S结构,利用Java EE开发平台,基于JSF框架实现一个B/S结构的分布式在线棋牌游戏平台,并实现系统的各项功能,包括用户数据管理、游戏页面开发、实现相应逻辑、游戏数据存储等。
用例图:
实体关系图:
2.2 系统总体设计
系统总体分成五个模块:
-
-
- 五子棋模块
- 象棋模块
- 用户模块
- 数据库模块
- 其他页面模块
-
本系统利用Java EE开发平台,基于JSF框架实现了一个B/S结构的分布式在线棋牌游戏平台,并实现了系统所需的各项功能,包括用户数据管理、游戏页面开发、实现相应逻辑、游戏数据存储等。
2.3 数据库设计
2.4 系统工作流程设计
未注册用户可注册本系统,已注册用户登录本系统后可以修改自身信息、玩游戏等,根据用户选择游戏类型和其他相关操作显示相应界面,用户玩游戏时内部逻辑进行数据的传输、处理与存储。
2.5 资源清单和说明
表现层页面:
- index.xhtml 首页
- layout.xhtml 基本布局部分
- header.xhtml 首页头部信息
- footer.xhtml 首页尾部信息
- MainPage.xhtml 首页中主要内容
- login.xhtml 登录页面
- register.xhtml 注册页面
- error.xhtml 出错页面
- ChineseChessIndexPage.xhtml 象棋人机对战首页
- ChineseChess.xhtml 象棋人机对战主要内容
- PVPChineseChessIndexPage.xhtml 象棋人人对战首页
- PVPChineseChess.xhtml 象棋人人对战主要内容
- ReplayChineseChessIndexPage.xhtml 象棋复盘首页
- ReplayChineseChess.xhtml 象棋复盘主要内容
- GoBangIndex.xhtml 五子棋首页
- man.xhtml 五子棋人人对战界面
- wuzi 五子棋人机对战界面
表现层资源:
- 象棋棋盘图片
- 象棋棋子图片
- 象棋背景音乐、落子及输赢音效
- 五子棋棋盘图片
- 五子棋棋子图片
- 首页大屏轮转图片
- 登录、注册背景图片
BackingBean类:
-
- LoginControl
- RegisterControl
- RecvBean
- SesstionAtt
- RoomBean
- Ai
- Node
- End
实体映射类:
-
- Matchstepinfo
- Matchrecord
- Usertable
实体访问类:
-
-
- MatchstepinfoFacade
- MatchstepinfoFacadeLocal
- MatchrecordFacade
- MatchrecordFacadeLocal
- UsertableFacade
- UsertableFacadeLocal
-
业务逻辑组件:
访问数据库相关:
- UserEJB
- MatchStepEJB
- MatchRecordEJB
象棋执行相关:
- ExeBean
五子棋执行相关:
- Ai
- Node
2.6 主要界面设计效果截图和说明
注册界面:
登录界面:
修改个人信息界面:
象棋部分可选择弹框:
象棋选择人机后的弹框:
选择进入大厅的弹框:
大厅中选择进入房间:
象棋游戏界面:
象棋输赢界面:
选择象棋复盘弹框
象棋复盘界面:
五子棋首页:
五子棋人机界面:
五子棋人人界面:
2.7 程序代码
以电子版形式提交
三、项目关键性问题分析及技术解决方案
3.1 象棋电脑部分如何编写
象棋AI主要采用极大极小搜索和α-β剪枝算法实现,并使用二进制棋盘和置换表等策略进行加速,其中子力价值表的设定参照了象棋巫师。
3.2 五子棋电脑部分如何编写
五子棋AI主要采用极大极小搜索和α-β剪枝算法实现。
3.3 客户端何时及如何从服务器端动态获取数据
采用监听值改变事件的方法确定获取数据时机。客户端通过与服务器端属性进行值绑定,可以在页面初始化时直接获取服务器端属性值,通过表单提交和AJAX方式可局部刷新页面。但是若想在客户端获取值改变事件,因为通过服务器端直接改变属性值和AJAX传输方式并不会触发onchange、oninput、attributeValueChange等事件,可通过JS获取原值,设置一个定时器,每隔0.1秒检查值是否改变,并作出相应变化。
3.4 服务器端的棋局如何展示在客户端界面上
采用在服务器端和客户端同时存储棋盘方式,通过数据传输使两棋盘保持一致。用户下棋时做出的操作通过提交表单和AJAX方式提交到服务器端,服务器端进行检查合法性等行为,再将服务器端返回结果呈现于客户端界面上。客户端通过动态接收服务器端数据做出相应改变(移动棋子,显示棋子边框等)。
3.5 两个用户如何进行匹配对战
服务器默认拥有50个房间(即房间是ApplicationScoped),每个房间都保存了有独立的ID、房间名、唯一的棋盘、当前的步法、当前房间人数、能否开始的判断标记以及先后手的ID,在第一个玩家进来后设置先手的ID并进行等待,直到第二个玩家进入,设置后手ID并开始游戏。双方玩家在己方行棋时,若行棋合法,则将步法更新到房间的当前步法中,更新界面并设置对方开始行棋;在对方行棋时,则通过计时器不停地取房间的当前步法,若发现对手已经行棋,则更新界面并设置己方开始行棋。如此循环,直到一方胜利。
四、项目测试及结论
4.1 测试用户体验效果
用户体验良好,尤其是象棋界面,背景音乐选择的皆是著名纯音乐,使人身心愉悦。下象棋时游戏音效和显示效果很好,表扬象棋前端人员。
4.2 测试象棋AI是否足够智能
该象棋AI非常强大,我连简单人机都下不赢,表扬象棋AI后台人员。
4.3 测试系统是否流畅
该系统十分流畅,衔接的很自然。
4.4 美中不足的一点
囿于开发人员和开发时间问题,该系统目前只有两个游戏,不足以支撑一个平台运营。