2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  目 錄</b></p><p>  一、課程設(shè)計任務(wù)及要求1</p><p><b>  二、需求分析1</b></p><p>  2.1 棋盤板塊1</p><p>  2.2 聊天板塊1</p><p>  2.3 ChatSeve

2、r1</p><p>  2.4 編譯環(huán)境1</p><p>  2.5 參考資料1</p><p><b>  三、設(shè)計思路1</b></p><p>  3.1 板塊的顯示1</p><p>  3.2 注冊監(jiān)聽2</p><p>  3.3 ChatSer

3、ver2</p><p><b>  3.4 下棋2</b></p><p><b>  四、詳細設(shè)計3</b></p><p>  4.1 WuZiQi類3</p><p>  4.2 ChatSever類4</p><p>  4.3多用戶聊天5</p&

4、gt;<p><b>  4.4 流程圖6</b></p><p>  五、運行調(diào)試與分析討論7</p><p>  六、設(shè)計體會與小結(jié)9</p><p><b>  七、參考文獻10</b></p><p>  一、課程設(shè)計任務(wù)及要求</p><p>

5、  1、五子棋游戲室界面:用戶可以選擇對弈桌及角色(執(zhí)黑、執(zhí)白、旁觀);</p><p>  游戲界面:有開始、退出、悔棋、判斷勝負;發(fā)言及顯示區(qū);用戶列表 </p><p><b>  區(qū);棋盤繪制區(qū);</b></p><p>  3、使用Socket來完成服務(wù)端和客戶端的通信;</p><p>  4、

6、使用多線程技術(shù)支持多用戶操作;</p><p>  5、增強功能:支持用戶注冊、添加和刪除好友、戰(zhàn)績顯示、發(fā)送消息、接 </p><p>  受消息、多人聊天等功能;使用數(shù)據(jù)庫保存用戶信息。</p><p><b>  二、需求分析</b></p><p><b>  2.1 棋盤板塊</b>

7、</p><p>  畫一個15×15的棋盤版面,及兩個按鈕組。初始化:開始、重置、 </p><p>  退出;角色選擇:黑方、白方、旁觀。</p><p><b>  2.2 聊天板塊</b></p><p>  聊天信息顯示區(qū),聊天信息輸入?yún)^(qū)。</p><p> 

8、 2.3 ChatSever </p><p>  模擬服務(wù)器:用于橋接不同用戶,實現(xiàn)接收用戶發(fā)出的信息,然后</p><p>  將信息傳遞到每個用戶的聊天窗口。</p><p><b>  2.4 編譯環(huán)境</b></p><p>  Eclipse 實驗室上機 在宿舍編寫</p><p>

9、<b>  2.5 參考資料</b></p><p>  Java 語言使用教程,百度文庫資料(五子棋判斷勝負算法)。</p><p><b>  三、設(shè)計思路</b></p><p><b>  3.1 板塊的顯示</b></p><p>  畫棋盤 調(diào)用public

10、void paint(Graphics g){QiPan(g);}方法</p><p>  畫一個15×15的棋盤面版。</p><p>  初始化 定義兩個Panel P1、P2,在初始化板塊將JButton 開始、</p><p>  重置,退出加入到P1,將黑方、白方、旁觀加入到P2。</p><p>  聊天板塊 在初

11、始化時定義一個JTextArea 和一個JTextField 實現(xiàn)聊</p><p><b>  天功能</b></p><p>  3.2 注冊監(jiān)聽 </p><p>  對角色選擇按鈕注冊ActionListener監(jiān)聽,設(shè)置用戶的角色。定義黑子int類型 0,白子1。</p><p>  對按鈕開始、重置注冊A

12、ctionListener監(jiān)聽,如果點擊開始,用戶進 入下棋狀態(tài),有一方贏了,棋盤上則不能再點擊棋子。點擊重置,則開始新的一輪。</p><p>  對鼠標注冊mouseClicked監(jiān)聽,鼠標點擊棋盤時獲取下棋的位置。</p><p>  對JTextField注冊ActionListener,用戶輸入聊天信息后,通過Server傳遞給其他用戶,在對話框JTextArea內(nèi)顯示。<

