五子棋java课程设计

时间:2024.4.5

目 

一、课程设计任务及要求............................................................. 1

二、需求分析................................................................................ 1

2.1 棋盘板块.................................................................................................. 1

2.2 聊天板块.................................................................................................. 1

2.3 ChatSever................................................................................................ 1

2.4 编译环境.................................................................................................. 1

2.5 参考资料.................................................................................................. 1

三、设计思路................................................................................ 1

3.1 板块的显示.............................................................................................. 1

3.2 注册监听.................................................................................................. 2

3.3 ChatServer............................................................................................... 2

3.4 下棋.......................................................................................................... 2

四、详细设计................................................................................ 3

4.1 WuZiQi类................................................................................................. 3

4.2 ChatSever类........................................................................................... 4

4.3多用户聊天............................................................................................... 5

4.4 流程图...................................................................................................... 6

五、运行调试与分析讨论............................................................. 7

六、设计体会与小结..................................................................... 9

七、参考文献.............................................................................. 10


一、课程设计任务及要求

1、五子棋游戏室界面:用户可以选择对弈桌及角色(执黑、执白、旁观);

2、游戏界面:有开始、退出、悔棋、判断胜负;发言及显示区;用户列表       

   区;棋盘绘制区;

3、使用Socket来完成服务端和客户端的通信;

4、使用多线程技术支持多用户操作;

5、增强功能:支持用户注册、添加和删除好友、战绩显示、发送消息、接   

   受消息、多人聊天等功能;使用数据库保存用户信息。

二、需求分析

2.1 棋盘板块

        画一个15×15的棋盘版面,及两个按钮组。初始化:开始、重置、         

        退出;角色选择:黑方、白方、旁观。

2.2 聊天板块

    聊天信息显示区,聊天信息输入区。

2.3 ChatSever

       模拟服务器:用于桥接不同用户,实现接收用户发出的信息,然后

       将信息传递到每个用户的聊天窗口。

2.4 编译环境

       Eclipse 实验室上机  在宿舍编写

2.5 参考资料

       Java 语言使用教程,百度文库资料(五子棋判断胜负算法)。

三、设计思路

3.1 板块的显示

    画棋盘    调用public void paint(Graphics g){QiPan(g);}方法

              画一个15×15的棋盘面版。

    初始化    定义两个Panel P1、P2,在初始化板块将JButton 开始、

              重置,退出加入到P1,将黑方、白方、旁观加入到P2。

    聊天板块 在初始化时定义一个JTextArea 和一个JTextField 实现聊

             天功能

3.2 注册监听  

   对角色选择按钮注册ActionListener监听,设置用户的角色。定义黑子int类型 0,白子1。

   对按钮开始、重置注册ActionListener监听,如果点击开始,用户进 入下棋状态,有一方赢了,棋盘上则不能再点击棋子。点击重置,则开始新的一轮。

   对鼠标注册mouseClicked监听,鼠标点击棋盘时获取下棋的位置。

   对JTextField注册ActionListener,用户输入聊天信息后,通过Server传递给其他用户,在对话框JTextArea内显示。

3.3 ChatServer

class ServerThread implements Runnable{ }类监听线程,监听是否有客户端法过信息来。

属性: 

      Vector threads 向量存储线程

      Socket socket 服务端口

       DataInputStream in 输入流

      DataOutputStream out 输出流

      int nid  用户ID

方法:

    构造器public ServerThread(Socket socket,Vector threads)

    实现信息的输入、输出

实现public void run()监听客户端是否发信息过来,当客户离开时向       

其他客户发信息,把客户端的信息发给其他客户。                                                  

    服务器向客户端发信息public void write(String msg)

    获取线程IDpublic int getID()

    设置线程IDpublic void setID(int nid)

  在Chatserver类内调用ServerThread 实现对所有来访客户监听,为来访者设置ID,若有离开用户,则在聊天板块广播。

3.4 下棋

用二维数组模拟棋盘chessbody[17][17],黑方下棋,则黑方所下棋位置的值等于旗子的颜色加一,白方类似。最后1代表下了黑棋,2表示下了白棋,0表示没下棋。

