JAVA课程项目—网络黑白棋开发文档(共17页)_第1页
JAVA课程项目—网络黑白棋开发文档(共17页)_第2页
JAVA课程项目—网络黑白棋开发文档(共17页)_第3页
JAVA课程项目—网络黑白棋开发文档(共17页)_第4页
JAVA课程项目—网络黑白棋开发文档(共17页)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JAVA课程项目开发文档课程名称: 高级语言程序设计 课程项目: 网络黑白棋 作者: XXX 所在系部: 软件工程 班级: XXX 学号: XXX 指导老师: XX 日期: XX 一、 系统使用说明和测试用例首先是对于整个游戏的使用说明以及游戏运行的测试:数据库部分:打开 MySQL 进入所建的数据库othellogame,在这个数据库里,建立了一张表格名叫userinfo用所建的数据库othellogame,打开userinfo,里面有部分已经保存的用户资料,但是有些地方出现了“?”,应该是MYSQL编码问题,导致汉字不能显示 :下面开始展示我写的黑白棋程序的使用(由于时间仓促,界面做的并不

2、是十分完善):注册与登录:1 首先运行服务器端SERVER,然后运行登陆程序USERS,呈现的是登陆界面,在这里你可以实现登陆或者注册新用户:这个是注册界面,在这里实现注册,userinfo里会出现你所注册的一条记录但是如果用户名存在,会出现如下图第二幅的显示,若是E-mail格式不对,会出现下图第一幅的显示:用正确的用户名,正确的用户信息填写格式登陆,在USERINFO里会有新注册用户的一条记录出现下面进入登陆界面,若是用户名在数据库里有记录,会显示如下界面:点击确定,进入游戏大厅(这个游戏大厅只能容下九个房间。在同一个房间里,默认第一次坐下的为白方,第二次为黑方,之后进入者作为观战对象):