13、/p><p>  3.3 ChatServer</p><p>  class ServerThread implements Runnable{ }類監(jiān)聽線程,監(jiān)聽是否有客戶端法過信息來。</p><p><b>  屬性: </b></p><p>  Vector threads 向量存儲線程</p>

14、<p>  Socket socket 服務(wù)端口</p><p>  DataInputStream in 輸入流</p><p>  DataOutputStream out 輸出流</p><p>  int nid 用戶ID</p><p><b>  方法:</b></p><p&

15、gt;  構(gòu)造器public ServerThread(Socket socket,Vector threads)</p><p>  實現(xiàn)信息的輸入、輸出</p><p>  實現(xiàn)public void run()監(jiān)聽客戶端是否發(fā)信息過來,當客戶離開時向 </p><p>  其他客戶發(fā)信息,把客戶端的信息發(fā)給其他客戶。

16、 </p><p>  服務(wù)器向客戶端發(fā)信息public void write(String msg)</p><p>  獲取線程IDpublic int getID()</p><p>  設(shè)置線程IDpublic void setID(int nid)</p><p>

17、;  在Chatserver類內(nèi)調(diào)用ServerThread 實現(xiàn)對所有來訪客戶監(jiān)聽,為來訪者設(shè)置ID,若有離開用戶,則在聊天板塊廣播。</p><p><b>  3.4 下棋</b></p><p>  用二維數(shù)組模擬棋盤chessbody[17][17],黑方下棋,則黑方所下棋位置的值等于旗子的顏色加一,白方類似。最后1代表下了黑棋,2表示下了白棋,0表示沒下棋

18、。</p><p>  從橫向、縱向、斜方向判斷勝負。下完一步判斷一次,有一個方向上同色棋子數(shù)超過5,則勝負已判斷。</p><p><b>  四、詳細設(shè)計</b></p><p>  4.1 WuZiQi類</p><p>  屬性: int color_Qizi=0; 黑子0 白子1</p>

19、<p>  int ChessBody[][]=new int[17][17];</p><p>  無棋子 0,黑棋 1,白棋 2;</p><p>  int GameStart=0;</p><p>  JButton start,exit,rest;</p><p>  JButton check[]=new JButt

20、on[3];</p><p>  String chess[]={"黑方","白方","旁觀"};</p><p><b>  方法: </b></p><p><b>  獲取下棋位點</b></p><p>  public voi

21、d mouseClicked(MouseEvent e){</p><p>  //Graphics g=getGraphics();</p><p><b>  int x,y;</b></p><p>  x=e.getX();y=e.getY();//鼠標點擊位置</p><p>  if(x<45||y&l

22、t;45||x>495||y>495)</p><p>  {return;}//在棋盤之外則不下</p><p>  if(x%30>15)//獲取下棋點的位置</p><p><b>  {x+=30;}</b></p><p>  if(y%30>15)</p><p&g

23、t;<b>  {y+=30;}</b></p><p>  x=x/30*30; //x、y為棋子中心位置</p><p>  y=y/30*30;</p><p>  PlayQizi(x,y);//下棋 }</p><p>  下棋點擊后天上棋子,每一步完了后判斷勝負,從四個方向上判斷</p><

24、;p>  勝負,并在棋盤中間顯示哪方贏了!</p><p>  public void PlayQizi(int x,int y){</p><p>  if (GameStart==0) //判斷游戲未開始 </p><p>  { return; } </p><p>  if (ChessBody[x/30][y/30]!=0)

25、</p><p><b>  {return;}</b></p><p>  Graphics g=getGraphics(); </p><p>  if (color_Qizi==1)//判斷黑子還是白子 </p><p>  {g.setColor(Color.black); </p><p&g

26、t;  color_Qizi=0; </p><p><b>  } </b></p><p>  else {g.setColor(Color.white); </p><p>  color_Qizi=1; </p><p><b>  } </b></p><p>