从横向、纵向、斜方向判断胜负。下完一步判断一次,有一个方向上同色棋子数超过5,则胜负已判断。

四、详细设计

4.1 WuZiQi类

    属性:   int color_Qizi=0;   黑子0   白子1

             int ChessBody[][]=new int[17][17];

             无棋子 0,黑棋 1,白棋 2;

             int GameStart=0;

             JButton start,exit,rest;

             JButton check[]=new JButton[3];

             String chess[]={"黑方","白方","旁观"};

    方法:  

         获取下棋位点

         public void mouseClicked(MouseEvent e){

         //Graphics g=getGraphics();

         int x,y;

         x=e.getX();y=e.getY();//鼠标点击位置

         if(x<45||y<45||x>495||y>495)

         {return;}//在棋盘之外则不下

         if(x%30>15)//获取下棋点的位置

             {x+=30;}

         if(y%30>15)

             {y+=30;}

         x=x/30*30; //x、y为棋子中心位置

         y=y/30*30;

         PlayQizi(x,y);//下棋 }

       下棋点击后天上棋子,每一步完了后判断胜负,从四个方向上判断

       胜负,并在棋盘中间显示哪方赢了!

     publicvoid PlayQizi(int x,int y){

        if (GameStart==0) //判断游戏未开始

       { return; }

       if (ChessBody[x/30][y/30]!=0)

       {return;}

       Graphics g=getGraphics();

        if (color_Qizi==1)//判断黑子还是白子

            {g.setColor(Color.black);

              color_Qizi=0;

            }

       else    {g.setColor(Color.white);

                 color_Qizi=1;

               }

       g.fillOval(x-12,y-12,24,24);

       ChessBody[x/30][y/30]=color_Qizi+1;

       /////判断输赢//////////

       g.setColor(Color.magenta);

       g.setFont(new Font("fhahf ",Font.BOLD,30));

    if(GameWin横(x/30,y/30)){

       g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);

       GameStart=0;

    }

    if(GameWin竖(x/30,y/30)){

       g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);

       GameStart=0;

    }

            if(GameWin撇(x/30,y/30)){

       g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);

       GameStart=0;}

    if(GameWin捺(x/30,y/30)){

       g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);

       GameStart=0;}}

