1、摘要1997年,伴随计算机技术和网络的发展,第一款图形网络游戏网络创世界问世,应用计算机与网络的高尖端技术,融合传统的试听与数字娱乐精华,集娱乐,竞技,互动于一体,迅速风靡全球。自此拉开网络游戏的序幕。目前,PK已经成为现在人生活的一部分,人们以不同的方式通过网络来娱乐,休闲。五子棋是一种两人对已的纯策略型的棋类游戏,似起源于中国古代的传统的黑白棋种之一,发展与日本,流行于欧美。通过一系列的变化,使五子棋这一简单的游戏系统化,规范化,最终成为今天的职业连珠五子棋,同事也成为一种国际比赛棋,它不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性,容易学会,趣味横生,引人入胜。本程序是ecl
2、ipse平台下的一个小程序,使用JAVA语言,通过对Socket技术的理解,实现客户端与服务器之间的链接,利用多线程技术来处理服务器与客户端的数据传输,通信,实现程序的聊天内容,是的客户端和服务器之间能够同步的进行处理。通过对本游戏的开发,更深入的理解了面向对象的概念以及面向对象预言的一些问题的优势,也对线程的理解更加理解。关键字:JAVA 线程 数据传输 五子棋 eclipse 网络 socketAbstractIn 1997, along with the development of computer technology and network, the first graphics
3、network game network world, the application of computer and network of sophisticated technology, the fusion of traditional audio-visual and digital entertainment essence, entertainment, athletics, interactive as a whole, quickly catch on around the world. Since then kick network game.Currently, PK h
4、as become now a part of life, people in different ways through the network to entertainment and leisure. Gobang is one kind of two people to have pure strategy type chess game, originated in ancient Chinese traditional black white kind of like, one of the development in Japan, popular in Europe and
5、the United States. Through a series of changes, the simple game gobang systematization, standardization and eventually become todays professional renju renju colleagues also become an international chess game, it can not only enhance thinking ability, improve intelligence, and high in philosophy, he
6、lps to cultivate ones morality raises a gender, easy to learn, interesting, fascinating. This program is a small program, the eclipse platform using the JAVA language, through the understanding of the Socket technology, realize the link between the client and the server, using multithreading technol
7、ogy to deal with the server and the clients data transmission, communication, implementation procedures of chat content, yes to synchronization between the client and the server for processing.Through the development of this game, more in-depth understanding of the concept of object oriented and obj
8、ect oriented predicted that some of the problems of advantage, also understand more understanding of the thread.Key words: JAVA thread gobang the eclipse data transmission network目录摘要1Abstract21.概述 1.1:五子棋的发展41.1.1五子棋的研究背景41.1.2五子棋的研究意义51.2:传统五子棋和网络五子棋51.3五子棋的称谓52开发环境与编程语言2.1开发与运行环境62.1.1开发环境62.1.2运
9、行环境62.2编程语言63网络五子棋的需求分析与总体设计3.1需求分析83.1.1功能需求83.1.2用户界面需求83.2总体设计84.构架4.1客户端的实现104.2客户端的功能144.3服务器端的实现164.4服务器端的功能184.5客户端与服务器端的链接195.结论与体会5.1:经验总结215.2发开的心得体会21参考文献221.概述1.1五子棋的发展五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可是早在“尧造围棋”之前,民间就已有五子棋游戏。在上古的神话传说中有“女娲造人,伏羲做棋”一说,增山海经中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹌卵。”远古以来就以漂亮的
10、石子为棋,因而规则剪发的五子棋也可能出自当时,并是用石子作为棋子。亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中演变开来。五子棋不仅增强思维能力,体改智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短,平,快”,又有古典哲学的高深学问“阴阳易礼”;既有简单易学的特征,又为广大人民群众所喜闻乐见,又有深奥的技巧和高中水平的国际性比赛;棋文化源远流长,具有东方的神秘河西方的直观;既有“场”的概念,亦有“点”的链接。他是中西方的交流电,是古今哲学的结晶。随着1996年中央电视台(CCTV-5)黑白世界五子棋讲座的开播和中国五子棋网上比赛的开通,将世界连
11、珠五子棋运动的最新状况及时展现在眼前,为五子棋爱好者提供了尽情参与的机会,这无疑对国内的普及、发展起到了推动的作用。北京连珠五子棋体育文_化交流中心已拥有了22位国际段位棋手,他们肩负着新的历史使命,不断为中国五子棋爱好者提供立足国内、面向世界、一展才华的机会。我国于1998年8月成功地举办了第二届世界杯青少年锦标赛,1999年7月将在北京举办第六届世界杯冠军赛,2000年举办第三届世界杯团体赛。在北京的带动下,全国其他地区也先后成立了五子棋组织。河北廊坊地区成立了廊坊五子棋协会;天津市成立了由天津市体委领导的天津市五子棋工作委员会;上海、云南、杭州等地也都成立了五子棋的组织。五子棋的发展在中
12、国出现方兴未艾之势。1.1.1五子棋的研究背景随着近几年的软件技术的不断进步,不断完善,软件游戏的操作要求越来越简单,大多数游戏普通人学几分钟就能玩,甚至连来年人也慢慢爱上了它。第二次世界大战以后,电子计算机技术得到突飞猛进的发展,在众多国家中美国的计算机技术发展最为迅速。1946年世界第一台数字计算机在美国宾夕法尼亚大学建造完成。电子计算机的问世,代表了电子数字计算机的到来,具有挂时代的意义。在1956年我国研制成功国产计算机。1958年和1959年我国先后研制成功国产小型和大型电子计算机。后来出现了继承电路和大规模集成电路,是电子计算机一代一代实现更新,性能越来越高,计算速度越来越快,硬件
13、方面的不断发展促使了阮籍技术也迅速发展。目前,网络上我们经长看到的大型3D网络游和WEBGAME网页游戏等都是通过3DMAX,MAYA,FLASH等编程语言像结合而发展出来的,所以叫游戏软件。1.1.2五子棋的研究意义近年,国产网络游戏发展迅速,出现了比较热门的角色扮演类游戏、即时战略类游戏、动作射击类游戏等等。但是,国产网络游戏在继续迅猛发展的时候,也暴露出一些弊端,主要表现在网络游戏产品的内容和模式等方面,如网游服务器负载太重、资源消耗太大、游戏内容简单、模式单调乏味、网络对战还不能实现等等。因为没能提供用户真正期望的开发环境。此外,随着用户量增加,服务器负载较大,造成了系统效率下降和健壮
14、性的削弱,代价高,效率低,这些都是系统在网络游戏发展上的瓶颈。此次开发网络五子棋,使网游服务器负载减轻,资源消耗大大减少,实现了网络中俩人的对战。1.2 传统五子棋和网络五子棋传统五子棋仅提供了“单人模式”和“双人模式”。其中“单人模式”是指,人与计算机进行对弈,计算机按照事先编号的算法程序进行下棋;而“双人模式”是指,两个人通过交替使用同一台计算机来进行下棋。无论哪种模式,都必须在同一台计算机上来完成,无法异地下棋,因此叫单机五子棋。随着网络的迅猛发展,异地计算机开始通信,异地的用户通过网络来进行下棋,在胜负判别方面,单机版五子棋和网络版五子棋并没有什么区别,只是网络版的玩家双方各自有一套胜
15、负判别的程序。当一方玩家下一步棋后,他的胜负判别程序就执行一次,然后再将落子的信息传给对方,对方的胜负判别程序也将执行一次。就这样就完成一次胜负的判别过程。1.3五子棋的称谓五子棋,日文亦有“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”等多种称谓,英文则称之为“FIR (Five In A Row的缩写)、Gomoku(日语“五目”的罗马拼音)、Gobang、connect 5、mo-rphion”。捷克语piskvorky,韩语omok许多国家的人对五子棋都有不同的爱称,例如,韩国人把五子棋称为“情侣棋”,暗示情人之间下五子棋有利于增加情感的交流;欧洲人称其为“绅士棋”
16、,代表下五子棋的君子风度胜似绅士;日本人则称其为“中老年棋”,说明五子棋适合中老年人的生理特点和思维方式;美国人喜欢将五子棋称为“商业棋”,也就是说,商人谈生意时可边下棋边谈生意,棋下完了生意也谈成了。2.开发环境与编程语言2.1开发与运行环境2.1.1 开发环境Intel Pentium 4|2.0GHz,512M内存,80G硬盘Microsoft Windows7 ProfessionalEclipse 2.1.2运行环境本游戏属于一款休闲游戏,要求的运行环境为Intel Pentium 2及以上的处理器,32M以上的内存,20M以上的硬盘空间,Microsoft Windows 2000
17、或XP及以上的系统。800*6或以上的分辨率。2.2编程语言1990年12月,SUN MicroSystem公司成立了一个名为(Green Team)绿色项目的小组,Jame Gosling(Java之父),Bill Joe等人便是该小组的成员,小组成立的初衷是为了开发一种能够在电视,控制烤箱等家用消费类电子产品上进行交互式操作的分布式的系统框架,就这样一个名为Oak的软件诞生了。 1992年9月3日(Green Team)绿色项目小组展示了Start7手持设备,它类似于今天的PDA,这个设备中的程序就是用Oak程序设计语言实现的,Oak的名字由来是因为James Gosing的办公窗外有一棵
18、橡树,根据这橡树命名。但是,在注册商标时却发现这个名字已经被别的公司占用了,后来更名为Java(据说是以当时开发小组岛上的一种咖啡命名) 1993年,全世界第一个Internet网页浏览器Mosaic诞生了,,James Gosling认为Internet与Java特性不谋而合,便使用Java在Internet平台上编写出高交互性的网页程序,这就是Java Applet。可以实现一些类似时钟,统计图等网页特效,是在那个年代,其他程序设计语言所不能达到的。1995年,Oak被命名为Java编程语言,并于5月23日正式对外发布了JDK 1.0版本,Java语言也就因此正式诞生了。1997年,三周内
19、超过22万的开发者下载了JDK1.1软件,超过8,000名开发者参加了JavaOne大会,Java Card 2.0平台发布。随后98年JDK 1.1正式发布,其被下载次数超过200万,VISA公司应用Java Card技术推出了世界上首张智能卡,Java社区(JCP)成立。1999年,Java 2平台源代码公开,JavaOne大会参会人数增长到 20,000人,J2EE veta软件发布。2002年J2EE SDK下载次数达200万,78%的决策者认为,J2EE技术是具有影响力的网络构建开发平台。2004年 Java 2 Platform,Stadard Edition 5发布,利用Java
20、技术开发的火星探测器成功登陆火星, Sun Java Studio Creator发布2005年,JavaOne大会召开,SUN公司公开Java SE 6.此时,Java的各种版本已经更名,以取消其中的数字”2”:J2EE更名为 Java EE,J2SE更名为Java SE,J2ME更名为Java ME。到目前为止,J2SE已经发展为一个覆盖面广、效率高、易用性强的技术平台,但Java并没有停止前进的脚步。Mustang版本的J2SE正在紧锣密鼓的开发当中,按以前的惯例,每两年会发布一个全新的J2SE版本,所以Mustang开发版对应的J2SE6.0发布版将在2006年完成。 J2SE6.0
21、Specification Lead是Sun公司老资格的开发者Mark Reinhold,我们在J2SE1.2中就能看到他的影子。Mark Reinhold曾经是NIO(新 的I/O处理) API的Specification Lead,现在是Sun的J2SE架构师与总工程师。Mark Reinhold透露说,J2SE6.0将更易于管理,可以给外部的管理软件提供更多信息。它可以让调试软件在程序运行的时候进行检查,而不是在运行之前,这样更容易找到问题所在。他说,J2SE6.0将会更好地和图形用户界面集成,包括微软即将发布的Windows版Longhorn2005年3月23日是Java技术十周年庆典
22、日,在这十年的发展中,Java平台吸引了四百万开发者,在网络计算遍及全球的今天,更是有17.5亿台设备使用了Java技术。作为Java技术的基础,J2SE的功绩不可掩没,我们期望J2SE伴随Java平台一路走好。3.网络五子棋的需求分析与总体设计3.1需求分析软件的需求分析是软件生存期中重要的一步,也是决定性的一步。只有通过需求分析才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。在此阶段,了解用户要求本软件必须满足的所有功能和限制,以及用户对软件功能和性能的要求,弄清用户想要软件“做什么”,准确地表达用户的要求。3.1.1功能需求能通过网络下棋符合五子棋的基
23、本规则提供水平坐标和垂直坐标的功能可提供聊天功能3.1.2用户界面需求界面友好亲切界面干净整洁操作界面直观,不繁琐3.2总体设计在需求分析结束后,已经弄清楚了软件的各种需求,较好地解决了用户要软件“做什么”的问题,接下来就将着手实现软件的需求,即要着手解决“怎么做”的问题。在这个阶段着重实现需求的程序模块设计问题,并将需求转化为软件的系统结构,进行模块的划分,确定每个模块的功能、接口及模块之间的调用关系。根据需求分析制订出整个软件的系统结构图。如图2.1所示:对于服务器端,制定服务器端的地址和端口,然后在Socket上监听客户端的请求,此时如果有客户端已建立Socket树且发送了连接请求,此时
24、客户端和服务器就创建了连接,如果服务器端有其他的连接就阻塞此次连接,客户端再次发出请求,如果此时阻塞已没有,客户端和服务器就建立连接,接受用户请求信息,处理请求信息,将结果反馈给客户端,客户端接受到了服务结果。服务器端制定服务器端的地址和端口在Socket 上监听客户端请求阻塞,等待建立连接客户端创建Socket树接受服务结果解释并处理请求信息将处理结果反馈给客户端向服务器发送链接请求接受用户请求信息向服务器发出服务请求创建链接请求信息反馈信息图2.1系统结构图4.构架选用了C/S模式进行实现,网络内部使用TCP/IP方式利用SOCKET 通过传输层提供的服务,使用Java进行图形用户的搭建,
25、系统分为两个部分为服务器端程序和客户端程序。41客户端实现图4.1客户端客户端设有五个按钮(1)链接主机 在开始游戏前必须链接服务器,IP为本地的端口号,链接主机后,会有第一个用户进入到游戏中。如图4.2图4.2链接主机(2)建立游戏 在链接完主机后,按下建立游戏按钮,第一个用户就建立了游戏。如图4.3图4.3建立游戏(3)加入游戏当第一个游戏者创建完游戏后,在进来的用户可以加入到与第一个创建游戏的用户游戏中,再加入游戏前,必须选定一个有效用户,然后两个人才能进行网络五子棋的对抗游戏,如图4.4图4.4加入游戏(4)放弃游戏如果用户创建完游戏后不想进行游戏了,可以按下放弃游戏按钮,自动退出游戏
26、,如图4.5图4.5放弃游戏(5)关闭程序在不想进行游戏时可以直接关闭程序,如图4.6图4.6关闭程序(6)聊天系统两个游戏者可以进行聊天,方便用户的交流,本软件可以容纳50个人在线下棋聊天。如图4.7图4.7聊天系统4.2客户端的功能客户端是接受服务器端所有用户,用于用户玩游戏的界面操作。分析如下:chessClient有一个ServerSocket来开启网络服务,接受Socket,有了该类就可以进行网络对弈,对弈时,客户端下棋之后,在服务器端应该马上显示客户端下棋的位置,以保持游戏的同步,再有赢棋的时候双方都有提示性话语,赢棋的一方提示自己赢棋,并提示是否继续玩。public boolea
27、n connectServer(String serverIP,int serverPort) throws Exception/链接 try chatSocket=new Socket(serverIP,serverPort); in=new DataInputStream(chatSocket.getInputStream(); out=new DataOutputStream(chatSocket.getOutputStream(); clientThread clientthread=new clientThread(this); clientthread.start(); isOnC
28、hat=true; return true; catch(IOException ex) chatpad.chatLineArea.setText(chessClient:connectServer:无法连接,建议重新启动程序 n); return false; chessClient中有keyPressed用于校对关键字,如果在聊天时必须将下拉菜单中选中所有人,然后才可以进行聊天。代码如下:public void keyPressed(KeyEvent e) TextField inputWords=(TextField)e.getSource(); if(e.getKeyCode()=Ke
29、yEvent.VK_ENTER) if(inputpad.userChoice.getSelectedItem().equals(所有人) try out.writeUTF(inputWords.getText(); inputWords.setText(); catch(Exception ea) chatpad.chatLineArea.setText(chessClient:KeyPressed无法连接,建议重新连接 n); userpad.userList.removeAll(); inputpad.userChoice.removeAll(); inputWords.setText(
30、); controlpad.connectButton.setEnabled(true); else try out.writeUTF(/+inputpad.userChoice.getSelectedItem()+ +inputWords.getText(); inputWords.setText(); catch(Exception ea) chatpad.chatLineArea.setText(chessClient:KeyPressed无法连接,建议重新连接 n); userpad.userList.removeAll(); inputpad.userChoice.removeAll
31、(); inputWords.setText(); controlpad.connectButton.setEnabled(true); 4.3服务器的实现服务器中有类MessageServer,publicTalk ,makeMessageServerMessageServer继承了Panel类,设置了棋盘的大小,背景颜色,消息盘的大小,全面设置了界面中各种窗口的大小。代码如下:class MessageServer extends Panel /implements ActionListener TextArea messageBoard=new TextArea(,22,50,TextA
32、rea.SCROLLBARS_VERTICAL_ONLY); Label statusLabel=new Label(当前连接数:,Label.LEFT); Panel boardPanel=new Panel(); Panel statusPanel=new Panel(); MessageServer() setSize(350,300); setBackground(Color.pink); setLayout(new BorderLayout(); boardPanel.setLayout(new FlowLayout(); boardPanel.setSize(210,210); s
33、tatusPanel.setLayout(new BorderLayout(); statusPanel.setSize(210,50); boardPanel.add(messageBoard); statusPanel.add(statusLabel,BorderLayout.WEST); add(boardPanel,BorderLayout.CENTER); add(statusPanel,BorderLayout.NORTH); publicTalk实现了聊天功能代码如下:public boolean peerTalk(String peerTalk,String talkMessa
34、ge) for(Enumeration enu=clientDataHash.keys();enu.hasMoreElements();) Socket userClient=(Socket)enu.nextElement(); if(peerTalk.equals(String)clientNameHash.get(userClient) & !peerTalk.equals(String)clientNameHash.get(clientSocket) synchronized(clientDataHash) DataOutputStream peerOutData=(DataOutput
35、Stream)clientDataHash.get(userClient); try peerOutData.writeUTF(talkMessage); catch(IOException es) es.printStackTrace(); Feedback(talkMessage); return(false); else if(peerTalk.equals(String)clientNameHash.get(clientSocket) Feedback(talkMessage); return(false); return(true); makeMessageServer显示服务器的状
36、态代码如下:public void makeMessageServer(int port,MessageServer server) throws IOException Socket clientSocket; long clientAccessNumber=1; this.server=server; try serverSocket=new ServerSocket(port); server.messageBoard.setText(服务器开始于:+serverSocket.getInetAddress().getLocalHost()+:+serverSocket.getLocalP
37、ort()+n); while(true) clientSocket=serverSocket.accept(); server.messageBoard.append(用户连接:+clientSocket+n); DataOutputStream outData=new DataOutputStream(clientSocket.getOutputStream(); clientDataHash.put(clientSocket,outData); clientNameHash.put(clientSocket,(新来客+clientAccessNumber+); ServerThread
38、thread=new ServerThread(clientSocket,clientDataHash,clientNameHash,chessPeerHash,server); thread.start(); catch(IOException ex) System.out.println(已经有服务器在运行. n); 4.4服务器的功能服务器是存储所有连接者的相关信息以及各种状态,负责客户间信息的传递。Socket编程接口,代码如下:class ServerThread extends Thread Socket clientSocket; Hashtable clientDataHash
39、; Hashtable clientNameHash; Hashtable chessPeerHash; MessageServer server; boolean isClientClosed=false; ServerThread(Socket clientSocket,Hashtable clientDataHash,Hashtable clientNameHash,Hashtable chessPeerHash,MessageServer server) this.clientSocket=clientSocket; this.clientDataHash=clientDataHash
40、; this.clientNameHash=clientNameHash; this.chessPeerHash=chessPeerHash; this.server=server; 运行结果如图4.8:图4.8运行结果4.5客户端与服务器的链接如图4.9图4.9链接图SeverSeverSocket ss(port#)ss.accept/等待链接OutputStreamInputStreamss.close()ClientSeverSocket ss(port#)ss.accept/请求链接服务器OutputStreamInputStreamss.close()服务器端创建Socket监听端
41、口,等待客户端的连接,客户端连接服务器,被Socket监听端口捕获,与服务器建立了连接,客户端的输入输出信息经服务器传给所要传的用户。客户端与服务器就建立额连接。5.总结与体会5.1经验总结网络五子棋软件的开发让我经历了一次前所未有的体验,让我真正体会到了“书到用时方恨少”的含义,体会到了厚积薄发的意义所在,这次的开发是对自己所学的知识的一次大考验,也是对自己潜能的一次挖掘。现在把一些开发的经验总结如下:要充分准备,在系统分析于设计阶段要做的尽可能详细,全面,以免在后阶段返工,浪费时间,人力等。运用高效的测试手段。测试要占开发很大的时间,软件编码以后,并非总能百分百的成功,那就要进行测试。在大
42、程序中,多写异常处理的代码,以及变量合法的检验等,DEBUG中混合使用断点测试以及报告函数(MessageBox),以提高DEBUG效率。要善于查找书籍,资料。在软件开发过程中,资料是必不可少的,在开发时不要急于设计编码,应该学会画出程序流程图,想好下一步要干什么,怎样做到编码的利用最大化,多看一些前辈的代码,吸取他们的优点,然后加以改进,使之更加完善。5.2开发的心得体会此次毕业设计我选择的是网络五子棋的开发,在开发过程中我运用了大部分所学的知识,像网络操作系统,局域网等课程的知识,以及对服务器端的开发,以及如何将服务器端和客户端链接等问题,在之前自己对于这些知识一无所知,但在编程中查阅了很多资料,从中学到了很多知识,让我感觉到王章高楼平地起,我们平时需要的事扎实的基础,我们不应该轻视书本的知识,不要认为书本的知识很肤浅,只有学好书本的知识才能更广泛的应用到其他领域。网络五子棋软件的开发再一次让我体会到了,微软的操作系统其简单快捷背后所隐藏的极其复杂的驱动机制,微软确实为我们带来了很好的使用环境和开发环境,所有我们要做的事情都是站在巨人的肩膀上完成的。参考文献谢希仁,计算机网络,电子工业出版社,2006;