27、;  g.fillOval(x-12,y-12,24,24); </p><p>  ChessBody[x/30][y/30]=color_Qizi+1; </p><p>  /////判斷輸贏//////////</p><p>  g.setColor(Color.magenta);</p><p>  g.setFont(new F

28、ont("fhahf ",Font.BOLD,30));</p><p>  if(GameWin橫(x/30,y/30)){</p><p>  g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);</p><p>  GameStart=0;</p>&l

29、t;p><b>  }</b></p><p>  if(GameWin豎(x/30,y/30)){</p><p>  g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);</p><p>  GameStart=0;</p><p>&l

30、t;b>  }</b></p><p>  if(GameWin撇(x/30,y/30)){</p><p>  g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);</p><p>  GameStart=0;}</p><p>  if(GameW

31、in捺(x/30,y/30)){</p><p>  g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);</p><p>  GameStart=0;}}</p><p>  4.2 ChatSever類</p><p>  public void run(){<

32、;/p><p>  System.out.println ("Thread is running");</p><p><b>  try{</b></p><p>  //監(jiān)聽客戶端是否發(fā)消息過來</p><p>  while(true){</p><p>  String r

33、eceive = in.readUTF();</p><p>  if(receive == null)</p><p><b>  return;</b></p><p>  //當某客戶離開,給其它客戶端發(fā)消息</p><p>  if(receive.equals("leave")){</

34、p><p>  for(int i=0;i < threads.size();i++){</p><p>  ServerThread st = (ServerThread)threads.elementAt(i);</p><p>  st.write("***"+getID()+"leaving...***");<

35、/p><p><b>  }</b></p><p><b>  }else{</b></p><p>  //把某客戶端發(fā)過來的發(fā)送到所有客戶端</p><p>  for(int i=0;i < threads.size();i++){</p><p>  Server

36、Thread st = (ServerThread)threads.elementAt(i);</p><p>  st.write("<"+getID()+">: "+receive);}</p><p>  4.3多用戶聊天 </p><p>  初始化網(wǎng)絡(luò),并連接到服務(wù)端</p><

37、p><b>  try {</b></p><p><b>  //獲得URL</b></p><p>  URL url = this.getCodeBase();</p><p>  InetAddress addr = InetAddress.getByName(url.getHost());</p>

38、;<p>  Socket socket;</p><p>  System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol());//5555 為服務(wù)器端口</p><p>  socket = new Socket(addr,5

39、555);</p><p>  //由本套接口獲得輸入,輸出流</p><p>  in = new DataInputStream(socket.getInputStream());</p><p>  out = new DataOutputStream(socket.getOutputStream());</p><p>  }catc

40、h (Exception ex) {ex.printStackTrace(); }</p><p>  線程開始new Thread(this).start();</p><p>  Run方法向服務(wù)器發(fā)送信息并接收信息</p><p>  public void run() {</p><p>  try {//監(jiān)視服務(wù)器所發(fā)送的信息<

41、;/p><p>  while(true) {</p><p>  String receive = in.readUTF();</p><p>  if(receive!=null){</p><p>  txtDisplay.append(receive + "\n");</p><p>  //將

42、光標移動到最后一個以實現(xiàn)滾動條的自動置底</p><p>  txtDisplay.setCaretPosition(txtDisplay.getText().length());</p><p><b>  } }</b></p><p>  }catch (Exception ex) {</p><p>  txtD

43、isplay.append("Network problem or Server down");</p><p>  txtInput.setVisible(false);}</p><p><b>  }</b></p><p>  public void stop() {</p><p><

44、b>  try {</b></p><p>  out.writeUTF("leave");</p><p>  }catch(Exception ex){}}</p><p><b>  4.4 流程圖</b></p><p>  圖 4—1 網(wǎng)絡(luò)通信</p><