4.2 ChatSever类

    publicvoid run(){

       System.out.println ("Thread is running");

       try{

       //监听客户端是否发消息过来

       while(true){

       String receive = in.readUTF();

       if(receive == null)

       return;

       //当某客户离开,给其它客户端发消息

       if(receive.equals("leave")){

       for(int i=0;i < threads.size();i++){

       ServerThread st = (ServerThread)threads.elementAt(i);

       st.write("***"+getID()+"leaving...***");

       }

       }else{

       //把某客户端发过来的发送到所有客户端

       for(int i=0;i < threads.size();i++){

       ServerThread st = (ServerThread)threads.elementAt(i);

       st.write("<"+getID()+">: "+receive);}

 

4.3多用户聊天   

  初始化网络,并连接到服务端

    try {

    //获得URL

    URL url = this.getCodeBase();

    InetAddress addr = InetAddress.getByName(url.getHost());

    Socket socket;

    System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol());//5555 为服务器端口

    socket = new Socket(addr,5555);

    //由本套接口获得输入,输出流

    in = new DataInputStream(socket.getInputStream());

    out = new DataOutputStream(socket.getOutputStream());

    }catch (Exception ex) {ex.printStackTrace(); }

 线程开始new Thread(this).start();

 Run方法向服务器发送信息并接收信息

  publicvoid run() {

           try {//监视服务器所发送的信息

           while(true) {

           String receive = in.readUTF();

             if(receive!=null){

              txtDisplay.append(receive + "\n");

                 //将光标移动到最后一个以实现滚动条的自动置底

   txtDisplay.setCaretPosition(txtDisplay.getText().length());

              } }

           }catch (Exception ex) {

     txtDisplay.append("Network problem or Server down");

               txtInput.setVisible(false);}

           }

           publicvoid stop() {

           try {

           out.writeUTF("leave");

           }catch(Exception ex){}}

4.4 流程图

                      

                       图 4—1 网络通信

     用户与服务器间的通信是双向的,用户将信息传递给Server,Server再将信息传递给每个用户。    

      

                       图 4—2 WuZiQi类的方法

     棋盘继承JApplet类,注册监听,实现Init()、Run()、Paint()方法、注册监听。画棋盘,用二维数组模拟棋盘下子情况。对棋盘棋子的获取,判断胜负。与Server连接,监听,获取来自服务器的信息。

五、运行调试与分析讨论

       

                        图 5—1 棋盘

图5—1 棋盘图,当选择好黑白角色后点击开始,便可以下棋;点击重置时重新开始下棋;点击退出时结束游戏,并退出。 该棋盘未实现网络棋盘,只能自己跟自己下棋。还欠缺悔棋步骤,可以用Vector存储已下的棋子的信息,调用repaiant() 然后再画除最后一步的棋盘,实现悔棋操作。由于对Socket 用法还不熟悉,不能将棋盘通信与聊天通信区分开来,也就不能实现联网下棋。

    

图5—2ChatServer

        如果用户登录则监听 listening ......、accept a client使用了Socket,和多线程技术。定义了Vector 存储用户线程,实现ChatServer将信息传递给每个用户,接收每个用户的信息。

图5—3聊天对话框

        用户4、5进入了聊天,对话。当对话框缩小或关闭时ChatServer都会发出用户离开的消息。此对话框可以允许多个用户群聊,但是少了一个窗口显示所有在线用户信息。即要求五,增强功能未实现。不能实现用户注册,添加好友,查看好有信息,对于数据库的使用不太熟悉。  


六、设计体会与小结

经过为期一周的课程设计,感觉自己所学远远不能解决做课设时的需求。在熟悉课本和上网搜索后,才算马马虎虎的完成了任务。

在画棋盘时,调用draw方法对于画图这块的坐标布置,在今后学画其他图画时能够得心应手。获取棋子方法的巧妙,注册鼠标,获取点击位置,除以棋盘间隔,去掉不为整数的一块,再乘以棋盘间隔便获得最临近点的下棋坐标,即所要下棋的位置。用二维数组模拟棋盘,无棋子的置为0,黑子置为1,白子置为2,以便在判断胜负时利于同色棋子的查找。整个棋盘就模拟出来了,很巧妙,不过有更好的方法用向量存储棋子信息,便于悔棋等操作。

实现多用户聊天,老师后面讲的不是很多,做起来有点费力。参考网上资料,明白Socket原理。开始时照着课本上的例子,不能得出想要的效果,而且只运行了一个程序看不到有通信的效果。后面在运行了Server类后,自己尝试着两个Client类,实现了通话,就像腾讯QQ里面一样的效果。里面定义了Vector 线程,实现了多线程用法。

两个板块大体实现,但是后面的要求五,由于数据库的使用不是太熟悉,不能注册用户,添加好友,查找好友,还有悔棋操作未能实现。此程序最大的缺点还在于,不能实现网络两人下五子棋。由于不能将棋盘信息与聊天信息区分,不能告诉对反自己下了哪一步,所以根据自己的水平也就能做到这了,今后加以完善。

感觉这次课设有点失败,平时学的不能灵活的运用,今后得多加练习,多点锻炼的机会,积累跟多的知识。还有算法这块,解决一个问题的关键,培养一个好的类的思想,将问题有条有理的理清。形成一个清晰的思路后,在动手,下笔如有神。


七、参考文献

[1]丁振凡. Java语言实用教程(第2版)[M]. 北京邮电大学出版社. 2008.1

[2]丁振凡. Java语言实用教程实验指导(第2版)[M]. 北京邮电大学出版社. 2008.1

[3]杨树林等. Java语言最新实用案例教程(第2版)[M]. 清华大学出版社. 2010.7

附录

package 五子棋;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

import java.applet.Applet;

import java.awt.Color;

import java.io.*;

import java.net.*;

import javax.swing.*;

public class WuZiQi extends JApplet implements ActionListener

,MouseListener,MouseMotionListener,ItemListener,Runnable{                                         

int color_Qizi=0;//   黑子0   白子1                                                                         

int ChessBody[][]=new int[17][17];//无棋子 0,黑棋 1,白棋 2;                                 

int GameStart=0;                                                                                                        

JButton start,exit,rest;                                                                                                 

JButton check[]=new JButton[3];                                                                                 

String chess[]={"黑方","白方","旁观"};

JTextArea txtDisplay;                                                                                                  

JTextField txtInput;

DataInputStream in;

 DataOutputStream out;                                                                                              

public void init(){

setLayout(null);                                                                                                           start=new JButton("开始");     rest=new JButton("重置");                                                                                           exit=new JButton("退出");    

Panel p1=new Panel();

p1.add(start);  p1.add(rest);

p1.add(exit);

add(p1);   p1.setBounds(130,510,300,50);

Panel p2=new Panel();

for(int i=0;i<chess.length;i++)                                                                                      {check[i]=new JButton(chess[i]);

p2.add(check[i]); }

add(p2);   p2.setBounds(600,50,200,50);

for(int i=0;i<chess.length;i++)

 {check[i].addActionListener(this); }

start.addActionListener(this);

exit.addActionListener(this);

rest.addActionListener(this);

addMouseListener(this);

txtDisplay = new JTextArea(10,50);

txtDisplay.setEditable(false);

txtInput = new JTextField(10);

    Panel chat=new Panel();

    chat.setLayout(new BorderLayout());

chat.add(BorderLayout.CENTER,new JScrollPane(txtDisplay));

chat.add(BorderLayout.SOUTH,txtInput);

    add(chat);chat.setBounds(900, 300, 350, 300);

txtInput.addActionListener(//对输入文本框地方注册事件监听

new ActionListener() {

public void actionPerformed(ActionEvent event) {

String str = txtInput.getText();

txtInput.setText("");                                                                                                    

try {

out.writeUTF(str);

}catch(Exception e) {}}

});

in = null;  out = null;

初始化网络,并连接到服务端

try {//获得URL

URL url = this.getCodeBase;

InetAddress addr = InetAddress.getByName(url.getHost());

Socket socket;                                                                                                            

System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol());                 

//5555 为服务器端口                                                                                                 

socket = new Socket(addr,5555);//由本套接口获得输入,输出流

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

}catch (Exception ex) {ex.printStackTrace();

}                                                                                                                               

new Thread(this).start();//线程开始

}                                                                                                                               

public void actionPerformed(ActionEvent e){

Graphics g=getGraphics();

if(e.getSource()==start){

GameStart();}

if(e.getSource()==rest){                                                                                              

GameReSt();}

if(e.getSource()==exit){

GameEnd();                                                                                                               

if(e.getSource()==check[0])                                                                                             color_Qizi=0;

}                                                                                                                                  public void mousePressed(MouseEvent e){}                                                                                      public void mouseClicked(MouseEvent e){//获取下棋位点                                                              

  int x,y;                                                                                                                      x=e.getX();y=e.getY();    if(x<45||y<45||x>495||y>495)                                                                                          {return;}   if(x%30>15)//获取下棋点的位置                                                                                                           {x+=30;}   if(y%30>15)            {y+=30;}                                                                                                                      x=x/30*30; y=y/30*30;     PlayQizi(x,y);//下棋

  }                                                                                                                              public void mouseEntered(MouseEvent e){}                                                                                     public void mouseExited(MouseEvent e){}                                                                                       public void mouseReleased(MouseEvent e){}                                                                                    public void mouseDragged(MouseEvent e){}                                                                                    public void mouseMoved(MouseEvent e){}                                                                                      public void paint(Graphics g){

QiPan(g);

}                                                                                                                                  public void PlayQizi(int x,int y){                                                                                                                             if (GameStart==0) //判断游戏未开始 { return; }

if (ChessBody[x/30][y/30]!=0) {return;}                                                                           Graphics g=getGraphics();

if (color_Qizi==1)//判断黑子还是白子                                                                             {g.setColor(Color.black);                                                                                                                                          color_Qizi=0;}

else    {g.setColor(Color.white);                                                                                          color_Qizi=1;       

}

g.fillOval(x-12,y-12,24,24);

ChessBody[x/30][y/30]=color_Qizi+1;

///判断输赢//////                                                                                                              g.setColor(Color.magenta);     g.setFont(new Font("fhahf ",Font.BOLD,30));

if(GameWin横(x/30,y/30))

{g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);GameStart=0;                       

}                                                                                                                               

if(GameWin竖(x/30,y/30)){                                                                                        

g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);GameStart=0;                         

}                                                                                                                               

if(GameWin撇(x/30,y/30)){                                                                                        

g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200); GameStart=0;                        

}                                                                                                                               

if(GameWin捺(x/30,y/30)){                                                                                        

g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);                                            

GameStart=0;

  }

 }//////////////获得赢方//////////////////////////                                                                         public String GetQiziColor(int x)

   {  if(x==0  )return "黑方";else return "白方"; }                                                         //////////////判断输赢////////////////////////////////////                                                                                                public boolean GameWin横(int x,int y){                                                                                                                       int x1,y1;int t=1;      x1=x;y1=y;                                                                                                                   for(int i=1;i<5;i++)         {if(x1>16)break;                                                                                                           if(ChessBody[x1+i][y1]==ChessBody[x][y])  t+=1;                                                          else break;     

 }                                                                                                                                for(int i=1;i<5;i++)        

