欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    java五子棋游戏代码 .pdf

    • 资源ID:39740392       资源大小:216.63KB        全文页数:38页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java五子棋游戏代码 .pdf

    package server;import java.io.*;import .*;import java.awt.*;import java.util.*;import java.awt.event.*;/*显示服务器及用户信息的Panel 类*/class MessageServerPanel extends Panel /主消息窗口TextArea messageBoard=new TextArea(,22,50,TextArea.SCROLLBARS_VERTICAL_ONLY);Label statusLabel=new Label(当前连接数:,Label.LEFT);Panel boardPanel=new Panel();/主显示区Panel Panel statusPanel=new Panel();/连接状态Panel MessageServerPanel()setSize(350,300);setBackground(new Color(204,204,204);setLayout(new BorderLayout();boardPanel.setLayout(new FlowLayout();boardPanel.setSize(210,210);statusPanel.setLayout(new BorderLayout();statusPanel.setSize(210,50);boardPanel.add(messageBoard);statusPanel.add(statusLabel,BorderLayout.WEST);add(boardPanel,BorderLayout.CENTER);add(statusPanel,BorderLayout.NORTH);/*服务器线程,主要用于服务器与客户端的通信*/class ServerThread extends Thread Socket clientSocket;Hashtable clientDataHash;/Socket 与发送数据的流的映射名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 38 页 -Hashtable clientNameHash;/Socket 与用户名的映射Hashtable chessPeerHash;/对弈的两个客户端用户名的映射MessageServerPanel server;boolean isClientClosed=false;/*服务器端线程的构造函数,用于初始化一些对象。*/ServerThread(Socket clientSocket,Hashtable clientDataHash,Hashtable clientNameHash,Hashtable chessPeerHash,MessageServerPanel server)this.clientSocket=clientSocket;this.clientDataHash=clientDataHash;this.clientNameHash=clientNameHash;this.chessPeerHash=chessPeerHash;this.server=server;/*对客户端发来的消息处理的函数,处理后转发回客户端。处理消息的过程比较复杂,要针对很多种情况分别处理。*/public void messageTransfer(String message)String clientName,peerName;/命令处理/如果消息以“/”开头,表明是命令消息。if(message.startsWith(/)/如果消息以“/list”开头,则将其回馈到客户端以更新用户列表if(message.equals(/list)Feedback(getUserList();/如果消息以/creatgame inchess 开头,则修改clientNameHash 映射/和 chessPeerHash映射。else if(message.startsWith(/creatgame inchess)/String chessServerName=message.substring(20);synchronized(clientNameHash)clientNameHash.put(clientSocket,message.substring(11);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 38 页 -synchronized(chessPeerHash)/刚创建,等待其他人加入chessPeerHash.put(chessServerName,wait);Feedback(/yourname +clientNameHash.get(clientSocket);chessPeerTalk(chessServerName,/OK);publicTalk(getUserList();/如果消息以“/joingame”开头,则将消息的服务端名字和本地用户名提取出来,/然后修改clientNameHash 表和 chessPeerHash表。if(message.startsWith(/joingame)StringTokenizer userToken=new StringTokenizer(message,);String getUserToken,serverName,selfName;String chessNameOpt=0,0;int getOptNum=0;/提取服务端用户名和本地用户名while(userToken.hasMoreTokens()getUserToken=(String)userToken.nextToken();if(getOptNum=1&getOptNum +message;if(peerTalk(peerName,message)Feedback(没有这个用户:+peerName+n);/如果不以“/”开头,表明是普通消息,直接发送else message=clientNameHash.get(clientSocket)+message;server.messageBoard.append(message+n);publicTalk(message);server.messageBoard.setCaretPosition(server.messageBoard.getText().length();/*发送公共消息的函数,将消息向每个客户端都发送一份*/public void publicTalk(String publicTalkMessage)synchronized(clientDataHash)/枚举遍历所有客户端输出流。for(Enumeration enu=clientDataHash.elements();enu.hasMoreElements();)DataOutputStream outData=(DataOutputStream)enu.nextElement();try /输出信息。这里会阻塞outData.writeUTF(publicTalkMessage);catch(IOException es)/打印异常堆栈。终止程序。es.printStackTrace();名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 38 页 -/*选择对象发送消息,参数peerTalk 为发送的用户名,后面的参数为发送的消息*/public boolean peerTalk(String peerTalk,String talkMessage)/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=(DataOutputStream)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);/*此函数也用于选择发送消息,但不能发送给自己。*/public boolean chessPeerTalk(String chessPeerTalk,String chessTalkMessage)for(Enumeration enu=clientDataHash.keys();enu.hasMoreElements();)Socket userClient=(Socket)enu.nextElement();if(chessPeerTalk.equals(String)clientNameHash.get(userClient)名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 38 页 -&!chessPeerTalk.equals(String)clientNameHash.get(clientSocket)synchronized(clientDataHash)DataOutputStream peerOutData=(DataOutputStream)clientDataHash.get(userClient);try peerOutData.writeUTF(chessTalkMessage);catch(IOException es)es.printStackTrace();return(false);return(true);/*用于处理消息回馈的函数*/public void Feedback(String feedbackString)synchronized(clientDataHash)/得到输出流。DataOutputStream outData=(DataOutputStream)clientDataHash.get(clientSocket);try /输出信息。outData.writeUTF(feedbackString);catch(Exception eb)/打印堆栈轨迹,程序终止。eb.printStackTrace();/*获取用户列表的函数,此函数读取clientNameHash 获取用户列表,然后将其保存在一个字符串userList 中。*/public String getUserList()String userList=/userlist;/遍历 hashtable中的 values,以空格分割连接起来for(Enumeration enu=clientNameHash.elements();enu.hasMoreElements();)userList=userList+(String)enu.nextElement();名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 38 页 -return userList;/*给出 HashTable 和值对象,获取相对应得键值的函数。*/public Object getHashKey(Hashtable targetHash,Object hashValue)Object hashKey;for(Enumeration enu=targetHash.keys();enu.hasMoreElements();)hashKey=(Object)enu.nextElement();/如果键对应的值与hashValue相等,则返回这个key if(hashValue.equals(Object)targetHash.get(hashKey)return(hashKey);return(null);public void firstCome()/新用户第一次加入、广播用户列表。publicTalk(getUserList();/反馈给这个用户,以修改相应显示信息。Feedback(/yourname +(String)clientNameHash.get(clientSocket);Feedback(Java 五子棋聊天客户端);Feedback(/changename -更改名字);Feedback(/list-更新用户列表);Feedback(/-私聊);Feedback(注意:用命令的时候,先把谈话的对象定为所有人);/*用于和客户端断开的函数。*/public void clientClose()server.messageBoard.append(用户断开:+clientSocket+n);/如果是游戏客户端主机synchronized(chessPeerHash)if(chessPeerHash.containsKey(clientNameHash.get(clientSocket)chessPeerHash.remove(String)clientNameHash.get(clientSocket);if(chessPeerHash.containsValue(clientNameHash.get(clientSocket)chessPeerHash.put(String)getHashKey(chessPeerHash,(String)clientNameHash.get(clientSocket),tobeclosed);名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 38 页 -/将保留的HashTable 里的数据清除synchronized(clientDataHash)clientDataHash.remove(clientSocket);synchronized(clientNameHash)clientNameHash.remove(clientSocket);/广播更新用户列表。publicTalk(getUserList();/计算当前连接数,并显示在状态框中server.statusLabel.setText(当前连接数:+clientDataHash.size();try clientSocket.close();catch(IOException exx)isClientClosed=true;public void run()DataInputStream inData;synchronized(clientDataHash)server.statusLabel.setText(当前连接数:+clientDataHash.size();try inData=new DataInputStream(clientSocket.getInputStream();firstCome();while(true)String message=inData.readUTF();messageTransfer(message);catch(IOException esx)finally if(!isClientClosed)clientClose();/*author wufenghanren 服务器端框架类*/名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 38 页 -public class chessServer extends Frame implements ActionListener Button messageClearButton=new Button(清除显示);Button serverStatusButton=new Button(服务器状态);Button serverOffButton=new Button(关闭服务器);Panel buttonPanel=new Panel();MessageServerPanel server=new MessageServerPanel();ServerSocket serverSocket;Hashtable clientDataHash=new Hashtable(50);Hashtable clientNameHash=new Hashtable(50);Hashtable chessPeerHash=new Hashtable(50);/*框架类的构造函数*/chessServer()super(Java 五子棋服务器);setBackground(new Color(204,204,204);buttonPanel.setLayout(new FlowLayout();messageClearButton.setSize(60,25);buttonPanel.add(messageClearButton);messageClearButton.addActionListener(this);serverStatusButton.setSize(75,25);buttonPanel.add(serverStatusButton);serverStatusButton.addActionListener(this);serverOffButton.setSize(75,25);buttonPanel.add(serverOffButton);serverOffButton.addActionListener(this);add(server,BorderLayout.CENTER);add(buttonPanel,BorderLayout.SOUTH);/退出窗口的监听器addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0);名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 38 页 -);setVisible(true);setSize(400,450);setResizable(false);validate();try makeMessageServer(4331,server);catch(Exception e)System.out.println(e);/*初始化消息服务器的类*/public void makeMessageServer(int port,MessageServerPanel server)throws IOException Socket clientSocket;long clientAccessNumber=1;this.server=server;try /输出服务器的启动信息serverSocket=new ServerSocket(port);server.messageBoard.setText(服务器开始于:+serverSocket.getInetAddress().getLocalHost()+:+serverSocket.getLocalPort()+n);while(true)clientSocket=serverSocket.accept();server.messageBoard.append(用户连接:+clientSocket+n);DataOutputStream outData=new DataOutputStream(clientSocket.getOutputStream();/在这里填充这两个Hashtable,在对应线程里用到。clientDataHash.put(clientSocket,outData);clientNameHash.put(clientSocket,(玩家 +clientAccessNumber+);/每连接一个用户,创建一个线程,监听服务。ServerThread thread=new ServerThread(clientSocket,clientDataHash,clientNameHash,chessPeerHash,server);thread.start();catch(IOException ex)名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 38 页 -System.out.println(已经有服务器在运行.n);/*按钮的事件监听器,响应按钮点击事件*/public void actionPerformed(ActionEvent e)if(e.getSource()=messageClearButton)server.messageBoard.setText();/当“服务器状态”按钮点击时,显示服务器状态if(e.getSource()=serverStatusButton)try/显示服务器信息server.messageBoard.append(服务器信息:+serverSocket.getInetAddress().getLocalHost()+:+serverSocket.getLocalPort()+n);catch(Exception ee)System.out.println(serverSocket.getInetAddress().getLocalHost()error n);if(e.getSource()=serverOffButton)/关闭服务。System.exit(0);public static void main(String args)/主函数,启动服务器。chessServer chessServer=new chessServer();package client;import chessface.chatPad;import chessface.inputPad;import chessface.userPad;import chessface.chessPad;import chessface.controlPad;import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import java.util.*;/*名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 38 页 -*五子棋客户端框架,实现了动作监听器和键盘监听器*/public class chessClient extends Frame implements ActionListener,KeyListener userPad userpad=new userPad();/用户列表Panel chatPad chatpad=new chatPad();/聊天信息Panel controlPad controlpad=new controlPad();/控制 Panel chessPad chesspad=new chessPad();/棋盘 Panel inputPad inputpad=new inputPad();/信息输入Panel Socket chatSocket;DataInputStream in;DataOutputStream out;String chessClientName=null;String host=null;int port=4331;boolean isOnChat=false;/是否在聊天boolean isOnChess=false;/是否在下棋boolean isGameConnected=false;/是否下棋的客户端连接boolean isServer=false;/是否建立游戏的主机boolean isClient=false;/是否加入游戏的客户端Panel northPanel=new Panel();Panel centerPanel=new Panel();Panel eastPanel=new Panel();/*名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 38 页 -*五子棋客户端框架的构造函数。用来初始化一些对象、布局和为按钮添加监听器。*/public chessClient()/窗口标题super(五子棋客户端);/设置布局setLayout(new BorderLayout();/获取服务器ip 地址host=controlpad.inputIP.getText();/右侧的 Panel,向里面添加用户列表和聊天信息列表的Panel/设置 eastPanel布局eastPanel.setLayout(new BorderLayout();/在其上添加用于列表eastPanel.add(userpad,BorderLayout.NORTH);/在其上添加聊天信息窗口eastPanel.add(chatpad,BorderLayout.CENTER);/设定背景色eastPanel.setBackground(new Color(204,204,204);/对编辑输出信息窗口添加事件监听器.inputpad.inputWords.addKeyListener(this);/设置棋盘Panel 所需的服务器地址chesspad.host=controlpad.inputIP.getText();/向 centerPanel中添加棋盘和用户输入消息panel,并设定背景颜色centerPanel.add(chesspad,BorderLayout.CENTER);centerPanel.add(inputpad,BorderLayout.SOUTH);centerPanel.setBackground(new Color(204,204,204);/为 controlpad 中的按钮们添加事件监听.controlpad.connectButton.addActionListener(this);controlpad.creatGameButton.addActionListener(this);controlpad.joinGameButton.addActionListener(this);controlpad.cancelGameButton.addActionListener(this);controlpad.exitGameButton.addActionListener(this);/初始设定这几个按钮为非激活状态.controlpad.creatGameButton.setEnabled(false);controlpad.joinGameButton.setEnabled(false);controlpad.cancelGameButton.setEnabled(false);/添加 controlpad 到 northPanel-最上端的panel northPanel.add(controlpad,BorderLayout.CENTER);northPanel.setBackground(new Color(204,204,204);/添加窗口监听器,当窗口关闭时,关闭用于通讯的Socket。addWindowListener(new WindowAdapter()名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 38 页 -public void windowClosing(WindowEvent e)if(isOnChat)/如果聊天连接已建立,则释放try chatSocket.close();catch(Exception ed)if(isOnChess|isGameConnected)/如果下棋连接已建立,则释放try chesspad.chessSocket.close();catch(Exception ee)System.exit(0););/添加这些panel 到 frame,组成最终窗口add(eastPanel,BorderLayout.EAST);add(centerPanel,BorderLayout.CENTER);add(northPanel,BorderLayout.NORTH);/设置大小等setSize(670,560);setVisible(true);setResizable(true);validate();/*和服务器建立连接并通信的函数。*return true 如果连接成功,false 如果连接失败.*/public boolean connectServer(String serverIP,int serverPort)throws Exception try /System.out.println(in chessClient#connectServer);/建立聊天socket chatSocket=new Socket(serverIP,serverPort);/由 socket 得到输入输出流.in=new DataInputStream(chatSocket.getInputStream();out=new DataOutputStream(chatSocket.getOutputStream();/创建线程clientThread clientthread=new clientThread(this);clientthread.start();isOnChat=true;return true;名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 38 页 -catch(IOException ex)/连接不成功chatpad.chatLineArea.setText(chessClient:connectServer:无法连接,建议重新启动程序n);return false;/*动作监听器,响应按钮点击动作。*/public void actionPerformed(ActionEvent e)/如果点击的是“连接主机”按钮,则用获取的服务器主机名连接服务器。if(e.getSource()=controlpad.connectButton)host=chesspad.host=controlpad.inputIP.getText();try if(connectServer(host,port)/连接成功chatpad.chatLineArea.setText();/连接按钮设置为非激活态.controlpad.connectButton.setEnabled(false);/激活创建,加入游戏按钮controlpad.creatGameButton.setEnabled(true);controlpad.joinGameButton.setEnabled(true);chesspad.statusText.setText(连接成功,请创建游戏或加入游戏);catch(Exception ei)/连接失败chatpad.chatLineArea.setText(controlpad.connectButton:无法连接,建议重新启动程序n);/如果点击的是“关闭程序”按钮,则关闭正在进行通信的Socekt 并退出游戏。if(e.getSource()=controlpad.exitGameButton)if(isOnChat)/如果聊天连接建立则释放try chatSocket.close();catch(Exception ed)if(isOnChess|isGameConnected)/如果下棋连接建立,则释放try chesspad.chessSocket.close();名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 38 页 -catch(Exception ee)System.exit(0);/如果点击的是“加入游戏”按钮,则先判断选定的加入的目标是否有效。/如果选定的目标为空或正在下棋或为其本身,则认为目标无效。if(e.getSource()=controlpad.joinGameButton)/得到选择的用户String selectedUser=userpad.userList.getSelectedItem();if(selectedUser=null|selectedUser.startsWith(inchess)|selectedUser.equals(chessClientName)chesspad.statusText.setText(必须先选定一个有效用户);else try /如果未建立与服务器的连接,创建连接,设定用户的当前状态。/此外还要对按钮作一些处理,将“创建连接”按钮和“加入游戏按钮”设为不可用。if(!isGameConnected)if(chesspad.connectServer(chesspad.host,chesspad.port)isGameConnected=true;isOnChess=true;isClient=true;controlpad.creatGameButton.setEnabled(false);controlpad.joinGameButton.setEnabled(false);controlpad.cancelGameButton.setEnabled(true);/向服务器发送用户加入游戏的消息chesspad.chessthread.sendMessage(/joingame +userpad.userList.getSelectedItem()+chessClientName);/如果已建立连接,省去建立连接的操作。else isOnChess=true;isClient=true;controlpad.creatGameButton.setEnabled(false);controlpad.joinGameButton.setEnabled(false);controlpad.cancelGameButton.setEnabled(true);/向服务器发送用户加入游戏的消息chesspad.chessthread.sendMessage(/joingame +userpad.userList.getSelectedItem()+名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 38 页 -+chessClientName);catch(Exception ee)/加入游戏失败。isGameConnected=false;isOnChess=false;isClient=false;controlpad.creatGameButton.setEnabled(true);controlpad.joinGameButton.setEnabled(true);controlpad.cancelGameButton.setEnabled(false);chatpad.chatLineArea.setText(chesspad.connectServer 无法连接n+ee);/如果点击的是“创建游戏”按钮,设定用户状态、按钮状态,然后

    注意事项

    本文(java五子棋游戏代码 .pdf)为本站会员(C****o)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开