45、;p>  用戶與服務(wù)器間的通信是雙向的,用戶將信息傳遞給Server,Server再將信息傳遞給每個用戶。 </p><p>  圖 4—2 WuZiQi類的方法</p><p>  棋盤繼承JApplet類,注冊監(jiān)聽,實現(xiàn)Init()、Run()、Paint()方法、注冊監(jiān)聽。畫棋盤,用二維數(shù)組模擬棋盤下子情況。對棋盤棋子的獲取,判斷勝負。與Server連接,監(jiān)聽,獲取來自

46、服務(wù)器的信息。</p><p>  五、運行調(diào)試與分析討論</p><p><b>  圖 5—1 棋盤</b></p><p>  圖5—1 棋盤圖,當選擇好黑白角色后點擊開始,便可以下棋;點擊重置時重新開始下棋;點擊退出時結(jié)束游戲,并退出。 該棋盤未實現(xiàn)網(wǎng)絡(luò)棋盤,只能自己跟自己下棋。還欠缺悔棋步驟,可以用Vector存儲已下的棋子的信息,調(diào)

47、用repaiant() 然后再畫除最后一步的棋盤,實現(xiàn)悔棋操作。由于對Socket 用法還不熟悉,不能將棋盤通信與聊天通信區(qū)分開來,也就不能實現(xiàn)聯(lián)網(wǎng)下棋。</p><p>  圖5—2ChatServer</p><p>  如果用戶登錄則監(jiān)聽 listening ......、accept a client使用了Socket,和多線程技術(shù)。定義了Vector 存儲用戶線程,實現(xiàn)ChatS

48、erver將信息傳遞給每個用戶,接收每個用戶的信息。</p><p><b>  圖5—3聊天對話框</b></p><p>  用戶4、5進入了聊天,對話。當對話框縮小或關(guān)閉時ChatServer都會發(fā)出用戶離開的消息。此對話框可以允許多個用戶群聊,但是少了一個窗口顯示所有在線用戶信息。即要求五,增強功能未實現(xiàn)。不能實現(xiàn)用戶注冊,添加好友,查看好有信息,對于數(shù)據(jù)庫的

49、使用不太熟悉。 </p><p><b>  六、設(shè)計體會與小結(jié)</b></p><p>  經(jīng)過為期一周的課程設(shè)計,感覺自己所學遠遠不能解決做課設(shè)時的需求。在熟悉課本和上網(wǎng)搜索后,才算馬馬虎虎的完成了任務(wù)。</p><p>  在畫棋盤時,調(diào)用draw方法對于畫圖這塊的坐標布置,在今后學畫其他圖畫時能夠得心應(yīng)手。獲取棋子方法的巧妙,注冊鼠

50、標,獲取點擊位置,除以棋盤間隔,去掉不為整數(shù)的一塊,再乘以棋盤間隔便獲得最臨近點的下棋坐標,即所要下棋的位置。用二維數(shù)組模擬棋盤,無棋子的置為0,黑子置為1,白子置為2,以便在判斷勝負時利于同色棋子的查找。整個棋盤就模擬出來了,很巧妙,不過有更好的方法用向量存儲棋子信息,便于悔棋等操作。</p><p>  實現(xiàn)多用戶聊天,老師后面講的不是很多,做起來有點費力。參考網(wǎng)上資料,明白Socket原理。開始時照著課本上

51、的例子,不能得出想要的效果,而且只運行了一個程序看不到有通信的效果。后面在運行了Server類后,自己嘗試著兩個Client類,實現(xiàn)了通話,就像騰訊QQ里面一樣的效果。里面定義了Vector 線程,實現(xiàn)了多線程用法。</p><p>  兩個板塊大體實現(xiàn),但是后面的要求五,由于數(shù)據(jù)庫的使用不是太熟悉,不能注冊用戶,添加好友,查找好友,還有悔棋操作未能實現(xiàn)。此程序最大的缺點還在于,不能實現(xiàn)網(wǎng)絡(luò)兩人下五子棋。由于不能