{if(x1<2)break;                                                                                                             if(ChessBody[x1-i][y1]==ChessBody[x][y])t+=1;                                                                                   

else break;                                                                                                                    

  }                                                                                                                              if(t>4)  return true;         else  return   false;                                                                                                       

}                                                                                                                                  public boolean GameWin竖(int x,int y){                                                                                                                      

int x1,y1;int t=1;x1=x;y1=y;

  for(int i=1;i<5;i++)                                                                                                    {if(x1>16)break;      if(ChessBody[x1][y1+i]==ChessBody[x][y])    t+=1;                                                          else break;

  }

   for(int i=1;i<5;i++)                                                                                                  {if(x1<2)break;        if(ChessBody[x1][y1-i]==ChessBody[x][y]) t+=1;                                                             else break;     

  }                                                                                                                              if(t>4)       return true;    else  return false;                                                                                                                      

  }                                                                                                                              public boolean GameWin撇(int x,int y){                                                                                                                      

int x1,y1;int t=1;                                                                                                           x1=x;y1=y;       for(int i=1;i<5;i++)                                                                                                                  {if(x1>16)break;      if(ChessBody[x1+i][y1-i]==ChessBody[x][y])t+=1;                                                           else break;     

 }                                                                                                                                for(int i=1;i<5;i++)         {if(x1<2)break ;                                                                                                            if(ChessBody[x1-i][y1+i]==ChessBody[x][y])  t+=1;                                                                                else break;

  }                                                                                                                              if(t>4)return true;        else  return false;

  }                                                                                                                              public boolean GameWin捺(int x,int y){                                                                                                                      

int x1,y1;int t=1;x1=x;y1=y;                                                                                           

for(int i=1;i<5;i++)                                                                                                        {       if(x1>16)break;    if(ChessBody[x1-i][y1-i]==ChessBody[x][y]) t+=1;                                                             else break;

 }                                                                                                                                for(int i=1;i<5;i++)         {if(x1<2)break;                                                                                                             if(ChessBody[x1+i][y1+i]==ChessBody[x][y])   t+=1;                                                      else break;

 }                                                                                                                                if(t>4) turn true;        else  eturn false;                                                                                                                   

}                                                                                                                                  public void GameStart()//游戏开始                                                                                                                             {GameStart=1;         Game_btn_enable(false);                                                                                                rest.setEnabled(true);    

}                                                                                                                                  public void Game_btn_enable(boolean e){                                                                                         start.setEnabled(e);rest.setEnabled(e);                                                                              for(int i=0;i<check.length;i++)                                                                                                                                    { check[i].setEnabled(e);}

 }                                                                                                                                public void GameStartInit(){//初始化                                                                                                                         GameStart=0;   Game_btn_enable(true);                                                                                                 start.setEnabled(true);      for(int i=0;i<17;i++)                                                                                                      for(int j=0;j<17;j++)       {ChessBody[i][j]=0;}                                                                                                  

}                                                                                                                                  public void GameReSt(){//重置                                                                                                                                repaint();   GameStartInit();

}                                                                                                                                      public void QiPan(Graphics g){//画棋盘                                                                                      

g.setColor(Color.cyan);                                                                                               

int m=45;int n=m+15;

G.fillRect(m,m,450,450);                                                                                             

g.setColor(Color.black);                                                                                              

for(int i=0;i<15;i++)                                                                                                   

g.drawLine(n,n+i*30,n+420,n+i*30);                                                                           

for(int i=0;i<15;i++)                                                                                                 

g.drawLine(n+i*30,n,n+i*30,n+420);                                                                           

g.fillRect(n+3*30-3,n+3*30-3,6,6);                                                                           

g.fillRect(n+3*30-3,n+11*30-3,6,6);                                                                            

g.fillRect(n+11*30-3,n+3*30-3,6,6);                                                                           

g.fillRect(n+11*30-3,n+11*30-3,6,6);                                                                          

g.fillRect(n+7*30-3,n+7*30-3,6,6);                                                                             

    }

     /////////////////////////运行监听方法//////////////////////////

     public void run() {                                                                                             

try {//监视服务器所发送的信息                                                                                 

while(true) {                                                                                                            

String receive = in.readUTF();                                                                                        if(receive!=null){      txtDisplay.append(receive + "\n");                                                                                       //将光标移动到最后一个以实现滚动条的自动置底                                                                                              txtDisplay.setCaretPosition(txtDisplay.getText().length());

      }

 }                                                                                                                             

}catch (Exception ex) {                                                                                                   txtDisplay.append("Network problem or Server down");                                                                                               txtInput.setVisible(false);}

}                                                                                                                               

