ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:752.58KB ,
资源ID:4574246      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4574246.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(长沙理工大学网络系统课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

长沙理工大学网络系统课程设计.docx

1、长沙理工大学网络系统课程设计长沙理工大学网络系统课程设计报告 XX 学 院 专 业 计算机科学与技术 班 级 学 号 学生姓名 指导教师 课程成绩 完成日期 2014年6月13日基于JAVA的简单游戏程序设计与实现 学生姓名:XX 指导老师:XXX 摘 要 本课程设计主要实现一个相互交互的游戏,进行游戏执行,客户端与客户端之间相互通讯的程序设计。在课程设计中,系统开发平台为Windows 7,程序设计设计语言采用JAVA,开发工具使用Myeclipse10.0,程序运行平台为Windows 7/8/XP。随着互联网的迅速发展,网络游戏已成为人们生活中不可缺少的一部分,它不仅使人娱乐,也能开发人

2、的智力,本游戏程序实现的是两个人在网络上进行对弈,同时能够进行对话。 关键词 程序设计;Myeclipse;JAVA;五子棋AbstractThis course is designed to achieve a mutual interaction of the game, game, communications between the client and the client program design. In curriculum design, system development platform for Windows 7, using JAVA programming de

3、sign language, development tools using Myeclipse10.0, application platform for Windows XP / 7/8. With the rapid development of Internet, network game has become an indispensable part of peoples life, it make people not only entertainment, also can develop intelligence, this game program implementati

4、on is two people on the network game, at the same time be able to dialogue.Key words: program design; Myeclipse. Java; gobang1 引 言五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。 五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明

5、显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。 对于五子棋与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。古代的五子棋的棋具与围棋相同,纵横各十七道。五子棋大约随围棋一起在我国南北朝时先后传入朝鲜、日本等地。Java是一种应用于分布式网络环境中的程序设计语言,由Sun微系统公司开发

6、。Java语言广为人知,得益于Internet的迅猛发展。特别是Applet在Web上的应用吸引了更多人们对Java语言的关注,人们开始了解并使用这种神奇的语言。 1.1 课程设计预期 (1)实现服务器端以及客户端的功能。 (2)游戏界面朴素美观。 (3)棋子样式采用传统样式,黑色和白色。 (4)客户端的信息交流完全通过服务器传递完成。1.2 课程设计内容本次课程设计主要分为客户机和服务器两部分的设计,其中在服务器端可以创建待机室供其它未处于下棋状态的人们使用,也可以创建另一个房间,供下棋的两个人使用。我们将通过标记号码来区别待机室与下棋室。即用0标记待机室,其它房间使用0以上的自然数来标记。

7、如图1.2.1,客户机向服务器发送消息(a),与客户机连接的线程将收到的消息转发给消息广播者(b)。然后,消息广播者会负责跟踪具有与客户机1相同的房间号的线程,并将消息传播给它们。图1.2.11.3 课程设计过程 1)理论知识学习:本课程设计主要参考谢希仁编著的计算机网络(第6版)1,语言方面采用的是徐明浩韩编著的Java编程基础,应用与实例2。理论知识是一切研究设计的基础,所以扎实基础为研究设计的第一步,然后才开始进行设计。 2)分析和撰写文档:本课程设计的大体分为创建通讯协议,网络五子棋游戏服务器端,网络五子棋游戏客户端三部分的设计。编写好程序代码,进行编译,发现问题并且解决问题。 3)分

8、析结果并得出结论:最后一部分则是对编码编译,执行,看是否达到预期效果,若没有达到,则根据运行结果思考今后编程中需要注意的问题,代码格式和规范等。1.4 编程环境 1)软件方面:测试程序在Windows 7下的Myeclipse10.0环境中编写并测试。 2)硬件方面:测试数据的生成及结果在第4代CPU酷睿i5-4200U、AMD Radeon HD 8670M、4GB内存的微机生成和通过。 3)编程语言:选用语言为Java。2总体设计与实现2.1通信协议为保证服务器与客户机正常的通信,我们需要确定所交换的信息属于何种类型。例如,客户机向服务器提出进入某个房间的请求后,服务器必须确认所请求的房间

9、是否允许它进入,然后,发送相应的消息给客户机。对于消息,我们可以采用“消息类型+内容”的形式。假若想进入第20号房间,那么,它需要向服务器发送消息“ROOM20”。如果第20号房间允许进入,那么,服务器在进行了某些处理后会向客户机传送消息“ROOM20”。相反,若20号房间禁止入内,则服务器将向客户机发送“FULL”消息。游戏中的消息类型见表2.1.1和表2.1.2。表2.1.1 客户机的消息客户机端消息类型说明NAME小明发送玩家的名字ROOM20请求进入20号房间MSG字符串发送聊天信息START通知已做好游戏开始的准备DROPGAME宣布弃权STONE5 7通知将妻子置于(5,7位置)W