52、將棋盤信息與聊天信息區(qū)分,不能告訴對反自己下了哪一步,所以根據(jù)自己的水平也就能做到這了,今后加以完善。</p><p>  感覺這次課設(shè)有點失敗,平時學的不能靈活的運用,今后得多加練習,多點鍛煉的機會,積累跟多的知識。還有算法這塊,解決一個問題的關(guān)鍵,培養(yǎng)一個好的類的思想,將問題有條有理的理清。形成一個清晰的思路后,在動手,下筆如有神。</p><p><b>  七、參考文獻&

53、lt;/b></p><p>  [1]丁振凡. Java語言實用教程(第2版)[M]. 北京郵電大學出版社. 2008.1 </p><p>  [2]丁振凡. Java語言實用教程實驗指導(第2版)[M]. 北京郵電大學出版社. 2008.1</p><p>  [3]楊樹林等. Java語言最新實用案例教程(第2版)[M]. 清華大學出版社. 2010.

54、7</p><p><b>  附錄</b></p><p>  package 五子棋;</p><p>  import java.applet.*; </p><p>  import java.awt.*; </p><p>  import java.awt.event.*; </

55、p><p>  import java.applet.Applet; </p><p>  import java.awt.Color; </p><p>  import java.io.*;</p><p>  import java.net.*;</p><p>  import javax.swing.*;<