public void stop()                                                                                                       

try {                                                                                                                          

out.writeUTF("leave");                                                                                                

}catch (Exception ex) {}

    }                                                                                                                        

}

   /*ChatServer类*/

import java.net.*;

import java.io.*;

import java.util.*;

public class ChatServer {

       public static void main(String[] args)throws Exception{

              ServerSocket svSocket =null;

              //Vector threads 为ServerThread集合

              Vector threads = new Vector();

              //开始监听

              System.out.println ("listening...");

              try {

              //创建服务端套接口

              svSocket = new ServerSocket(5555);

              }catch (Exception ex) {

              System.out.println ("Server create ServerSocket failed!");

              return;

              }

              try{

              int nid = 0;

              //监听是否有客户端连接

              while(true){

              Socket socket = svSocket.accept();

              System.out.println ("accept a client");

              //创建一个新的ServerThread

              ServerThread st = new ServerThread(socket,threads);

              //为客户端分配一个ID号

              st.setID(nid++);

              threads.add(st);

              new Thread(st).start();

              //向所有人广播有新客户端连接

              for(int i=0;i < threads.size();i++){

              ServerThread temp = (ServerThread)threads.elementAt(i);

              st.write("<#>Welcome "+ temp.getID()+" to enter the chatroom");

              }

              System.out.println ("Listen again...");

              }

              }catch(Exception ex){

              System.out.println ("server is down");}

              }

              }

              /* 监听线程,监听是否有客户端发消息过来*/

              class ServerThread implements Runnable{

              private Vector threads;

              private Socket socket = null;

              private DataInputStream in = null;

              private DataOutputStream out = null;

              private int nid;

              //构造器

              public ServerThread(Socket socket,Vector threads){

              this.socket = socket;

              this.threads = threads;

              try {

              in = new DataInputStream(socket.getInputStream());

              out = new DataOutputStream(socket.getOutputStream());

              }

              catch (Exception ex) {}

              }

              //实现run方法

              public void run(){

              System.out.println ("Thread is running");

              try{

              //监听客户端是否发消息过来

              while(true){

              String receive = in.readUTF();

              if(receive == null)

              return;

              //当某客户离开,给其它客户端发消息

              if(receive.equals("leave")){

              for(int i=0;i < threads.size();i++){

              ServerThread st = (ServerThread)threads.elementAt(i);

              st.write("***"+getID()+"leaving...***");

              }

              }else{

              //把某客户端发过来的发送到所有客户端

              for(int i=0;i < threads.size();i++){

              ServerThread st = (ServerThread)threads.elementAt(i);

              st.write("<"+getID()+">: "+receive);}}

              }

              }catch(Exception ex){

              //从Vector中删除该线程,表示该线程已经离开聊天室

              threads.removeElement(this);

              //ex.printStackTrace();

              }

              try{

              socket.close();

              }catch(Exception ex){

              ex.printStackTrace();}

              }

              /* 服务端向客户端发送信息*/

              public void write(String msg){

              synchronized(out){

              try{

              out.writeUTF(msg);

              }catch(Exception ex){

              }}

              }

              /* 获得线程ID号*/

              public int getID(){

              return this.nid;

              }

              /** 设置线程ID号*/

              public void setID(int nid){

              this.nid = nid;

              }

}

