版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 課程設(shè)計(jì)(論文)任務(wù)書</p><p> 軟 件 學(xué) 院 學(xué) 院 軟件+電子商務(wù) 專 業(yè) 二 班 </p><p> 一、課程設(shè)計(jì)(論文)題目 java 課程設(shè)計(jì)《五子棋帶聊天系統(tǒng)》 </p><p> 二、課程設(shè)計(jì)(論文)工作自 2010 年
2、 12 月 20 日起至 2010 年 12 月 24 日止。</p><p> 三、課程設(shè)計(jì)(論文) 地點(diǎn): 軟 件 學(xué) 院 實(shí) 訓(xùn) 中 心 </p><p> 四、課程設(shè)計(jì)(論文)內(nèi)容要求:</p><p> 1.本課程設(shè)計(jì)的目的</p><p> ?。?)掌握J(rèn)ava
3、語言的程序設(shè)計(jì)方法; </p><p> ?。?)理論聯(lián)系實(shí)際,進(jìn)一步提高學(xué)生的軟件開發(fā)技術(shù);</p><p> ?。?)培養(yǎng)學(xué)生分析、解決問題的能力;</p><p> ?。?)提高學(xué)生實(shí)踐論文撰寫能力。</p><p> 2.課程設(shè)計(jì)的任務(wù)及要求</p><p><b> 1)課程設(shè)計(jì)任務(wù):</
4、b></p><p> 實(shí)現(xiàn)一個簡單的多用戶五子棋的游戲程序,包括如下兩個界面</p><p> 設(shè)計(jì)要求:1、五子棋游戲室界面:用戶可以選擇對弈桌及角色(執(zhí)黑、執(zhí)</p><p><b> 白、旁觀);</b></p><p> 2、游戲界面:有開始、退出、悔棋、判斷勝負(fù);發(fā)言及顯示區(qū);用戶列表區(qū);棋盤繪
5、制區(qū);</p><p> 3、使用Socket來完成服務(wù)端和客戶端的通信;</p><p> 4、使用多線程技術(shù)支持多用戶操作;</p><p> 5、增強(qiáng)功能:支持用戶注冊、添加和刪除好友、戰(zhàn)績顯示、發(fā)送消息、接受消息、多人聊天等功能;使用數(shù)據(jù)庫保存用戶信息。</p><p><b> 2)創(chuàng)新要求:</b>&
6、lt;/p><p> 以上任務(wù)還未完善,悔棋、用戶列表區(qū)及增強(qiáng)功能板塊未完善。今后,參考資料書,實(shí)現(xiàn)五子棋網(wǎng)絡(luò)對戰(zhàn)及數(shù)據(jù)庫的利用。</p><p> 3)課程設(shè)計(jì)論文編寫要求</p><p> ?。?)課程設(shè)計(jì)任務(wù)及要求</p><p> (2)設(shè)計(jì)思路--工作原理、功能規(guī)劃</p><p> (3)詳細(xì)設(shè)計(jì)---
7、數(shù)據(jù)分析、算法思路、類設(shè)計(jì)、功能實(shí)現(xiàn)(含程序流程圖、主要代</p><p> 碼及注釋)、界面等。</p><p> ?。?)運(yùn)行調(diào)試與分析討論---給出運(yùn)行屏幕截圖,分析運(yùn)行結(jié)果,有何改進(jìn)想法等。</p><p> (5)設(shè)計(jì)體會與小結(jié)---設(shè)計(jì)遇到的問題及解決辦法,通過設(shè)計(jì)學(xué)到了哪些新知識,</p><p> 鞏固了哪些知識,有哪些
8、提高。</p><p> ?。?)參考文獻(xiàn)(必須按標(biāo)準(zhǔn)格式列出,可參考教材后面的參考文獻(xiàn)格式)</p><p> ?。?)報告按規(guī)定排版打印,要求裝訂平整,否則要求返工;</p><p> ?。?)課設(shè)報告的裝訂順序如下:封面---任務(wù)書---中文摘要---目錄----正文---附錄</p><p><b> (代碼及相關(guān)圖片)&
9、lt;/b></p><p> ?。?)嚴(yán)禁抄襲,如有發(fā)現(xiàn),按不及格處理。</p><p> 4)課程設(shè)計(jì)評分標(biāo)準(zhǔn): </p><p> (1)學(xué)習(xí)態(tài)度:10分;</p><p> (2)系統(tǒng)設(shè)計(jì):20分;</p><p> (3)編程調(diào)試:20分;</p><p> (4)回答
10、問題:20分;</p><p> (5)論文撰寫:30分。</p><p><b> 5)參考文獻(xiàn):</b></p><p> ?。?)丁振凡. Java語言實(shí)用教程(第2版)[M]. 北京郵電大學(xué)出版社. 2008.1 </p><p> (2)丁振凡. Java語言實(shí)用教程實(shí)驗(yàn)指導(dǎo)(第2版)[M]. 北京郵電大
11、學(xué)出版社. 2008.1</p><p> ?。?)楊樹林等. Java語言最新實(shí)用案例教程(第2版)[M]. 清華大學(xué)出版社. 2010.7</p><p> 6)課程設(shè)計(jì)進(jìn)度安排</p><p> 1.準(zhǔn)備階段(4學(xué)時):選擇設(shè)計(jì)題目、了解設(shè)計(jì)目的要求、查閱相關(guān)資料</p><p> 2.程序模塊設(shè)計(jì)分析階段(4學(xué)時):程序總體設(shè)計(jì)
12、、詳細(xì)設(shè)計(jì)</p><p> 3.代碼編寫調(diào)試階段(8學(xué)時):程序模塊代碼編寫、調(diào)試、測試</p><p> 4.撰寫論文階段(4學(xué)時):總結(jié)課程設(shè)計(jì)任務(wù)和設(shè)計(jì)內(nèi)容,撰寫課程設(shè)計(jì)論文</p><p> 學(xué)生簽名: </p><p> 2010 年 12 月 20 日</p><
13、p> 課程設(shè)計(jì)(論文)評審意見</p><p> ?。?)學(xué)習(xí)態(tài)度(10分):優(yōu)( )、良(?。⒅校ā。⒁话悖ā。⒉睿ā。?; </p><p> (2)系統(tǒng)設(shè)計(jì)(20分):優(yōu)( )、良(?。⒅校ā。⒁话悖ā。⒉睿ā。?</p><p> ?。?)編程調(diào)試(20分):優(yōu)( )、良(?。⒅校ā。⒁话悖ā。⒉睿ā。?;</p>
14、<p> (4)回答問題(20分):優(yōu)(?。?、良(?。?、中(?。?、一般( )、差( );</p><p> ?。?)論文撰寫(30分):優(yōu)( )、良( )、中( )、一般(?。⒉睿ā。?; </p><p> 評閱人: 職稱: 講師 </p><p> 2010 年 12 月 25 日</p>
15、<p><b> 中文摘要</b></p><p> 五子棋源于中國。我的這個棋盤是15×15棋盤,橫行、豎行都有15個交點(diǎn),在交點(diǎn)處黑白棋子對弈。在橫,豎,斜四個方向若有一方連續(xù)超過5個則該方勝利。完成棋盤面板畫棋盤,對鼠標(biāo)注冊監(jiān)聽撲捉下棋位,畫上棋子。根據(jù)下棋位點(diǎn),將棋子布局模擬成二位數(shù)組,對數(shù)組進(jìn)行遍歷,判斷勝負(fù)。棋盤還附加了聊天功能,開啟次程序后,便在Cha
16、tServer內(nèi)申請賬號,實(shí)現(xiàn)與其他戶的群聊,采用了多線程技術(shù)和Socket實(shí)現(xiàn)通信。</p><p><b> 目 錄</b></p><p> 一、課程設(shè)計(jì)任務(wù)及要求1</p><p><b> 二、需求分析1</b></p><p> 2.1 棋盤板塊1</p>&
17、lt;p> 2.2 聊天板塊1</p><p> 2.3 ChatSever1</p><p> 2.4 編譯環(huán)境1</p><p> 2.5 參考資料1</p><p><b> 三、設(shè)計(jì)思路1</b></p><p> 3.1 板塊的顯示1</p>
18、<p> 3.2 注冊監(jiān)聽2</p><p> 3.3 ChatServer2</p><p><b> 3.4 下棋2</b></p><p><b> 四、詳細(xì)設(shè)計(jì)3</b></p><p> 4.1 WuZiQi類3</p><p> 4
19、.2 ChatSever類4</p><p> 4.3多用戶聊天5</p><p><b> 4.4 流程圖6</b></p><p> 五、運(yùn)行調(diào)試與分析討論7</p><p> 六、設(shè)計(jì)體會與小結(jié)9</p><p><b> 七、參考文獻(xiàn)10</b>
20、</p><p> 一、課程設(shè)計(jì)任務(wù)及要求</p><p> 1、五子棋游戲室界面:用戶可以選擇對弈桌及角色(執(zhí)黑、執(zhí)白、旁觀);</p><p> 游戲界面:有開始、退出、悔棋、判斷勝負(fù);發(fā)言及顯示區(qū);用戶列表 </p><p><b> 區(qū);棋盤繪制區(qū);</b></p><p
21、> 3、使用Socket來完成服務(wù)端和客戶端的通信;</p><p> 4、使用多線程技術(shù)支持多用戶操作;</p><p> 5、增強(qiáng)功能:支持用戶注冊、添加和刪除好友、戰(zhàn)績顯示、發(fā)送消息、接 </p><p> 受消息、多人聊天等功能;使用數(shù)據(jù)庫保存用戶信息。</p><p><b> 二、需求分析</
22、b></p><p><b> 2.1 棋盤板塊</b></p><p> 畫一個15×15的棋盤版面,及兩個按鈕組。初始化:開始、重置、 </p><p> 退出;角色選擇:黑方、白方、旁觀。</p><p><b> 2.2 聊天板塊</b></p
23、><p> 聊天信息顯示區(qū),聊天信息輸入?yún)^(qū)。</p><p> 2.3 ChatSever </p><p> 模擬服務(wù)器:用于橋接不同用戶,實(shí)現(xiàn)接收用戶發(fā)出的信息,然后</p><p> 將信息傳遞到每個用戶的聊天窗口。</p><p><b> 2.4 編譯環(huán)境</b></p>
24、;<p> Eclipse 實(shí)驗(yàn)室上機(jī) 在宿舍編寫</p><p><b> 2.5 參考資料</b></p><p> Java 語言使用教程,百度文庫資料(五子棋判斷勝負(fù)算法)。</p><p><b> 三、設(shè)計(jì)思路</b></p><p><b> 3.1
25、 板塊的顯示</b></p><p> 畫棋盤 調(diào)用public void paint(Graphics g){QiPan(g);}方法</p><p> 畫一個15×15的棋盤面版。</p><p> 初始化 定義兩個Panel P1、P2,在初始化板塊將JButton 開始、</p><p> 重
26、置,退出加入到P1,將黑方、白方、旁觀加入到P2。</p><p> 聊天板塊 在初始化時定義一個JTextArea 和一個JTextField 實(shí)現(xiàn)聊</p><p><b> 天功能</b></p><p> 3.2 注冊監(jiān)聽 </p><p> 對角色選擇按鈕注冊ActionListener監(jiān)聽,設(shè)置用
27、戶的角色。定義黑子int類型 0,白子1。</p><p> 對按鈕開始、重置注冊ActionListener監(jiān)聽,如果點(diǎn)擊開始,用戶進(jìn) 入下棋狀態(tài),有一方贏了,棋盤上則不能再點(diǎn)擊棋子。點(diǎn)擊重置,則開始新的一輪。</p><p> 對鼠標(biāo)注冊mouseClicked監(jiān)聽,鼠標(biāo)點(diǎn)擊棋盤時獲取下棋的位置。</p><p> 對JTextField注冊ActionL
28、istener,用戶輸入聊天信息后,通過Server傳遞給其他用戶,在對話框JTextArea內(nèi)顯示。</p><p> 3.3 ChatServer</p><p> class ServerThread implements Runnable{ }類監(jiān)聽線程,監(jiān)聽是否有客戶端法過信息來。</p><p><b> 屬性: </b>&
29、lt;/p><p> Vector threads 向量存儲線程</p><p> Socket socket 服務(wù)端口</p><p> DataInputStream in 輸入流</p><p> DataOutputStream out 輸出流</p><p> int nid 用戶ID</p&g
30、t;<p><b> 方法:</b></p><p> 構(gòu)造器public ServerThread(Socket socket,Vector threads)</p><p> 實(shí)現(xiàn)信息的輸入、輸出</p><p> 實(shí)現(xiàn)public void run()監(jiān)聽客戶端是否發(fā)信息過來,當(dāng)客戶離開時向 </
31、p><p> 其他客戶發(fā)信息,把客戶端的信息發(fā)給其他客戶。 </p><p> 服務(wù)器向客戶端發(fā)信息public void write(String msg)</p><p> 獲取線程IDpublic int getID()</p><p>
32、; 設(shè)置線程IDpublic void setID(int nid)</p><p> 在Chatserver類內(nèi)調(diào)用ServerThread 實(shí)現(xiàn)對所有來訪客戶監(jiān)聽,為來訪者設(shè)置ID,若有離開用戶,則在聊天板塊廣播。</p><p><b> 3.4 下棋</b></p><p> 用二維數(shù)組模擬棋盤chessbody[17][17]
33、,黑方下棋,則黑方所下棋位置的值等于旗子的顏色加一,白方類似。最后1代表下了黑棋,2表示下了白棋,0表示沒下棋。</p><p> 從橫向、縱向、斜方向判斷勝負(fù)。下完一步判斷一次,有一個方向上同色棋子數(shù)超過5,則勝負(fù)已判斷。</p><p><b> 四、詳細(xì)設(shè)計(jì)</b></p><p> 4.1 WuZiQi類</p>&
34、lt;p> 屬性: int color_Qizi=0; 黑子0 白子1</p><p> int ChessBody[][]=new int[17][17];</p><p> 無棋子 0,黑棋 1,白棋 2;</p><p> int GameStart=0;</p><p> JButton start,exi
35、t,rest;</p><p> JButton check[]=new JButton[3];</p><p> String chess[]={"黑方","白方","旁觀"};</p><p><b> 方法: </b></p><p><b
36、> 獲取下棋位點(diǎn)</b></p><p> public void mouseClicked(MouseEvent e){</p><p> //Graphics g=getGraphics();</p><p><b> int x,y;</b></p><p> x=e.getX();y=
37、e.getY();//鼠標(biāo)點(diǎn)擊位置</p><p> if(x<45||y<45||x>495||y>495)</p><p> {return;}//在棋盤之外則不下</p><p> if(x%30>15)//獲取下棋點(diǎn)的位置</p><p><b> {x+=30;}</b>&
38、lt;/p><p> if(y%30>15)</p><p><b> {y+=30;}</b></p><p> x=x/30*30; //x、y為棋子中心位置</p><p> y=y/30*30;</p><p> PlayQizi(x,y);//下棋 }</p>
39、<p> 下棋點(diǎn)擊后天上棋子,每一步完了后判斷勝負(fù),從四個方向上判斷</p><p> 勝負(fù),并在棋盤中間顯示哪方贏了!</p><p> public void PlayQizi(int x,int y){</p><p> if (GameStart==0) //判斷游戲未開始 </p><p> { return;
40、} </p><p> if (ChessBody[x/30][y/30]!=0) </p><p><b> {return;}</b></p><p> Graphics g=getGraphics(); </p><p> if (color_Qizi==1)//判斷黑子還是白子 </p>&
41、lt;p> {g.setColor(Color.black); </p><p> color_Qizi=0; </p><p><b> } </b></p><p> else {g.setColor(Color.white); </p><p> color_Qizi=1; </p>
42、;<p><b> } </b></p><p> g.fillOval(x-12,y-12,24,24); </p><p> ChessBody[x/30][y/30]=color_Qizi+1; </p><p> /////判斷輸贏//////////</p><p> g.setColo
43、r(Color.magenta);</p><p> g.setFont(new Font("fhahf ",Font.BOLD,30));</p><p> if(GameWin橫(x/30,y/30)){</p><p> g.drawString(GetQiziColor(color_Qizi)+"贏了!",200
44、,200);</p><p> GameStart=0;</p><p><b> }</b></p><p> if(GameWin豎(x/30,y/30)){</p><p> g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);<
45、;/p><p> GameStart=0;</p><p><b> }</b></p><p> if(GameWin撇(x/30,y/30)){</p><p> g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);</p>
46、<p> GameStart=0;}</p><p> if(GameWin捺(x/30,y/30)){</p><p> g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);</p><p> GameStart=0;}}</p><p> 4.2
47、 ChatSever類</p><p> public void run(){</p><p> System.out.println ("Thread is running");</p><p><b> try{</b></p><p> //監(jiān)聽客戶端是否發(fā)消息過來</p>
48、<p> while(true){</p><p> String receive = in.readUTF();</p><p> if(receive == null)</p><p><b> return;</b></p><p> //當(dāng)某客戶離開,給其它客戶端發(fā)消息</p>
49、<p> if(receive.equals("leave")){</p><p> for(int i=0;i < threads.size();i++){</p><p> ServerThread st = (ServerThread)threads.elementAt(i);</p><p> st.write(
50、"***"+getID()+"leaving...***");</p><p><b> }</b></p><p><b> }else{</b></p><p> //把某客戶端發(fā)過來的發(fā)送到所有客戶端</p><p> for(int i=0;i
51、 < threads.size();i++){</p><p> ServerThread st = (ServerThread)threads.elementAt(i);</p><p> st.write("<"+getID()+">: "+receive);}</p><p> 4.3多用戶聊天
52、 </p><p> 初始化網(wǎng)絡(luò),并連接到服務(wù)端</p><p><b> try {</b></p><p><b> //獲得URL</b></p><p> URL url = this.getCodeBase();</p><p> InetAddres
53、s addr = InetAddress.getByName(url.getHost());</p><p> Socket socket;</p><p> System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol());//5555
54、為服務(wù)器端口</p><p> socket = new Socket(addr,5555);</p><p> //由本套接口獲得輸入,輸出流</p><p> in = new DataInputStream(socket.getInputStream());</p><p> out = new DataOutputStream
55、(socket.getOutputStream());</p><p> }catch (Exception ex) {ex.printStackTrace(); }</p><p> 線程開始new Thread(this).start();</p><p> Run方法向服務(wù)器發(fā)送信息并接收信息</p><p> public v
56、oid run() {</p><p> try {//監(jiān)視服務(wù)器所發(fā)送的信息</p><p> while(true) {</p><p> String receive = in.readUTF();</p><p> if(receive!=null){</p><p> txtDisplay.appe
57、nd(receive + "\n");</p><p> //將光標(biāo)移動到最后一個以實(shí)現(xiàn)滾動條的自動置底</p><p> txtDisplay.setCaretPosition(txtDisplay.getText().length());</p><p><b> } }</b></p><p&
58、gt; }catch (Exception ex) {</p><p> txtDisplay.append("Network problem or Server down");</p><p> txtInput.setVisible(false);}</p><p><b> }</b></p>&
59、lt;p> public void stop() {</p><p><b> try {</b></p><p> out.writeUTF("leave");</p><p> }catch(Exception ex){}}</p><p><b> 4.4 流程圖<
60、;/b></p><p> 圖 4—1 網(wǎng)絡(luò)通信</p><p> 用戶與服務(wù)器間的通信是雙向的,用戶將信息傳遞給Server,Server再將信息傳遞給每個用戶。 </p><p> 圖 4—2 WuZiQi類的方法</p><p> 棋盤繼承JApplet類,注冊監(jiān)聽,實(shí)現(xiàn)Init()、Run()、Paint()方法
61、、注冊監(jiān)聽。畫棋盤,用二維數(shù)組模擬棋盤下子情況。對棋盤棋子的獲取,判斷勝負(fù)。與Server連接,監(jiān)聽,獲取來自服務(wù)器的信息。</p><p> 五、運(yùn)行調(diào)試與分析討論</p><p><b> 圖 5—1 棋盤</b></p><p> 圖5—1 棋盤圖,當(dāng)選擇好黑白角色后點(diǎn)擊開始,便可以下棋;點(diǎn)擊重置時重新開始下棋;點(diǎn)擊退出時結(jié)束游戲,
62、并退出。 該棋盤未實(shí)現(xiàn)網(wǎng)絡(luò)棋盤,只能自己跟自己下棋。還欠缺悔棋步驟,可以用Vector存儲已下的棋子的信息,調(diào)用repaiant() 然后再畫除最后一步的棋盤,實(shí)現(xiàn)悔棋操作。由于對Socket 用法還不熟悉,不能將棋盤通信與聊天通信區(qū)分開來,也就不能實(shí)現(xiàn)聯(lián)網(wǎng)下棋。</p><p> 圖5—2ChatServer</p><p> 如果用戶登錄則監(jiān)聽 listening ......、a
63、ccept a client使用了Socket,和多線程技術(shù)。定義了Vector 存儲用戶線程,實(shí)現(xiàn)ChatServer將信息傳遞給每個用戶,接收每個用戶的信息。</p><p><b> 圖5—3聊天對話框</b></p><p> 用戶4、5進(jìn)入了聊天,對話。當(dāng)對話框縮小或關(guān)閉時ChatServer都會發(fā)出用戶離開的消息。此對話框可以允許多個用戶群聊,但是少了
64、一個窗口顯示所有在線用戶信息。即要求五,增強(qiáng)功能未實(shí)現(xiàn)。不能實(shí)現(xiàn)用戶注冊,添加好友,查看好有信息,對于數(shù)據(jù)庫的使用不太熟悉。 </p><p><b> 六、設(shè)計(jì)體會與小結(jié)</b></p><p> 經(jīng)過為期一周的課程設(shè)計(jì),感覺自己所學(xué)遠(yuǎn)遠(yuǎn)不能解決做課設(shè)時的需求。在熟悉課本和上網(wǎng)搜索后,才算馬馬虎虎的完成了任務(wù)。</p><p> 在
65、畫棋盤時,調(diào)用draw方法對于畫圖這塊的坐標(biāo)布置,在今后學(xué)畫其他圖畫時能夠得心應(yīng)手。獲取棋子方法的巧妙,注冊鼠標(biāo),獲取點(diǎn)擊位置,除以棋盤間隔,去掉不為整數(shù)的一塊,再乘以棋盤間隔便獲得最臨近點(diǎn)的下棋坐標(biāo),即所要下棋的位置。用二維數(shù)組模擬棋盤,無棋子的置為0,黑子置為1,白子置為2,以便在判斷勝負(fù)時利于同色棋子的查找。整個棋盤就模擬出來了,很巧妙,不過有更好的方法用向量存儲棋子信息,便于悔棋等操作。</p><p>
66、 實(shí)現(xiàn)多用戶聊天,老師后面講的不是很多,做起來有點(diǎn)費(fèi)力。參考網(wǎng)上資料,明白Socket原理。開始時照著課本上的例子,不能得出想要的效果,而且只運(yùn)行了一個程序看不到有通信的效果。后面在運(yùn)行了Server類后,自己嘗試著兩個Client類,實(shí)現(xiàn)了通話,就像騰訊QQ里面一樣的效果。里面定義了Vector 線程,實(shí)現(xiàn)了多線程用法。</p><p> 兩個板塊大體實(shí)現(xiàn),但是后面的要求五,由于數(shù)據(jù)庫的使用不是太熟悉,不能
67、注冊用戶,添加好友,查找好友,還有悔棋操作未能實(shí)現(xiàn)。此程序最大的缺點(diǎn)還在于,不能實(shí)現(xiàn)網(wǎng)絡(luò)兩人下五子棋。由于不能將棋盤信息與聊天信息區(qū)分,不能告訴對反自己下了哪一步,所以根據(jù)自己的水平也就能做到這了,今后加以完善。</p><p> 感覺這次課設(shè)有點(diǎn)失敗,平時學(xué)的不能靈活的運(yùn)用,今后得多加練習(xí),多點(diǎn)鍛煉的機(jī)會,積累跟多的知識。還有算法這塊,解決一個問題的關(guān)鍵,培養(yǎng)一個好的類的思想,將問題有條有理的理清。形成一個清
68、晰的思路后,在動手,下筆如有神。</p><p><b> 七、參考文獻(xiàn)</b></p><p> [1]丁振凡. Java語言實(shí)用教程(第2版)[M]. 北京郵電大學(xué)出版社. 2008.1 </p><p> [2]丁振凡. Java語言實(shí)用教程實(shí)驗(yàn)指導(dǎo)(第2版)[M]. 北京郵電大學(xué)出版社. 2008.1</p><
69、;p> [3]楊樹林等. Java語言最新實(shí)用案例教程(第2版)[M]. 清華大學(xué)出版社. 2010.7</p><p><b> 附錄</b></p><p> package 五子棋;</p><p> import java.applet.*; </p><p> import java.awt.*
70、; </p><p> import java.awt.event.*; </p><p> import java.applet.Applet; </p><p> import java.awt.Color; </p><p> import java.io.*;</p><p> import java
71、.net.*;</p><p> import javax.swing.*;</p><p> public class WuZiQi extends JApplet implements ActionListener</p><p> ,MouseListener,MouseMotionListener,ItemListener,Runnable{<
72、/p><p> int color_Qizi=0;// 黑子0 白子1</p><p> int ChessBody[][]=new int[17][17];//無棋子 0,黑棋 1,白棋 2;</p><p> int GameStart=0;</p><p> JButton start,exit,rest;</
73、p><p> JButton check[]=new JButton[3];</p><p> String chess[]={"黑方","白方","旁觀"};</p><p> JTextArea txtDisplay;</p><p> JTextField txtInp
74、ut;</p><p> DataInputStream in;</p><p> DataOutputStream out;</p><p> public void init(){</p><p> setLayout(null); start=new JButton("開始"); rest=new JB
75、utton("重置"); exit=new JButton("退出"); </p><p> Panel p1=new Panel();</p><p> p1.add(start); p1.add(rest);</p><p> p1.add(exit);</p><p> add(p1
76、); p1.setBounds(130,510,300,50);</p><p> 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>
77、;<p> add(p2); p2.setBounds(600,50,200,50);</p><p> for(int i=0;i<chess.length;i++)</p><p> {check[i].addActionListener(this); }</p><p> start.addActionListener(this
78、);</p><p> exit.addActionListener(this);</p><p> rest.addActionListener(this);</p><p> addMouseListener(this);</p><p> txtDisplay = new JTextArea(10,50);</p>
79、<p> txtDisplay.setEditable(false);</p><p> txtInput = new JTextField(10);</p><p> Panel chat=new Panel();</p><p> chat.setLayout(new BorderLayout());</p><p>
80、 chat.add(BorderLayout.CENTER,new JScrollPane(txtDisplay));</p><p> chat.add(BorderLayout.SOUTH,txtInput);</p><p> add(chat);chat.setBounds(900, 300, 350, 300);</p><p> txtInput
81、.addActionListener(//對輸入文本框地方注冊事件監(jiān)聽</p><p> new ActionListener() {</p><p> public void actionPerformed(ActionEvent event) {</p><p> String str = txtInput.getText();</p>&l
82、t;p> txtInput.setText("");</p><p><b> try {</b></p><p> out.writeUTF(str);</p><p> }catch(Exception e) {}}</p><p><b> });</b>
83、</p><p> in = null; out = null;</p><p> 初始化網(wǎng)絡(luò),并連接到服務(wù)端</p><p> try {//獲得URL</p><p> URL url = this.getCodeBase;</p><p> InetAddress addr = InetAddress
84、.getByName(url.getHost());</p><p> Socket socket;</p><p> System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol());</p><p> //
85、5555 為服務(wù)器端口</p><p> socket = new Socket(addr,5555);//由本套接口獲得輸入,輸出流</p><p> in = new DataInputStream(socket.getInputStream());</p><p> out = new DataOutputStream(socket.getOutput
86、Stream());</p><p> }catch (Exception ex) {ex.printStackTrace(); </p><p><b> }</b></p><p> new Thread(this).start();//線程開始</p><p><b> }</b>
87、</p><p> public void actionPerformed(ActionEvent e){</p><p> Graphics g=getGraphics();</p><p> if(e.getSource()==start){</p><p> GameStart();}</p><p>
88、 if(e.getSource()==rest){</p><p> GameReSt();}</p><p> if(e.getSource()==exit){</p><p> GameEnd();</p><p> if(e.getSource()==check[0]) color_Qizi=0;</p>
89、<p> } public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e){//獲取下棋位點(diǎn) int x,y; x=e.getX();y=e.getY(); if(x<45||y<45||x>495||y>495) {return;} if(x%30>15)//獲取下棋
90、點(diǎn)的位置 {x+=30;} if(y%30>15) {y+=30;} x=x/30*30; y=y/30*30; PlayQizi(x,y);//下棋</p><p> } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void m
91、ouseReleased(MouseEvent e){} public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void paint(Graphics g){</p><p><b> QiPan(g);</b></p><p>
92、 } public void PlayQizi(int x,int y){ if (GameStart==0) //判斷游戲未開始 { return; } </p><p> if (ChessBody[x/30][y/30]!=0) {return;} Graphics g=getGraphics(); </p><p> if (color_Qizi==1)//判斷
93、黑子還是白子 {g.setColor(Color.black); color_Qizi=0;} </p><p> else {g.setColor(Color.white); color_Qizi=1; </p><p><b> } </b></p><p> g.
94、fillOval(x-12,y-12,24,24); </p><p> ChessBody[x/30][y/30]=color_Qizi+1; </p><p> ///判斷輸贏////// g.setColor(Color.magenta); g.setFont(new Font("fhahf ",Font.BOLD,30));</p>
95、<p> if(GameWin橫(x/30,y/30))</p><p> {g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);GameStart=0;</p><p><b> }</b></p><p> if(GameWin豎(x/30,y
96、/30)){</p><p> g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200);GameStart=0;</p><p><b> }</b></p><p> if(GameWin撇(x/30,y/30)){</p><p>
97、 g.drawString(GetQiziColor(color_Qizi)+"贏了!",200,200); GameStart=0;</p><p><b> }</b></p><p> f(GameWin捺(x/30,y/30)){</p><p> g.drawString(GetQiziColor(co
98、lor_Qizi)+"贏了!",200,200);</p><p> GameStart=0;</p><p><b> }</b></p><p> }//////////////獲得贏方////////////////////////// public String GetQiziColor(int x)
99、 </p><p> { if(x==0 )return "黑方";else return "白方"; } //////////////判斷輸贏//////////////////////////////////// public boolean GameWin橫(int x,int y){ int x1,y1;int t=1; x1=x;y1=
100、y; for(int i=1;i<5;i++) {if(x1>16)break; if(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(Ch
101、essBody[x1-i][y1]==ChessBody[x][y])t+=1; </p><p> else break; </p><p> } if(t>4) return true; else return false; </p><p> } public boolean GameWin豎(int x,int
102、 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][y1+i]==ChessBody[x][y]) t+=1; else break;</p><p>&l
103、t;b> }</b></p><p> for(int i=1;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 retur
104、n false; </p><p> } public boolean 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]==ChessBo
105、dy[x][y])t+=1; 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)return true;
106、 else return false;</p><p> } public 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;
107、 if(ChessBody[x1-i][y1-i]==ChessBody[x][y]) t+=1; 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>
108、<p> } if(t>4) turn true; else eturn false; </p><p> } public void GameStart()//游戲開始 {GameStart=1; Game_btn_enable(false); rest.setEnabled(true);</p><p> } public
109、void Game_btn_enable(boolean e){ start.setEnabled(e);rest.setEnabled(e); for(int i=0;i<check.length;i++) { check[i].setEnabled(e);}</p><p> } public void GameStartInit(){//初始化 GameStart=0; Ga
110、me_btn_enable(true); start.setEnabled(true); for(int i=0;i<17;i++) for(int j=0;j<17;j++) {ChessBody[i][j]=0;}</p><p> } public void GameReSt(){//重置 repaint(); GameStartInit();</p>
111、<p> } public void QiPan(Graphics g){//畫棋盤 </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>
112、 g.setColor(Color.black);</p><p> for(int 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
113、*30,n,n+i*30,n+420);</p><p> g.fillRect(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><
114、p> g.fillRect(n+11*30-3,n+11*30-3,6,6); </p><p> g.fillRect(n+7*30-3,n+7*30-3,6,6); </p><p><b> }</b></p><p> /////////////////////////運(yùn)行監(jiān)聽方法///////////////////
115、///////</p><p> public void run() {</p><p> try {//監(jiān)視服務(wù)器所發(fā)送的信息</p><p> while(true) { </p><p> String receive = in.readUTF(); if(receive!=null){ txtDisplay
116、.append(receive + "\n"); //將光標(biāo)移動到最后一個以實(shí)現(xiàn)滾動條的自動置底 txtDisplay.setCaretPosition(txtDisplay.getText().length());</p><p><b> }</b></p><p><b> }</b></p
117、><p> }catch (Exception ex) { txtDisplay.append("Network problem or Server down"); txtInput.setVisible(false);}</p><p><b> }</b></p><p> public void s
118、top() </p><p><b> try {</b></p><p> out.writeUTF("leave");</p><p> }catch (Exception ex) {}</p><p><b> }</b></p><p&
119、gt;<b> }</b></p><p> /*ChatServer類*/</p><p> import java.net.*;</p><p> import java.io.*;</p><p> import java.util.*;</p><p> public clas
120、s ChatServer {</p><p> public static void main(String[] args)throws Exception{</p><p> ServerSocket svSocket =null;</p><p> //Vector threads 為ServerThread集合</p><p>
121、 Vector threads = new Vector();</p><p><b> //開始監(jiān)聽</b></p><p> System.out.println ("listening...");</p><p><b> try {</b></p><p> //
122、創(chuàng)建服務(wù)端套接口</p><p> svSocket = new ServerSocket(5555);</p><p> }catch (Exception ex) {</p><p> System.out.println ("Server create ServerSocket failed!");</p><p&
123、gt;<b> return;</b></p><p><b> }</b></p><p><b> try{</b></p><p> int nid = 0;</p><p> //監(jiān)聽是否有客戶端連接</p><p> while(t
124、rue){</p><p> Socket socket = svSocket.accept();</p><p> System.out.println ("accept a client");</p><p> //創(chuàng)建一個新的ServerThread</p><p> ServerThread st = ne
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)--五子棋
- 五子棋java課程設(shè)計(jì)
- 五子棋java課程設(shè)計(jì)
- java課程設(shè)計(jì)--五子棋游戲
- java課程設(shè)計(jì)--對戰(zhàn)五子棋
- java課程設(shè)計(jì)-五子棋游戲
- java課程設(shè)計(jì)報告-五子棋
- java課程設(shè)計(jì)--人機(jī)對弈五子棋
- 五子棋java語言課程設(shè)計(jì)報告
- java課程設(shè)計(jì)報告---java 五子棋游戲設(shè)計(jì)
- 五子棋課程設(shè)計(jì)
- java課程設(shè)計(jì)五子棋(附源代碼)
- java_五子棋小游戲課程設(shè)計(jì)
- 五子棋-課程設(shè)計(jì)報告
- java課程設(shè)計(jì)報告---單機(jī)版五子棋
- 面向?qū)ο蟪绦蛟O(shè)計(jì)---五子棋-java課程設(shè)計(jì)
- 五子棋c++課程設(shè)計(jì)
- 五子棋c++課程設(shè)計(jì)
- 五子棋小游戲課程設(shè)計(jì)
- 《java程序設(shè)計(jì)》課程設(shè)計(jì)-五子棋小游戲
評論
0/150
提交評論