56、/p><p>  public class WuZiQi extends JApplet implements ActionListener</p><p>  ,MouseListener,MouseMotionListener,ItemListener,Runnable{</p><p>  int color_Qizi=0;// 黑子0 白子1<

57、/p><p>  int ChessBody[][]=new int[17][17];//無棋子 0,黑棋 1,白棋 2;</p><p>  int GameStart=0;</p><p>  JButton start,exit,rest;</p><p>  JButton check[]=new JButton[3];</

58、p><p>  String chess[]={"黑方","白方","旁觀"};</p><p>  JTextArea txtDisplay;</p><p>  JTextField txtInput;</p><p>  DataInputStream in;</p>

59、<p>  DataOutputStream out;</p><p>  public void init(){</p><p>  setLayout(null); start=new JButton("開始"); rest=new JButton("重置"); exit=new JButton("退出"

60、); </p><p>  Panel p1=new Panel();</p><p>  p1.add(start); p1.add(rest);</p><p>  p1.add(exit);</p><p>  add(p1); p1.setBounds(130,510,300,50);</p><p>

61、  Panel p2=new Panel();</p><p>  for(int i=0;i<chess.length;i++) {check[i]=new JButton(chess[i]);</p><p>  p2.add(check[i]); }</p><p>  add(p2); p2.setBounds(600,50,200,50);&l

62、t;/p><p>  for(int i=0;i<chess.length;i++)</p><p>  {check[i].addActionListener(this); }</p><p>  start.addActionListener(this);</p><p>  exit.addActionListener(this);&

63、lt;/p><p>  rest.addActionListener(this);</p><p>  addMouseListener(this);</p><p>  txtDisplay = new JTextArea(10,50);</p><p>  txtDisplay.setEditable(false);</p>&

64、lt;p>  txtInput = new JTextField(10);</p><p>  Panel chat=new Panel();</p><p>  chat.setLayout(new BorderLayout());</p><p>  chat.add(BorderLayout.CENTER,new JScrollPane(txtDispl

65、ay));</p><p>  chat.add(BorderLayout.SOUTH,txtInput);</p><p>  add(chat);chat.setBounds(900, 300, 350, 300);</p><p>  txtInput.addActionListener(//對輸入文本框地方注冊事件監(jiān)聽</p><p>

66、;  new ActionListener() {</p><p>  public void actionPerformed(ActionEvent event) {</p><p>  String str = txtInput.getText();</p><p>  txtInput.setText("");</p>&l

67、t;p><b>  try {</b></p><p>  out.writeUTF(str);</p><p>  }catch(Exception e) {}}</p><p><b>  });</b></p><p>  in = null; out = null;</p>

68、;<p>  初始化網(wǎng)絡(luò),并連接到服務(wù)端</p><p>  try {//獲得URL</p><p>  URL url = this.getCodeBase;</p><p>  InetAddress addr = InetAddress.getByName(url.getHost());</p><p>  Socket

69、 socket;</p><p>  System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol());</p><p>  //5555 為服務(wù)器端口</p><p>  socket = new Socket(

70、addr,5555);//由本套接口獲得輸入,輸出流</p><p>  in = new DataInputStream(socket.getInputStream());</p><p>  out = new DataOutputStream(socket.getOutputStream());</p><p>  }catch (Exception ex)

71、{ex.printStackTrace(); </p><p><b>  }</b></p><p>  new Thread(this).start();//線程開始</p><p><b>  }</b></p><p>  public void actionPerformed(Acti

72、onEvent e){</p><p>  Graphics g=getGraphics();</p><p>  if(e.getSource()==start){</p><p>  GameStart();}</p><p>  if(e.getSource()==rest){</p><p>  GameRe

73、St();}</p><p>  if(e.getSource()==exit){</p><p>  GameEnd();</p><p>  if(e.getSource()==check[0]) color_Qizi=0;</p><p>  } public void mousePressed(MouseEvent e){

74、} 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/3

75、0*30; y=y/30*30; PlayQizi(x,y);//下棋</p><p>  } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseDragge

76、d(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void paint(Graphics g){</p><p><b>  QiPan(g);</b></p><p>  } public void PlayQizi(int x,int y){ if (GameStart

77、==0) //判斷游戲未開始 { return; } </p><p>  if (ChessBody[x/30][y/30]!=0) {return;} Graphics g=getGraphics(); </p><p>  if (color_Qizi==1)//判斷黑子還是白子 {g.setColor(Color.black); color_Qi

78、zi=0;} </p><p>  else {g.setColor(Color.white); color_Qizi=1; </p><p><b>  } </b></p><p>  g.fillOval(x-12,y-12,24,24); </p><p>  Chess

79、Body[x/30][y/30]=color_Qizi+1; </p><p>  ///判斷輸贏////// g.setColor(Color.magenta); g.setFont(new Font("fhahf ",Font.BOLD,30));</p><p>  if(GameWin橫(x/30,y/30))</p><p>

80、;  {g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);GameStart=0;</p><p><b>  }</b></p><p>  if(GameWin豎(x/30,y/30)){</p><p>  g.drawString(GetQiziColor

81、(color_Qizi)+"贏了!",200,200);GameStart=0;</p><p><b>  }</b></p><p>  if(GameWin撇(x/30,y/30)){</p><p>  g.drawString(GetQiziColor(color_Qizi)+"贏了!",

82、200,200); GameStart=0;</p><p><b>  }</b></p><p>  f(GameWin捺(x/30,y/30)){</p><p>  g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);</p><p&g

83、t;  GameStart=0;</p><p><b>  }</b></p><p>  }//////////////獲得贏方////////////////////////// public String GetQiziColor(int x) </p><p>  { if(x==0 )return "黑方&qu

84、ot;;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

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

86、lt;p>  else break; </p><p>  } if(t>4) return true; else return false; </p><p>  } public boolean GameWin豎(int x,int y){ </p><p>  int x1,y1;int t=1;x1=x;y1

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

88、i<5;i++) {if(x1<2)break; if(ChessBody[x1][y1-i]==ChessBody[x][y]) t+=1; else break; </p><p>  } if(t>4) return true; else return false; </p><p>  } public boolea

89、n GameWin撇(int x,int y){ </p><p>  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; </p><p> 

90、 } for(int i=1;i<5;i++) {if(x1<2)break ; if(ChessBody[x1-i][y1+i]==ChessBody[x][y]) t+=1; else break;</p><p>  } if(t>4)return true; else return false;</p><p>  } pub

