黑白棋网络对平台系统的设计与实现.doc_第1页
黑白棋网络对平台系统的设计与实现.doc_第2页
黑白棋网络对平台系统的设计与实现.doc_第3页
黑白棋网络对平台系统的设计与实现.doc_第4页
黑白棋网络对平台系统的设计与实现.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

黑白棋网络对平台系统的设计与实现Java课设计 学号:2001000130002年级:10计算机一班姓名:柴爽由于本人编程经验不足以及时间有限,程序中存在许多不足,望老师原谅,现在介绍程序功能及使用说明。 目录 1、使用手册(用前必看)第2页2、棋盘构画第11页3、棋盘的初始化第11页4、下棋实现第12页5、变子实现第12页6、判断胜负(及交换下棋权)第13页7、数据传输第14页8、聊天功能第15页9、计时功能第15页10、按钮功能.第16页11、登录窗口第17页12、简单大厅第18页13、总结及感悟第19页14、版本笔记第19页 主体内容1, 使用手册(运行前必看)运行Enter程序,进入登录窗口如果密码输入错误,将给以提示:注册过的用户,正确输入用户名及密码后就可以登陆游戏,进入大厅。未注册用户需要点击登录窗口的“注册新用户”按钮,进入注册窗口,完成注册。注册成功后,服务器会给予提示:注册失败,服务器会给与用户提示:成功登陆或成功注册后,玩家进入游戏大厅,左侧显示各个桌位及座位占用情况,右侧设有聊天窗口,大厅内玩家可在此处聊天。用户通过点击座位分别进入不同的房间,运行不同的游戏窗口(执棋者,观看者的窗口都是不同的)玩家:观看者:只有当游戏双方举手后,游戏才会开始,负责点击棋盘会给一下提示:一方举手后,对方提示以下窗口,同意后,游戏开始:游戏过程中,双方交替行棋比赛过程中,一方没处落子,行棋权交还对方,提示:双方均没处落子,游戏结束,判断输赢:行棋过程中,玩家悔棋提示如下:另一方针对对方的要求给出回应:要求悔棋方收到对方答复:只有当自己行棋时可以悔棋,否则给与如下提示:比赛时,每人每步都有时间限制,超时判负:玩家认输时给以提示:玩家收到对方的认输信息:游戏胜负确定后,玩家点击棋盘给以以下提示:比赛过程中,强行退出,给以提示:玩家收到对方退出房间的信息:玩家认输、退出及重新举手开始游戏,棋盘重置:2,棋盘的构画棋盘采用横长方形和竖长方形交叉而构成的8*8网格,每格为50*50像素,之所以用长方形而没有用横线是为了在边上写数字提供方便,效果基本上一样,用两层循环搞定for (int i = 0; i 8; i+) g.drawString(i + , 50 * i + 75, 45);/ 棋盘线的上边的数字for (int j = 0; j 0) m-;if (statusxxm = 0) statusxxm = 3;Check完后,就得到了能下子的位置,然后通过“下子规则”所描述的即可下子,但是要变色还要用到change方法,change方法的思路与check基本相同,但因为有了前面的铺垫,所以它比较好懂。代码与check也差不多,只是在各自功能的实现方面有所不同,与刚check所示代码方向相同的change代码如下if (yy != 0) if (sta != statusxxyy - 1 & (statusxxyy - 1 = 1)| statusxxyy - 1 = 2) / 上方有子且颜色不一样的int m = yy - 1;while (statusxxyy - 1 = statusxxm & m 0) / 向上找到一个与本格相同颜色的棋子m-;if (statusxxm = sta) for (int n = yy - 1; n m; n-) / 将符合条件的中间的棋子的状态改为相应棋子所对应的那个statusxxn = sta; / 1或-1,然后在重画中将会实现棋子的变色变子的细节注意代码后面的注释,它会把能够变子的格子的status变为相应的要变为颜色的colorStatus(即上面代码的sta),然后repaint(),即可完成变色,变色实现效果如“下子实现”中的图。6、判断胜负(及交换下棋权)判断胜负就是数一下黑子和白子的个数,谁的多谁就获胜,在“棋盘构画”中提到了两个变量blackCount和whiteCount就是用来统计黑子和白子的个数的,通过对status数组的遍历即可得到数组中等于1和等于2的个数,通过比较大小即可判断谁胜谁负。判断胜负一共分为在以下几种情况时判断:(1)当双方下满所有格子后,必然要用判断胜负,程序中使用win()方法来判断;(2)当其中一方经过check方法检查以后发现没有子可下但棋盘上仍有空余格子没有下时,这时要交换下棋权。有一种情况是这样的,就是交换棋权以后发现另一方也没有子可下,这时按照规矩又要交换棋权,这样换来换来换去就会死循环,因此当发现双方都没有子可下时,这时就可以判断胜负了,有一个变量cont是记录连续交换棋权的个数的,如果连续交换了两次那么它就会随后调用方法bwin()来判断胜负,即使现在还有格子没下完。如果交换了一次棋权,cont+,如果交换后对方能下,那么它就会被置0,重新计数。下面是bwin方法的代码展示。public void bwin() int again = 0;if (blackCount whiteCount)again = JOptionPane.showConfirmDialog(null, 黑棋胜+ (Math.abs(blackCount - whiteCount) + 手 + nt+ 是否进行下一场?);else if (whiteCount blackCount)again = JOptionPane.showConfirmDialog(null, 白棋胜+ (Math.abs(whiteCount - blackCount) + 手 + nt+ 是否进行下一场?);elseagain = JOptionPane.showConfirmDialog(null, 平手 + 是否进行下一场?);if (again = JOptionPane.YES_OPTION) initChess();repaint();if (again = JOptionPane.NO_OPTION) 判断胜负后会弹出一个窗口,选是则进行下一场,调用initChess()重新初始化棋盘,若选择否则没反应,即得重新开一次客户端了。(3)还有一种情况也要判断胜负,因为有计时,所以当时间到了而下棋一方仍然没有下棋时,程序就会自动判断超时一方为败者,然后给超时一方自动退出棋盘。败者点击“确定”之后便会自动退出,即输了!7,数据传输当服务器与客户端建立好连接以后,便可以下棋及聊天了,这里着重介绍下棋的数据传输,聊天的传输将会在下面展开讲述。首先讲述一下数据传输的形式,数据传输的字符串,这里的字符串包括一下一些内容,data(表明时数据)+backChess(判断对方有没有按悔棋键)+两位数的setp(是表面下的第几步,为悔棋所准备)+colorStatus(该哪种颜色的棋下了)+64位的status数组内容,是具体的棋盘上棋子的信息。通过输出流的dos.writeUTF(str)写到服务器端,服务端的输入流dis.readUTF接收到客户端传来的信息,由于数据对于服务器没有什么用处,所以服务器没有对数据进行处理的必要,直接转发给所接受的所有客户端就可,通过调用前面提到的List中的所有客户端便可以把信息发到所有相关的客户端。客户端也是通过输入流dis.readUTF来读到服务器发送的信息。因为客户端要对接收的信息进行表现,所以要对接收的信息进行处理,在接收信息以后直接处理了,按照传出的格式,对传入的字符串进行拆解,然后用各自的变量储存各自的信息。然后repaint,这样就完成了数据的传输。下面是数据发送的方法,具体表明上面所说的数据字符串。public void send(DataOutputStream dos) String str = data;str += backChess;if (step 10)str += 0 + step;elsestr += step;/ 对数据进行包装进行传送。data+悔棋信息+setp+1白(2黑)+棋子信息str += colorStatus;for (int i = 0; i 8; i+)for (int j = 0; j 0) t.setText(计时: + time);try Thread.sleep(1000); catch (InterruptedException e) e.printStackTrace();time-;if (time = 0) JOptionPane.showMessageDialog(null, 你已经超时了,你输了!);setVisible(false);send(cc.dos2); 计时功能也是通过一个线程来实现的,这样不会受其他因素的干扰,因为time是个全局变量,所以可以在某些时间来改变它,这样就完成了它从60秒或25秒开始倒计时的功能。本程序中是在变子发送信息后才能把time变为60,而单纯的点击棋盘的无关地方是不能变时间的。同样在读入信息后判定不是自己的信息时才会把time变为25,为自己的下棋计时。10、按钮功能(1)悔棋悔棋功能是用于当一方在另一方走完后发现自己之前走的一步被对方吃掉很多子后想后悔时使用,一般用于在娱乐下棋时使用,在正式的比赛中是落子无悔的。本程序中有一个copy数组专门用来储存每一步棋子,第一个下标为step,后两个对应status的两个下标,当一方请求悔棋时,记录悔棋信息的变量backChess便会从0变为1,并send出去,这样接收到信息的另一方便会出现对方想悔棋的对话框,同时想悔棋的一方棋盘会先回到悔棋之后的状态,以便他直观的明白自己之前的状态,而当另一方点击“是”时,点是的一方便会也变成悔棋后的状态,而如果点“否”,即不同意悔棋,那么点悔棋的一方便会回到点悔棋之前的状态。(2)保存保存就是把所下的每一步的信息给保存起来。这里采用输出流到文件。public void jb2_actionPerformed(ActionEvent e) String sr=;File file = new File(copy+n+.txt);n+;FileWriter fw;try fw = new FileWriter(file,false);for(int i=1;i=step;i+)for(int j=0;j8;j+)for(int k=0;k8;k+)sr+=copyijk;fw.write(sr+n);fw.flush();sr=;fw.close(); catch (IOException e1) e1.printStackTrace();JOptionPane.showMessageDialog(null, 存盘完成!);这里可以保存多次,第一次生成copy0.txt,第二次生成copy1.txt,一次类推,只保存了棋盘上的棋子信息。保存文件如下格式0000000000000000000000000002100000222000000000000000000000000000000000000000000000000000001110000022200000000000000000000000000000000000000000000002000000121000002220000000000000000000000000000000000000000000000200000012100000112000001000000000000000000000这是保存了下了四步以后的棋盘信息。保存的文件的位置在与src文件夹同一等级的文件夹下,可以之直接打开观看(3)认输认输就是当一方认为自己不能再翻盘的时候,自动点击认输键,表示认输,不浪费时间,这也是对对手的尊重。这里点击认输按钮后,会弹出一个认输的对话框,说你认输了,然后对面也出现你认输的消息,最后你就自动退出了游戏。11、登录窗口本程序写了一个简单的登录窗口Room,就是开了一个新的JFrame,然后等待用户输入用户名和密码,如果用户名和密码与内部所记录的信息相匹配的话,就会打开一个ChessFrame,而后登录窗口的setVisible(false),这样登录窗口就会隐掉,相当于登录到了客户端下棋了输入用户名(输入用户名后请按下回车,保证数据被接收)和密码后,点击“登录”按钮,便会开启一个客户端,或是按一下回车也可达到同样的效果。点击“取消”按钮便会自动消除该登录窗口。如果输入的用户名和密码不匹配,则会出现如图所示的“对不起,你输入的密码和用户名不匹配!请重新输入!”提示用户重新输入。13、简单大厅本程序写了一个简单的大厅,给自己的程序多加点好看的东西,这里面有很多不太懂的地方,具体也不算太清楚,有待日后的改进学习。13、总结及感悟 写了大约半学期的代码,刚开始感觉这么难,怎么写呀,后来慢慢一步一步的写程序,从最开始的画棋盘,到能下子,每一步都是一个脚印,每一个任务都是一个学习的过程,我觉得通过这个学期项目,我不仅熟练了我的Java编程水平,而且使我学到了一些新的知识,锻炼了自己的坚韧力,及时在电脑前待几个小时没有进度,也不会因此而上火,我觉得这是对我性格的影响,使我更加的冷静对待一些事情,更加的有耐心,我想这是我在编程之外的收获,其实也不错。我正在养成一个写代码的习惯,看看我所写过的所有代码,版本有将近30个,每一个都比前一个有进步,因为我喜欢一个任务一个任务的去完成,每完成一个任务,就把它作为一个版本,我想这样写的习惯很好,我以后还要沿用,这样写的好处是,既可以保存你所写的所有东西,又可在写下一个功能时不小心把上一个功能改坏了的时候果断拿出以前的版本重新编写,不必再费时间改回去。我在写每个版本之前或之后总喜欢写一些小心情之类的东西来鼓励一下自己,或是记录一下在这个版本里所做的事情,特别是在写单机版时写了很多,之后将于大家一起分享。在写

温馨提示

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

最新文档

评论

0/150

提交评论