更多相关推荐:
java 五子棋 课程设计报告

课程设计论文任务书班一课程设计论文题目多用户五子棋游戏二课程设计论文工作自20xx年6月15日起至20xx年6月19日止三课程设计论文地点创新大楼310四课程设计论文内容要求1本课程设计的目的数据类型对面向对象...

五子棋JAVA语言课程设计报告

Java语言程序设计课程设计报告学院信息科学技术学院班级软件技术2班姓名王更新学号1108900505指导教师郭韶升课设时间20xx0317至20xx0326二O一四年三月二十六日目录一设计要求2二设计步骤22...

java五子棋项目报告

河南经贸职业学院信息管理系Java程序设计课程设计报告Java语言程序设计课程设计报告题目设计者班级学号指导教师系部专业信息管理系计算机应用技术20xx年6月25日1河南经贸职业学院信息管理系Java程序设计课...

五子棋JAVA语言课程设计报告

封面Java语言程序设计课程设计报告分院电信分院班级电子商务1班姓名何芳林学号20xx0210460123指导教师吴军良课设时间20xx1220至20xx1231二O一一年十二月二十日10电商1班何芳林Java...

五子棋-Java课程设计

面向对象程序设计课程设计报告实验时间20xx年10月26日实验班级实验报告总份片数1份片实验指导老师设计小组湖南省吉首市吉首大学课程设计报告简单的游戏五子棋小组成员姓名学号组长一实验分工二开发环境实验编译以及测...