91、lic boolean GameWin捺(int x,int y){ </p><p>  int x1,y1;int t=1;x1=x;y1=y; </p><p>  for(int i=1;i<5;i++) { if(x1>16)break; if(ChessBody[x1-i][y1-i]==ChessBody[x][y]) t+=1;

92、 else break;</p><p>  } for(int i=1;i<5;i++) {if(x1<2)break; if(ChessBody[x1+i][y1+i]==ChessBody[x][y]) t+=1; else break;</p><p>  } if(t>4) turn true; else eturn fa

93、lse; </p><p>  } public void GameStart()//游戲開始 {GameStart=1; Game_btn_enable(false); rest.setEnabled(true);</p><p>  } public void Game_btn_enable(boolean e){ start.setEnabled(e);

94、rest.setEnabled(e); for(int i=0;i<check.length;i++) { check[i].setEnabled(e);}</p><p>  } public void GameStartInit(){//初始化 GameStart=0; Game_btn_enable(true); start.setEnabled(true); for(in

95、t i=0;i<17;i++) for(int j=0;j<17;j++) {ChessBody[i][j]=0;}</p><p>  } public void GameReSt(){//重置 repaint(); GameStartInit();</p><p>  } public void QiPan(Graphics g){//畫棋

96、盤 </p><p>  g.setColor(Color.cyan); </p><p>  int m=45;int n=m+15;</p><p>  G.fillRect(m,m,450,450);</p><p>  g.setColor(Color.black);</p><p>  for(i

97、nt i=0;i<15;i++)</p><p>  g.drawLine(n,n+i*30,n+420,n+i*30);</p><p>  for(int i=0;i<15;i++) </p><p>  g.drawLine(n+i*30,n,n+i*30,n+420);</p><p>  g.fillRect(

98、n+3*30-3,n+3*30-3,6,6); </p><p>  g.fillRect(n+3*30-3,n+11*30-3,6,6); </p><p>  g.fillRect(n+11*30-3,n+3*30-3,6,6); </p><p>  g.fillRect(n+11*30-3,n+11*30-3,6,6); </p>

99、<p>  g.fillRect(n+7*30-3,n+7*30-3,6,6); </p><p><b>  }</b></p><p>  /////////////////////////運行監(jiān)聽方法//////////////////////////</p><p>  public void run() {</

100、p><p>  try {//監(jiān)視服務(wù)器所發(fā)送的信息</p><p>  while(true) { </p><p>  String receive = in.readUTF(); if(receive!=null){ txtDisplay.append(receive + "\n"); //將光標移動到最后一個以實

101、現(xiàn)滾動條的自動置底 txtDisplay.setCaretPosition(txtDisplay.getText().length());</p><p><b>  }</b></p><p><b>  }</b></p><p>  }catch (Exception ex) { txtDisplay.

102、append("Network problem or Server down"); txtInput.setVisible(false);}</p><p><b>  }</b></p><p>  public void stop() </p><p><b>  try {</b>

103、</p><p>  out.writeUTF("leave");</p><p>  }catch (Exception ex) {}</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*ChatS