10、IN宣布获胜STOPGAME通知终止游戏表2.1.2 服务器的消息服务器端消息类型说明EXIT小明通告小明退出房间ENTER小明通告小明进入房间STONE5 7通知对方已在(5,7)位置放置了棋子COLORBLACK通知开始时,通知黑棋已被选中COLORWHITE游戏开始时,通知白棋已被选中ROOM20通知玩家已经进入20号房间FULL通知房间都已满员DROPGAME通知对方已弃权WIN通告已经获胜LOSE通知游戏失败DISCONNECT通知对方已经掉线PLAYER发送当前房间中的用户名名字间使用tab键分割例:PLAYER小明t小红t小花2.2五子棋游戏服务器端服务器端主要有3个类:Omok

11、Server类、Omok_Thread类(线程类)、和BManager类(消息广播者)。OmokServer类在收到客户机的连接请求后,将创建新的套接字,并使其与客户机连接,然后启动线程,并将线程添加至BManager对象中。Private BManager bMan=new BManager(); /消息广播者对象While(true)Socket socket=server.accept(); /获取套接字Omok_Thread ot=new Omok_Thread(socket); /创建线程ot.start(); /启动线程bMan.add(ot); /添加线程Omok_Thread对

12、象不仅可以获取套接字、输入输出流,而且它还提供了有关客户机的信息,例如客户机的名称、房间号、游戏开始与否等。这是因为我们需要确定消息的来源及要在某个房间传播的消息。并且,消息广播者也需要参照线程对象的房间号,以便将消息发送至某个房间中。2.3五子棋客户端客户端首先要实现五子棋盘(OmokBoard类)。五子棋盘继承了画布类,它内嵌于框架窗口中,拥有15*15个格子。为了响应用户的下棋动作,五子棋盘必须能够响应鼠标事件,并且它必须拥有输出流,用以向对手传递当前棋手的下棋信息。程序中也有多种方法用来实现绘图操作。然而,程序中最重要的部分就是如何决定胜负。横、竖或者对角线向上拥有五颗同颜色的棋子时,

13、即为胜利。看图2.3.1,首先在1、2、3、4号位置各放置一颗黑色棋子。如果黑方最后一颗棋子放在5号位置,则黑方在横向上五子连珠,黑方胜。程序的实现:在放下5号棋子后,首先程序要计算出它左边连在一起的黑色棋子个数。其左边已放有1、2和3号棋子,且都是连在一起的,所以5号棋子左边相连的黑色棋子有一颗。然后,再计算5号棋子右边连在一起的黑色棋子个数。如图,5号棋子右边有4号。因此,5号棋子左边、右边还有其本身合起来总共五颗黑色棋子,黑方获胜。图2.3.1map是一个二元数组,用于保存棋子的位置。如果在(2,3)位置上有一颗黑色棋子,则向数组元素map23赋入BLACK(=1);若为白棋,则将WHI

14、TE(=-1)值代入。并且,如果某个位置没有任何棋子,则向对应的数组元素中赋0值。map23=BLACK; /在(2,3)位置上,放置黑色棋子map55=WHITE; /在(5,5)位置上,放置白色棋子map1010=0; /在(10,10)位置上,没有棋子count()方法用来查找并计算连载一起的棋子的个数。p为基准坐标,dx、dy分别为表示横向与竖向的变量。col代表棋子的颜色。若dx为-1,dy为0,则计算左边连续棋子的个数;若dx为1,dy为1,则计算左下到右上对角线方向上连续棋子的个数。dx与dy只取-1、0、1三个值之一。下面是count()方法的代码。private int co

15、nut(point p,int dx,int dy,int col) int i=0; for(; mapp.x+(i+1)*dxp.y+(i+1)*dy=col;i+) return 1; check()方法会调用count()方法,用来判断是否五子连珠。其代码如下。private boolean check(point p, int col) if(count(p,1,0,col)+count(p,-1,0,col)=4) /横向检查 return true; if(count(p,0,1,col)+count(p,0,-1,col)=4) /竖向检查 return true; if(co

16、unt(p,-1,-1,col)+count(p,1,1,col)=4) /对角线方向检查 return true; if(count(p,1,-1,col)+count(p,-1,1,col)=4) /对角线方向检查 return true; return false;3.程序的测试3.1服务器端的建立在Myeclipse10.0中运行服务器代码,截图如图3.1.1。图3.1.13.2客户机端的运行在Myeclipse10.0中执行客户机代码,截图如图3.2.1。右下角显示已经连接到服务器。图3.2.13.3五子棋游戏完整执行在Myeclipse10.0中完整执行游戏,如图3.3.1图3.3

17、.1双方进行下棋,并且在右下方进行了通讯。4.结束语Java作为一种分布式和可移植的计算机语言,在网络软件开发上有着特别的优点。它开发方便、快捷,安全性高,对以往复杂的功能,尤其是网络通信等方面,实现起来简洁明了,在网络编程领域有着巨大的发展潜力。这次Java课程设计完成了一个网络五子棋的设计和开发。包括服务器和客户端。不同的用户使用客户端,利用服务器相连。实现了用户在Internet上任何地方与别人进行五子对战。网络五子棋的实现用到了网络套接字和多线程的相关知识。服务器创建服务器Socket,并处于监听状态。客户端向服务器发出申请,服务器接受后,利用输入输出流进行通信。并开始一个线程,处理与