3、游戏大厅:进入第一桌,进入游戏界面,在界面的左侧是聊天界面,下面为输入被容,上面是聊天记录显示,中间是棋盘,右侧分别显示玩家的昵称、玩对战状态、执子方,棋子状态以及时间状态(默认为十分钟,若游戏开始,否则超时自动退出游戏界面,超时将被判负),下面显示的是部分功能按钮,包括悔棋、存盘、调用棋盘、认输、玩家信息,具体功能实现将在如下做介绍:在登陆界面登陆第二,第三个用户,游戏大厅第一桌的显示分别如下(其他桌显示不变,依然是坐下(白方):这是第二个用户 : 这是第三个用户: 当黑方和白方都已经进入时,会弹出对话框,告诉玩家游戏已经开始,此时计时状态重新定为十分钟,游戏开始(默认白方先手,一局之后对战

4、双方交换座位与棋子颜色,依然是白方先手):游戏的运行:1、落子下面开始下棋,(只有黑方和白方点击才有用,观战方点击会弹出对话框)下棋时若是落子处不能下棋(没子下或者对方执子),都会弹出对话框: 2、决定胜负:有胜负之后,会出现对话框,同时对战双方交换座位(以黑方胜为例),黑白与观战方同时清盘,数据库里在胜负上修改记录,第二局开始3、按钮功能:l 悔棋:首先要征求对方同意,最多可悔棋四步,但是观战状态不能悔棋(实现方法在后面介绍)请求悔棋: 征求对方同意: 同意悔棋: 不同意悔棋: 同意悔棋之后,棋盘状态回到上一步:悔棋前: 请求悔棋,对方同意后: l 存盘:点击按钮,当前棋盘状态等相关游戏信息

5、将保存在源代码文档里,命名为savefile.datl 调用存盘:存盘时: 请求调用棋盘: 同意调用后,复盘l 玩家信息:点击后,会出现当前桌上所有玩家的信息,显示该玩家的状态: l 认输(观战状态不能认输):点击 点击“是”: 之后的过程与下棋胜利相同部分方法的测试(主要是网络和数据库方法的的测试):l 这是服务器端的测试“a client connected”是代表客户端和服务器已经建立了联系,后面是服务器端向所有客户端的发出的字符串内容:l 这是客户端的测试(以白方为例)“connected”代表客户端与服务器端建立了连接;之后是客户端收到的服务器的消息(前面的字母代表要完成的任务,后面

6、数字用来筛选客户端,再往后是要发送的信息;“Write SUCCESSFULLY”是在判定胜负之后,将用户的胜负信息写到数据库成功显示) 二、 整体架构Server服务器,存储游戏大厅以及部分客户端的信息;处理和筛选客户端发来的信息Users登陆和注册,可启动多个客户端Client所有的游戏主程序,包括游戏大厅的建立;处理和筛选服务器端发发来的信息,做出各种反应MYSQL数据库,储存所有注册用户的信息登陆,注册,查询UsernameString(用于处理)UsernameServer类:l Start方法:一直等待有新的客户端与服务器建立联系l Client类: Copy方法:用二维数组,采用

7、堆栈的方式存储最近为此改变后的棋盘状态 Send方法:将客户端收到的信息按顺序发给集合类clients中的客户端 Run方法:随时接受所有客户端发来的字符串,通过判断开头字母进行处理,包括游戏大厅每一桌的人数(ask);进入游戏后改变游戏大厅的状态(select);同意悔棋(shia);其他开头会将内容用send方法发给全部客户端Client类:游戏的主程序,包括游戏大厅,之后进入游戏的主程序,包括聊天、计时等 Listener类:实现了actionPerformed接口,是认输、调用棋盘、玩家信息按钮的监听器,负责向服务器相应的发送的字符串 TListener类:同样实现了actionPer

8、formed接口,是游戏大厅的具体实现,点击进入相应的游戏界面 TFListener类:用于实现悔棋和聊天的信息发送 Play类:画棋盘和完成落子的鼠标点击,其中listener方法调用了check1和check2 (确定是否可以落子,改变棋盘数组)jugde1和jugde2(确定是否有子可下) Select方法:客户端连接到服务器后,向服务器发送字符串请求发送游戏大厅状态 Xingqi方法:单独启动一个线程记录行棋时间,超时判负 Receive方法:单独启动线程,负责收取客户端的信息,通过调用其他方法完成相应信息的命令与展示Users类:注册和登陆界面,登陆后将实例化新的client,调用s

9、elect方法,进入游戏大厅,同时在新的client对象里保存用户名username,其中用了RegisterFace、DataBase、DBUtility、LoginServlet等类中的方法,用来增加、查询用户信息: RegisterFace 用于用户注册,得到用户信息通过与LoginServlet交互判断用户是否存在,并进行注册 DataBase 连接数据库,通过getConnection方法得到 Connection对象从而建立应用程序和数据库的连接。 DBUtility数据操作类,可以查询用户信息,添加用户,查询用户名是否存在,添加用户,及添加时用户名是否有效 LoginServle

10、t 登录控制,与用户交互 RegisterServlet 注册控制,与用户交互 InfoItem 存储用户信息,代表一个已经注册了的用户,包括用户注册的全部信息,使用该类对象,来保存从数据库提取的数据三、 主要部分关键技术实现(一)实验基本要求(已实现)1初始化:建立网络连接,生成棋盘,猜先。(我设计的是白方先手,并且是在黑方进入房间后自动重新计时,开始游戏) 2行棋过程中,支持回合制行棋,程序判断合法的行棋位置,吃子,统计显示棋子数目,统计行棋时间、判断输赢3支持行棋过程中交流的聊天通道,允许别人旁观 4支持悔棋、计时等功能:两人通过网络进行对战时,一方要悔棋时需得到对方的回应才能悔棋,超时

11、判负 5支持存盘功能,能够将当前已经下完的游戏存盘,往后可以打开复盘。(二)实验增强功能1建立游戏大厅,支持玩家注册,记录玩家战绩,登陆玩家可以选择对手进入对战室,登陆玩家或游客可以选择对战室观看比赛。(已实现) 2使用JavaFX、Flash等技巧,增加交互性。(未实现)主要关键技术实现: 数据库实现注册与登录:首先程序通过用户输入的数据与RegisterServlet进行交互,判断用户名是否已经存在,若不存在则进行相应注册,RegisterServle调用DBUtility的方法,查询用户信息,添加用户。登录时与注册基本相同,得到用户名与密码后,通过LoginServlet与底层数据库操作

12、类DBUtility进行交互判断用户名和密码是否正确。 游戏大厅(只有九桌):服务器端用一维的数组selct,每一个客户端加到相应的桌后,数组的一项里会加一。登陆之后,程序调用client的selct方法,存储登录用户名,服务器端收到“ask”的字符串,服务器端收到后,调用run方法再给客户端发送开头“want”加selct的内容,客户端收到后生成窗口,用九个按钮(用TListener监听)实现简易的游戏大厅,点击后,进入游戏界面 用户状态:client类里的实例变量username储存登录用户的名字,selct数组里两个数字,分别为桌号和用户是黑方,白方,或者观战 发送和接受、筛选信息:所有

13、发送和接受信息在服务器的,除了在用户进入游戏大厅的界面之前,所有发送和接受的字符串都在前面四个字符都是说明了整个字符串的功用,后面两位是client中select数组的中的数据。在客户端,有不同的方法甄别前四个字符的内容,如果内容匹配,则判断第五位,只有收到的字符串的第五位和select【0】相同,则说明此信息为相同桌上的玩家发送的,才会执行相应的内容,包括方法xinxi,shengli,started,shengfu等等,主要实现的是落子,悔棋,复盘的请求,胜负判断等 棋盘状态和落子:棋盘状态是用二维数组tt来实现的。0为无子,1为白子,2为黑子,调用paint方法画棋盘。落子时,用mous

14、ePressed实现监听,得到Piont的X和Y的坐标, 调用check1和check2 (确定是否可以落子,改变棋盘数组)jugde1和jugde2(确定是否有子可下),落子之后,present变为假,不能再落子,同时,将tt中的元素按顺序排列前缀“step”加上桌数和所属方发送给服务器 翻转算法:以白方点击一格无子为例:首先需要实例变量present为TRUE(该玩家才可以下棋),调用check2,方法返回一个布尔型的数组(代表八个方向),分别对此处(坐标对应数元素:tt【i1】【i2】)的八个方向进行搜索,利用二维数组tt:以向右为例必须满足tt【i1】【i2】=0, tt【i1】【i2

15、】的元素有等于并i1继续增加,有tt【i1】【i2】=,则有方向返回TRUE。之后调用check1方法,如果该方向上利用check2的返回是TRUE,对tt自i1,i2起做出修改,向服务器发送tt状态,客户端收到后,相同桌上的客户端调用step方法,用paint方法重画棋盘 判断是否可以下棋:需要两个条件,present为真且搜索全部tt中为0的元素调用check2方法,得到的数组元素不全为假时则可以下棋 悔棋的实现:首先说明的是,在服务器端有一个String类型的二维数组copy,当接到开头为“step”的字符串时,判断后面的桌数,用堆栈的方式将字符串保存到数组相应的位置。当对战一方请求悔棋

16、时,首先发送“hiuq”+selct【0】+selct【1】,另一方收到后作出回应。同意时,发送“shia” +selct【0】+selct【1】,服务器进行判断,把copy中相应桌的一维数组的第二个元素发送出去(因为第一个保存的是当前棋盘状态),同时将从第二个起全部元素前移。这样一共可以悔棋四步。 存盘和复盘:存盘的实现仅仅是基础,把当前tt的状态按顺序排成字符串,前缀“step”,保存在文件savefile.dat中。复盘,即调用棋盘时,首先发送请求,另一方同意,则直接将文件中的内容,“step”之后插入桌数和状态发给服务器,用和落子相同的方法实现棋盘调用 胜负判断:用jugde2方法搜索

17、整个棋盘:调用judge1方法,用check2判断返回一个布尔型的数组当数组中元素全为假时,judge1返回假;judge2中调用judge1的返回全为假时,judge2返回假,代表一方无子可下,发送“wuzi” +selct【0】+selct【1】,另一方也用jugde2判断,若同样返回假,则胜负用黑白双方的棋子多少判断胜负。胜负分出之后,双方交换座位(即select【1】中1变2,2变1),在清盘,重新开始 战绩在数据库的保存:new RegisterServlet().upDate(username, winscores, lostscores),这样往数据库里写入战绩。UpDate方法

18、与DBUtility联系,使用update userinfo set winscores=?,lostscores=? where username=?修改底层数据库 玩家信息的显示:在用户登录之后,调用客户端select方法,会将用户名存储在客户端对象的实例变量username里,点击按钮“玩家信息”,发送信息“chak” +selct【0】+selct【1】,同桌客户端(包括请求的)收到后,发送“xinx” +selct【0】+selct【1】+username,客户端判断,当第五六位字符分别为selct之中两个元素时,用后面的用户名创建对象InfoItem,即可调出来该用户的所有信息 行棋时间:在客户端单起个线程,设定实例变量fenzhong=10、miaozhong=0,在黑方进入房间之

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论