104、erver類*/</p><p>  import java.net.*;</p><p>  import java.io.*;</p><p>  import java.util.*;</p><p>  public class ChatServer {</p><p>  public static void

105、 main(String[] args)throws Exception{</p><p>  ServerSocket svSocket =null;</p><p>  //Vector threads 為ServerThread集合</p><p>  Vector threads = new Vector();</p><p><

106、;b>  //開始監(jiān)聽</b></p><p>  System.out.println ("listening...");</p><p><b>  try {</b></p><p>  //創(chuàng)建服務(wù)端套接口</p><p>  svSocket = new ServerSoc

107、ket(5555);</p><p>  }catch (Exception ex) {</p><p>  System.out.println ("Server create ServerSocket failed!");</p><p><b>  return;</b></p><p><

108、;b>  }</b></p><p><b>  try{</b></p><p>  int nid = 0;</p><p>  //監(jiān)聽是否有客戶端連接</p><p>  while(true){</p><p>  Socket socket = svSocket.ac

109、cept();</p><p>  System.out.println ("accept a client");</p><p>  //創(chuàng)建一個新的ServerThread</p><p>  ServerThread st = new ServerThread(socket,threads);</p><p>  /

110、/為客戶端分配一個ID號</p><p>  st.setID(nid++);</p><p>  threads.add(st);</p><p>  new Thread(st).start();</p><p>  //向所有人廣播有新客戶端連接</p><p>  for(int i=0;i < thre

111、ads.size();i++){</p><p>  ServerThread temp = (ServerThread)threads.elementAt(i);</p><p>  st.write("<#>Welcome "+ temp.getID()+" to enter the chatroom");</p>&l

112、t;p><b>  }</b></p><p>  System.out.println ("Listen again...");</p><p><b>  }</b></p><p>  }catch(Exception ex){</p><p>  System.ou

113、t.println ("server is down");}</p><p><b>  }</b></p><p><b>  }</b></p><p>  /* 監(jiān)聽線程,監(jiān)聽是否有客戶端發(fā)消息過來*/</p><p>  class ServerThread implem

114、ents Runnable{</p><p>  private Vector threads;</p><p>  private Socket socket = null;</p><p>  private DataInputStream in = null;</p><p>  private DataOutputStream out

115、 = null;</p><p>  private int nid;</p><p><b>  //構(gòu)造器</b></p><p>  public ServerThread(Socket socket,Vector threads){</p><p>  this.socket = socket;</p>

116、;<p>  this.threads = threads;</p><p><b>  try {</b></p><p>  in = new DataInputStream(socket.getInputStream());</p><p>  out = new DataOutputStream(socket.getOut

117、putStream());</p><p><b>  }</b></p><p>  catch (Exception ex) {}</p><p><b>  }</b></p><p><b>  //實現(xiàn)run方法</b></p><p>  p

118、ublic void run(){</p><p>  System.out.println ("Thread is running");</p><p><b>  try{</b></p><p>  //監(jiān)聽客戶端是否發(fā)消息過來</p><p>  while(true){</p>

119、<p>  String receive = in.readUTF();</p><p>  if(receive == null)</p><p><b>  return;</b></p><p>  //當某客戶離開,給其它客戶端發(fā)消息</p><p>  if(receive.equals("

120、;leave")){</p><p>  for(int i=0;i < threads.size();i++){</p><p>  ServerThread st = (ServerThread)threads.elementAt(i);</p><p>  st.write("***"+getID()+"leavi

121、ng...***");</p><p><b>  }</b></p><p><b>  }else{</b></p><p>  //把某客戶端發(fā)過來的發(fā)送到所有客戶端</p><p>  for(int i=0;i < threads.size();i++){</p>

122、;<p>  ServerThread st = (ServerThread)threads.elementAt(i);</p><p>  st.write("<"+getID()+">: "+receive);}}</p><p><b>  }</b></p><p>  

123、}catch(Exception ex){</p><p>  //從Vector中刪除該線程,表示該線程已經(jīng)離開聊天室</p><p>  threads.removeElement(this);</p><p>  //ex.printStackTrace();</p><p><b>  }</b></p&g

124、t;<p><b>  try{</b></p><p>  socket.close();</p><p>  }catch(Exception ex){</p><p>  ex.printStackTrace();}</p><p><b>  }</b></p>

125、<p>  /* 服務(wù)端向客戶端發(fā)送信息*/</p><p>  public void write(String msg){</p><p>  synchronized(out){</p><p><b>  try{</b></p><p>  out.writeUTF(msg);</p>

126、<p>  }catch(Exception ex){</p><p><b>  }}</b></p><p><b>  }</b></p><p>  /* 獲得線程ID號*/</p><p>  public int getID(){</p><p>  r

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論