18、这个相连的客户端在游戏过程的数据传输、控制等。进行五子棋的一个主要算法就是判断输赢。这里采用计算落下棋子的横、竖及对角线方向的同色棋子的个数来实现。当个数为时为胜。服务器与客户端在通信过程中,双方如何知道发送信息的意义呢?这里发送的信息采用“消息类别+内容“的格式。服务器和客户端通过分析“消息类别”来采取不同的方法处理发送的数据。通过这次课程设计,加深了我对Java网络编程和多线程编程方面的了解。网络五子棋基本实现了网络对战的功能,但只能通过网络,没有实现人机对战的功能。也没有添加“禁手”规则。这时是已后要改进的地方。参考文献1 谢希仁 计算机网络(第6版). 电子工业出版社 ,20132 (

19、韩)徐明浩 Java编程基础、应用与实例.人民邮电出版社,20063 王吴迪,赵枫朝 Java开发与应用.电子工业出版社,2006附录 程序代码OmokServer.javaimport .*;import java.io.*;import java.util.*;public class OmokServer private ServerSocket server; private BManager bMan=new BManager(); private Random rnd= new Random(); public OmokServer() void startServer() try

20、 server=new ServerSocket(7777); System.out.println(服务器套接字已被创建.); while(true) Socket socket=server.accept(); Omok_Thread ot=new Omok_Thread(socket); ot.start(); bMan.add(ot); System.out.println(连接数: +bMan.size(); catch(Exception e) System.out.println(e); public static void main(String args) OmokServe

21、r server=new OmokServer(); server.startServer(); class Omok_Thread extends Thread private int roomNumber=-1; private String userName=null; private Socket socket; private boolean ready=false; private BufferedReader reader; private PrintWriter writer; Omok_Thread(Socket socket) this.socket=socket; Soc

22、ket getSocket() return socket; int getRoomNumber() return roomNumber; String getUserName() return userName; boolean isReady() return ready; public void run() try reader=new BufferedReader(new InputStreamReader(socket.getInputStream(); writer=new PrintWriter(socket.getOutputStream(), true); String ms

23、g; while(msg=reader.readLine()!=null) if(msg.startsWith(NAME) userName=msg.substring(6); else if(msg.startsWith(ROOM) int roomNum=Integer.parseInt(msg.substring(6); if( !bMan.isFull(roomNum) if(roomNumber!=-1) bMan.sendToOthers(this, EXIT+userName); roomNumber=roomNum; writer.println(msg); writer.pr

24、intln(bMan.getNamesInRoom(roomNumber); bMan.sendToOthers(this, ENTER+userName); else writer.println(FULL); else if(roomNumber=1 & msg.startsWith(STONE) bMan.sendToOthers(this, msg); else if(msg.startsWith(MSG) bMan.sendToRoom(roomNumber, +userName+: +msg.substring(5); else if(msg.startsWith(START) r

25、eady=true; if(bMan.isReady(roomNumber) int a=rnd.nextInt(2); if(a=0) writer.println(COLORBLACK); bMan.sendToOthers(this, COLORWHITE); else writer.println(COLORWHITE); bMan.sendToOthers(this, COLORBLACK); else if(msg.startsWith(STOPGAME) ready=false; else if(msg.startsWith(DROPGAME) ready=false; bMan

26、.sendToOthers(this, DROPGAME); else if(msg.startsWith(WIN) ready=false; writer.println(WIN); bMan.sendToOthers(this, LOSE); catch(Exception e) finally try bMan.remove(this); if(reader!=null) reader.close(); if(writer!=null) writer.close(); if(socket!=null) socket.close(); reader=null; writer=null; s

27、ocket=null; System.out.println(userName+已断线.); System.out.println(连接人数: +bMan.size(); bMan.sendToRoom(roomNumber,DISCONNECT+userName); catch(Exception e) class BManager extends Vector BManager() void add(Omok_Thread ot) super.add(ot); void remove(Omok_Thread ot) super.remove(ot); Omok_Thread getOT(i

28、nt i) return (Omok_Thread)elementAt(i); Socket getSocket(int i) return getOT(i).getSocket(); void sendTo(int i, String msg) try PrintWriter pw= new PrintWriter(getSocket(i).getOutputStream(), true); pw.println(msg); catch(Exception e) int getRoomNumber(int i) return getOT(i).getRoomNumber(); synchro

29、nized boolean isFull(int roomNum) if(roomNum=0)return false; int count=0; for(int i=0;i=2)return true; return false; void sendToRoom(int roomNum, String msg) for(int i=0;isize();i+) if(roomNum=getRoomNumber(i) sendTo(i, msg); void sendToOthers(Omok_Thread ot, String msg) for(int i=0;isize();i+) if(getRoomNumber(i)=ot.getRoomNumber() & getOT(i)!=ot) sendTo(i, msg); synchronized boolean isReady(int roomNum) int count=0; for(int i=0;isize();i+) if(roomNum

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1