java课程设计报告-五子棋

目录第一章软件开发平台游戏设计思路第二章小游戏五子棋的开发过程第一节JAVA基础知识第二节启动程序的分析第三节游戏设计过程第三章总结第四章参考文献第五章附录第一章游戏设计思路第二章第一节java程序基础知识本系...

JAVA语言课程设计报告 五子棋源代码

浙江科技学院经济管理学院JAVA语言课程设计报告选题名称五子棋小游戏学生学号专业班级学生姓名学生成绩指导教师朱军工作时间20xx0627目录1选题简介32需求分析321系统要实现的目标分析322对输入输出数据及...

五子棋游戏 课程设计报告(含源代码可以运行)

五子棋游戏课程设计报告(含源代码可以运行)目录第一章需求分析.11.1总体分析.11.2初始化.11.3主循环控制模块.11.4玩家下子.11.5盘面分析填写棋型表.21.6对方下子.21.7胜负判断.2第二章…

基于java程序的五子棋游戏设计 开题报告

陕西科技大学镐京学院毕业设计论文任务书系专业班级学生题目基于JAVA程序的五子棋游戏设计毕业设计论文从20xx年3月20日起到20xx年6月25日课题的意义及培养目标课题意义随着社会经济的迅速发展人们生活水平有...

java五子棋报告全程(完整版)

下面的源代码分为4个文件1chessClientjava客户端主程序2chessInterfacejava客户端的界面3chessPadjava棋盘的绘制4chessServerjava服务器端可同时容纳50个...

java课程设计报告五子棋

计算机网络技术专业专业代码590102动态网站基础程序设计课程设计班级网站1101班学号20xx274920xx317020xx039420xx483920xx264620xx264720xx361920xx2...

Java课程设计报告

烟台工程职业技术学院系专业级课程设计论文题目Java五子棋游戏设计姓名学号指导教师签名二一零年七月十二日Java五子棋游戏设计xxx摘要五子棋游戏大家都比较熟悉且老少皆宜我个人也很喜欢五子棋游戏易学易操作使用J...

java五子棋课程设计报告(25篇)