Java五子棋网上对战代码.doc_第1页
Java五子棋网上对战代码.doc_第2页
Java五子棋网上对战代码.doc_第3页
Java五子棋网上对战代码.doc_第4页
Java五子棋网上对战代码.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

chessClient.java:客户端主程序。 chessInterface.java:客户端的界面。 chessPad.java:棋盘的绘制。 chessServer.java:服务器端。 可同时容纳50个人同时在线下棋,聊天。 没有加上详细注释,不过绝对可以运行,j2sdk1.4下通过。 /* 1.chessClient.java */ import java.awt.*; import java.awt.event.*; import java.io.*; import .*; import java.util.*; class clientThread extends Thread chessClient chessclient; clientThread(chessClient chessclient) this.chessclient=chessclient; public void acceptMessage(String recMessage) if(recMessage.startsWith(/userlist ) StringTokenizer userToken=new StringTokenizer(recMessage, ); int userNumber=0; chessclient.userpad.userList.removeAll(); chessclient.inputpad.userChoice.removeAll(); chessclient.inputpad.userChoice.addItem(所有人); while(userToken.hasMoreTokens() String user=(String)userToken.nextToken( ); if(userNumber0 & !user.startsWith(inchess) chessclient.userpad.userList.add(user); chessclient.inputpad.userChoice.addItem(user); userNumber+; chessclient.inputpad.userChoice.select(所有人); else if(recMessage.startsWith(/yourname ) chessclient.chessClientName=recMessage.substring(10); chessclient.setTitle(Java五子棋客户端 +用户名:+chessclient.chessClientName); else if(recMessage.equals(/reject) try chessclient.chesspad.statusText.setText(不能加入游戏); chessclient.controlpad.cancelGameButton.setEnabled(false); chessclient.controlpad.joinGameButton.setEnabled(true); chessclient.controlpad.creatGameButton.setEnabled(true); catch(Exception ef) chessclient.chatpad.chatLineArea.setText(chessclient.chesspad.chessSocket.close无法关闭); chessclient.controlpad.joinGameButton.setEnabled(true); else if(recMessage.startsWith(/peer ) chessclient.chesspad.chessPeerName=recMessage.substring(6); if(chessclient.isServer) chessclient.chesspad.chessColor=1; chessclient.chesspad.isMouseEnabled=true; chessclient.chesspad.statusText.setText(请黑棋下子); else if(chessclient.isClient) chessclient.chesspad.chessColor=-1; chessclient.chesspad.statusText.setText(已加入游戏,等待对方下子.); else if(recMessage.equals(/youwin) chessclient.isOnChess=false; chessclient.chesspad.chessVictory(chessclient.chesspad.chessColor); chessclient.chesspad.statusText.setText(对方退出,请点放弃游戏退出连接); chessclient.chesspad.isMouseEnabled=false; else if(recMessage.equals(/OK) chessclient.chesspad.statusText.setText(创建游戏成功,等待别人加入.); else if(recMessage.equals(/error) chessclient.chatpad.chatLineArea.append(传输错误:请退出程序,重新加入 n); else chessclient.chatpad.chatLineArea.append(recMessage+n); chessclient.chatpad.chatLineArea.setCaretPosition( chessclient.chatpad.chatLineArea.getText().length(); public void run() String message=; try while(true) message=chessclient.in.readUTF(); acceptMessage(message); catch(IOException es) public class chessClient extends Frame implements ActionListener,KeyListener userPad userpad=new userPad(); chatPad chatpad=new chatPad(); controlPad controlpad=new controlPad(); chessPad chesspad=new chessPad(); inputPad inputpad=new inputPad(); 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 southPanel=new Panel(); Panel northPanel=new Panel(); Panel centerPanel=new Panel(); Panel westPanel=new Panel(); Panel eastPanel=new Panel(); chessClient() super(Java五子棋客户端); setLayout(new BorderLayout(); host=controlpad.inputIP.getText(); westPanel.setLayout(new BorderLayout(); westPanel.add(userpad,BorderLayout.NORTH); westPanel.add(chatpad,BorderLayout.CENTER); westPanel.setBackground(Color.pink); inputpad.inputWords.addKeyListener(this); chesspad.host=controlpad.inputIP.getText(); centerPanel.add(chesspad,BorderLayout.CENTER); centerPanel.add(inputpad,BorderLayout.SOUTH); centerPanel.setBackground(Color.pink); 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); southPanel.add(controlpad,BorderLayout.CENTER); southPanel.setBackground(Color.pink); addWindowListener(new WindowAdapter() 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); public void windowActivated(WindowEvent ea) ); add(westPanel,BorderLayout.WEST); add(centerPanel,BorderLayout.CENTER); add(southPanel,BorderLayout.SOUTH); pack(); setSize(670,548); setVisible(true); setResizable(false); validate(); public boolean 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(); isOnChat=true; return true; 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); if(e.getSource()=controlpad.exitGameButton) if(isOnChat) try chatSocket.close(); catch(Exception ed) if(isOnChess | isGameConnected) try chesspad.chessSocket.close(); 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()+ +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); if(e.getSource()=controlpad.creatGameButton) try if(!isGameConnected) if(chesspad.connectServer(chesspad.host,chesspad.port) isGameConnected=true; isOnChess=true; isServer=true; controlpad.creatGameButton.setEnabled(false); controlpad.joinGameButton.setEnabled(false); controlpad.cancelGameButton.setEnabled(true); chesspad.chessthread.sendMessage(/creatgame +inchess+chessClientName); else isOnChess=true; isServer=true; controlpad.creatGameButton.setEnabled(false); controlpad.joinGameButton.setEnabled(false); controlpad.cancelGameButton.setEnabled(true); chesspad.chessthread.sendMessage(/creatgame +inchess+chessClientName); catch(Exception ec) isGameConnected=false; isOnChess=false; isServer=false; controlpad.creatGameButton.setEnabled(true); controlpad.joinGameButton.setEnabled(true); controlpad.cancelGameButton.setEnabled(false); ec.printStackTrace(); chatpad.chatLineArea.setText(chesspad.connectServer无法连接 n+ec); if(e.getSource()=controlpad.cancelGameButton) if(isOnChess) chesspad.chessthread.sendMessage(/giveup +chessClientName); chesspad.chessVictory(-1*chesspad.chessColor); controlpad.creatGameButton.setEnabled(true); controlpad.joinGameButton.setEnabled(true); controlpad.cancelGameButton.setEnabled(false); chesspad.statusText.setText(请建立游戏或者加入游戏); if(!isOnChess) controlpad.creatGameButton.setEnabled(true); controlpad.joinGameButton.setEnabled(true); controlpad.cancelGameButton.setEnabled(false); chesspad.statusText.setText(请建立游戏或者加入游戏); isClient=isServer=false; public void keyPressed(KeyEvent e) TextField inputWords=(TextField)e.getSource(); if(e.getKeyCode()=KeyEvent.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(); 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(); inputWords.setText(); controlpad.connectButton.setEnabled(true); public void keyTyped(KeyEvent e) public void keyReleased(KeyEvent e) public static void main(String args) chessClient chessClient=new chessClient(); /* 下面是:chessInteface.java */ import java.awt.*; import java.awt.event.*; import java.io.*; import .*; class userPad extends Panel List userList=new List(10); userPad() setLayout(new BorderLayout(); for(int i=0;i50;i+) userList.add(i+.+没有用户); add(userList,BorderLayout.CENTER); class chatPad extends Panel TextArea chatLineArea=new TextArea(,18,30,TextArea.SCROLLBARS_VERTICAL_ONLY); chatPad() setLayout(new BorderLayout(); add(chatLineArea,BorderLayout.CENTER); class controlPad extends Panel Label IPlabel=new Label(IP,Label.LEFT); TextField inputIP=new TextField(localhost,10); Button connectButton=new Button(连接主机); Button creatGameButton=new Button(建立游戏); Button joinGameButton=new Button(加入游戏); Button cancelGameButton=new Button(放弃游戏); Button exitGameButton=new Button(关闭程序); controlPad() setLayout(new FlowLayout(FlowLayout.LEFT); setBackground(Color.pink); add(IPlabel); add(inputIP); add(connectButton); add(creatGameButton); add(joinGameButton); add(cancelGameButton); add(exitGameButton); class inputPad extends Panel TextField inputWords=new TextField(,40); Choice userChoice=new Choice(); inputPad() setLayout(new FlowLayout(FlowLayout.LEFT); for(int i=0;i=1 & chessOptNum=3) chessOptchessOptNum-1=chessToken; chessOptNum+; ChessPaint(Integer.parseInt(chessOpt0),Integer.parseInt(chessOpt1),Integer.parseInt(chessOpt2); else if(recMessage.startsWith(/yourname ) chesspad.chessSelfName=recMessage.substring(10); else if(recMessage.equals(/error) chesspad.statusText.setText(错误:没有这个用户,请退出程序,重新加入); else /System.out.println(recMessage); public void run() String message=; try while(true) message=chesspad.inData.readUTF(); acceptMessage(message); catch(IOException es) class chessPad extends Panel implements MouseListener,ActionListener int chessPoint_x=-1,chessPoint_y=-1,chessColor=1; int chessBlack_x=new int200; int chessBlack_y=new int200; int chessWhite_x=new int200; int chessWhite_y=new int200; int chessBlackCount=0,chessWhiteCount=0; int chessBlackWin=0,chessWhiteWin=0; boolean isMouseEnabled=false,isWin=false,isInGame=false; TextField statusText=new TextField(请先连接服务器); Socket chessSocket; DataInputStream inData; DataOutputStream outData; String chessSelfName=null; String chessPeerName=null; String host=null; int port=4331; chessThread chessthread=new chessThread(this); chessPad() setSize(440,440); setLayout(null); setBackground(Color.pink); addMouseListener(this); add(statusText); statusText.setBounds(40,5,360,24); statusText.setEditable(false); public boolean connectServer(String ServerIP,int ServerPort) throws Exception try chessSocket=new Socket(ServerIP,ServerPort); inData=new DataInputStream(chessSocket.getInputStream(); outData=new DataOutputStream(chessSocket.getOutputStream(); chessthread.start(); return true; catch(IOException ex) statusText.setText(chessPad:connectServer:无法连接 n); return false; public void chessVictory(int chessColorWin) this.removeAll(); for(int i=0;i=chessBlackCount;i+) chessBlack_xi=0; chessBlack_yi=0; for(int i=0;i=chessWhiteCount;i+) chessWhite_xi=0; chessWhite_yi=0; chessBlackCount=0; chessWhiteCount=0; add(statusText); statusText.setBounds(40,5,360,24); if(chessColorWin=1) chessBlackWin+; statusText.setText(黑棋胜,黑:白为+chessBlackWin+:+chessWhiteWin+,重新开局,等待白棋下子.); else if(chessColorWin=-1) chessWhiteWin+; statusText.setText(白棋胜,黑:白为+chessBlackWin+:+chessWhiteWin+,重新开局,等待黑棋下子.); public void getLocation(int a,int b,int color) if(color=1) chessBlack_xchessBlackCount=a*20; chessBlack_ychessBlackCount=b*20; chessBlackCount+; else if(color=-1) chessWhite_xchessWhiteCount=a*20; chessWhite_ychessWhiteCount=b*20; chessWhiteCount+; public boolean checkWin(int a,int b,int checkColor) int step=1,chessLink=1,chessLinkTest=1,chessCompare=0; if(checkColor=1) chessLink=1; for(step=1;step=4;step+) for(chessCompare=0;chessCompare=chessBlackCount;chessCompare+) if(a+step)*20=chessBlack_xchessCompare) & (b*20)=chessBlack_ychessCompare) chessLink=chessLink+1; if(chessLink=5) return(true); if(chessLink=(chessLinkTest+1) chessLinkTest+; else break; for(step=1;step=4;step+) for(chessCompare=0;chessCompare=chessBlackCount;chessCompare+) if(a-step)*20=chessBlack_xchessCompare) & (b*20=chessBlack_ychessCompare) chessLink+; if(chessLink=5) return(true); if(chessLink=(chessLinkTest+1) chessLinkTest+; else break; chessLink=1; chessLinkTest=1; for(step=1;step=4;step+) for(chessCompare=0;chessCompare=chessBlack

温馨提示

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

评论

0/150

提交评论