




已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
目 錄 前言31剪刀石頭布游戲設(shè)計(jì)思路闡述42程序概要設(shè)計(jì)52.1功能需求分析52.2性能需求分析52.3程序框圖52.4 Java類及自定義類相互繼承的層次關(guān)系62.4.1 Java類及自定義類的說明62.4.2類中成員及作用73程序詳細(xì)設(shè)計(jì)83.1 包的加載83.2自定義類創(chuàng)建服務(wù)器端和客戶端83.3創(chuàng)建程序線程94測試運(yùn)行95源代碼清單106總結(jié)137致謝13參考文獻(xiàn)13 基于JAVA的剪刀石頭布游戲設(shè)計(jì)摘要:本課程設(shè)計(jì)使用Java語言,運(yùn)用 java.io包和包及getInputStream()、getOutputStream()等方法,編寫出一個(gè)能在dos環(huán)境中顯示出剪刀石頭布游戲界面,啟動(dòng)服務(wù)器端線程,運(yùn)行客戶端線程,提示玩家出拳,然后,程序把玩家輸入的數(shù)據(jù)傳入到服務(wù)器端,通過服務(wù)器端線程的函數(shù)得出結(jié)果,然后再把結(jié)果傳輸?shù)浇缑嫔?。關(guān)鍵字:方法;網(wǎng)絡(luò)編程;多線程;輸入輸出流前言Java,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語言和Java平臺(tái)的總稱。用Java實(shí)現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺(tái)、動(dòng)態(tài)的Web、Internet計(jì)算。從此,Java被廣泛接受并推動(dòng)了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,通過繼承可以簡化類的定義。繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類,而原始類稱為新類的超類。派生類可以從它的基類那里繼承方法和變量, 并且類可以修改或增加新的方法使之更適合特殊的需要。在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理” 。多線程處理一個(gè)常見的例子就是用戶界面。利用線程,用戶可按下一個(gè)按鈕,然后程序會(huì)立即作出響應(yīng),而不是讓用戶等待程序完成了當(dāng)前任務(wù)以后才開始響應(yīng)。在Java語言中,線程是一種特殊的對(duì)象,它必須由Thread類或其子(孫)類來創(chuàng)建。通常有兩種方法來創(chuàng)建線程:其一,使用型構(gòu)為Thread(Runnable) 的構(gòu)造子將一個(gè)實(shí)現(xiàn)了Runnable接口的對(duì)象包裝成一個(gè)線程,其二,從Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對(duì)象即為線程。值得注意的是Thread類已經(jīng)實(shí)現(xiàn)了Runnable接口,因此,任何一個(gè)線程均有它的run方法,而run方法中包含了線程所要運(yùn)行的代碼。線程的活動(dòng)由一組方法來控制。 Java語言支持多個(gè)線程的同時(shí)執(zhí)行,并提供多線程之間的同步機(jī)制。通過一個(gè)學(xué)期的學(xué)習(xí),對(duì)Java有了一定的了解,為了鞏固所學(xué)知識(shí),編寫一個(gè)剪刀石頭布游戲。1剪刀石頭布游戲設(shè)計(jì)思路闡述 在設(shè)計(jì)游戲時(shí),我們要充分考慮到剪刀石頭布游戲的特性,以及多種技術(shù)的實(shí)現(xiàn):構(gòu)造創(chuàng)建服務(wù)器端和客戶端創(chuàng)建輸入輸出流編寫服務(wù)器端處理數(shù)據(jù)的線程方法繪制游戲界面繪制界面上的提示采用此方法設(shè)計(jì)使程序簡潔明了,使繪制游戲界面時(shí)簡單化,更加易于游戲的實(shí)現(xiàn),程序也更易于讀懂。 如java中得到輸入輸出流的方法:/調(diào)用客戶端的getInputStream()方法Inputs=newBufferedReader(new InputStreamReader(client.getInputStream();通過調(diào)用此方法獲取從服務(wù)器得到的數(shù)據(jù)調(diào)用客戶端的getOutputStream()方法,通過此方法把客戶端的數(shù)據(jù)傳輸給服務(wù)器。2程序概要設(shè)計(jì)2.1功能需求分析 一個(gè)剪刀石頭布游戲,根據(jù)一般的常識(shí),首先要有兩個(gè)人,兩個(gè)人同時(shí)出,然后,根據(jù)雙方的出拳,決定誰是贏者,雖然想起來這個(gè)游戲很簡單,但如何實(shí)現(xiàn) ,還是有一定難度的。實(shí)現(xiàn)這個(gè)時(shí)針時(shí)涉及到幾個(gè)技術(shù)問題:1. 雙方如何出拳2. 如何同時(shí)出拳3. 如何判斷哪方贏了4. 如何顯示結(jié)果剪刀石頭布游戲,都是通過兩個(gè)人同時(shí)出拳,然后根據(jù)雙方出的拳,判定哪方是贏家。2.2性能需求分析準(zhǔn)確性:在實(shí)現(xiàn)此的過程中,我們要考慮到,雙方是否能同時(shí)地出拳,還要就是如何去判斷,準(zhǔn)確地知道哪方是贏家.簡潔性:在實(shí)現(xiàn)此的過程中,我們要考慮到,怎樣使游戲界面更簡單,讓人更容易明白它怎樣去玩。2.3程序框圖游戲程序框圖如圖1所示: 圖1 游戲程序框圖2.4 JAVA類及自定義類相互繼承的層次關(guān)系 2.4.1 Java類及自定義類的說明自定義類:類名:SocketServer作用:服務(wù)器類繼承的父類:Thread類實(shí)現(xiàn)的接口:無類名:Service作用: 服務(wù)器類,它是判定勝負(fù)的類繼承的父類:Thread類類中成員: String data; BufferedReader inputs; PrintStream outputs; Socket client;實(shí)現(xiàn)的接口:無類名:Client作用:客戶端類類中的成員: getInputStream(); getOutputStream(); InputStreamReader (); readLine(); 實(shí)現(xiàn)的接口:無自定義類中子類和其父類的繼承關(guān)系如圖2如所示:ThreadServicegetInputStreamStartRunRandomgetOutputStreamReadline 圖2 子類及其父類繼承關(guān)系圖2.4.2類中成員及作用Service類成員:String data; /接收數(shù)據(jù)BufferedReader inputs;/ 讀取數(shù)據(jù)PrintStream outputs;/輸出數(shù)據(jù)Socket client;/定義套接字Client類成員:String data;/接收數(shù)據(jù) Socket client = null;/定義套接字 BufferedReader inputs = null;/ 讀取數(shù)據(jù) BufferedReader key = null;/ 緩沖數(shù)據(jù) PrintStream outputs = null;/輸出數(shù)據(jù)3程序詳細(xì)設(shè)計(jì)3.1類獲包的加載加載剪刀石頭布游戲設(shè)計(jì)中用到的類和包,用于運(yùn)行主程序:import java.io.*; import .*; 3.2自定義類創(chuàng)建服務(wù)器端 使用自定義類ServerSocket繼承父類Thread使用run等方法,構(gòu)造函數(shù)創(chuàng)建一個(gè)服務(wù)器端。程序代碼如下:public class SocketServer extends Thread ServerSocket server; public SocketServer() try server = new ServerSocket(8080); catch(IOException e) System.exit(0); this.start(); public void run() try while(true) Socket client = server.accept(); Service ss = new Service(client); catch(IOException e) System.exit(1); public static void main(String args) new SocketServer(); 3.3創(chuàng)建數(shù)據(jù)處理類 創(chuàng)建一個(gè)用于數(shù)據(jù)處理類使服務(wù)器能準(zhǔn)確處理數(shù)據(jù),獲取數(shù)據(jù),并使用方法run()實(shí)現(xiàn)數(shù)據(jù)處理。實(shí)現(xiàn)代碼如下: /創(chuàng)建數(shù)據(jù)儲(chǔ)存變量inputs = new BufferedReader(new InputStreamReader(client.getInputStream();outputs = new PrintStream(client.getOutputStream(); /創(chuàng)建一個(gè)Run方法public void run() 3.4創(chuàng)建客戶端類 創(chuàng)建一個(gè)用于客戶端接收玩家輸入的數(shù)據(jù)的類,程序?qū)崿F(xiàn)代碼如下: /接收客戶端的數(shù)據(jù)public class Client public static void main(String args) String data; Socket client = null; BufferedReader inputs = null; BufferedReader key = null; PrintStream outputs = null; try client = new Socket(InetAddress.getLocalHost(),8080); inputs=new BufferedReader(new InputStreamReader(client.getInputStream(); outputs = new PrintStream(client.getOutputStream(); key = new BufferedReader(new InputStreamReader(System.in); catch(IOException e) System.out.println(CAN NOT CONN WITH SERVER); try while(true) System.out.println(-); System.out.print(請(qǐng)出拳:石頭/剪刀/布 ); data = key.readLine(); outputs.println(data); System.out.println(ECHO: + inputs.readLine(); catch(IOException e) System.out.println(ERROR IO); try client.close(); catch(IOException e) System.out.println(can not close it); 4測試運(yùn)行 程序編寫好后,用MyEclipse軟件運(yùn)行,檢測程序設(shè)計(jì)結(jié)果,執(zhí)行目標(biāo)程序后得到如圖4所示的窗體: 圖4 程序測試圖“空格+石頭、剪刀或布”經(jīng)檢測程序運(yùn)行正常。 5源代碼清單import java.io.*; import .*; public class SocketServer extends Thread ServerSocket server; public SocketServer() try server = new ServerSocket(8080); catch(IOException e) System.exit(0); this.start(); public void run() try while(true) Socket client = server.accept(); Service ss = new Service(client); catch(IOException e) System.exit(1); public static void main(String args) new SocketServer(); public class Service extends Thread String data; BufferedReader inputs; PrintStream outputs; Socket client; public Service(Socket socket) client = socket; try inputs=new BufferedReader(new InputStreamReader(client.getInputStream(); outputs = new PrintStream(client.getOutputStream(); catch (IOException e) e.printStackTrace(); this.start(); public void run() try while (true) data = inputs.readLine(); int res = (int) (Math.random() * 3); if (data = null) break; else if (res = 0 & 石頭.equals(data) data = 電腦也是石頭,打平了!; else if (res = 0 & 剪刀.equals(data) data = 電腦是石頭,電腦贏了!; else if (res = 0 & 布.equals(data) data = 電腦是石頭,恭喜,你贏了!; else if (res = 1 & 石頭.equals(data) data = 電腦是剪刀,恭喜,你贏了!; else if (res = 1 & 剪刀.equals(data) data = 電腦也是剪刀,打平了!; else if (res = 1 & 布.equals(data) data = 電腦是剪刀,電腦贏了!; else if (res = 2 & 石頭.equals(data) data = 電腦是布,電腦贏了!; else if (res = 2 & 剪刀.equals(data) data = 電腦是布,恭喜,你贏了!; else if (res = 2 & 布.equals(data) data = 電腦也是布,打平了!; else data = 電腦不認(rèn)識(shí)你出的拳; outputs.println(data); catch (IOException e) e.printStackTrace(); try client.close(); catch (IOException e) e.printStackTrace(); public class Client public static void main(String args) String data; Socket client = null; BufferedReader inputs = null; BufferedReader key = null; PrintStream outputs = null; try client = new Socket(localhost,8080); inputs = new BufferedReader(new InputStreamReader(client.getInputStream(); outputs = new PrintStream(client.getOutputStream(); key = new BufferedReader(new InputStreamReader(System.in); catch(IOException e) System.out.println(CAN NOT CONN WITH SERVER); try while(true) System.out.println(-); System.out.print(請(qǐng)出拳:石頭/剪刀/布 ); data = key.readLine(); outputs.p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年國際美術(shù)設(shè)計(jì)師考試基礎(chǔ)內(nèi)容及答案
- 籃球模擬測試題及答案
- 助理廣告師試題及答案知識(shí)架構(gòu)
- 2024年助理廣告師備考心得與實(shí)戰(zhàn)經(jīng)驗(yàn)分享試題及答案
- 植物辨識(shí)考試題及答案
- 2024年國際設(shè)計(jì)師考試的綜合準(zhǔn)備建議試題及答案
- 于設(shè)計(jì)教育中的廣告設(shè)計(jì)課程建設(shè)探討試題及答案
- 新材料在紡織品設(shè)計(jì)中的應(yīng)用舉例試題及答案
- 小升初舞蹈測試題及答案
- 北大競賽數(shù)學(xué)試題及答案
- GB/T 18657.1-2002遠(yuǎn)動(dòng)設(shè)備及系統(tǒng)第5部分:傳輸規(guī)約第1篇:傳輸幀格式
- GB/T 15608-2006中國顏色體系
- GB/T 14315-2008電力電纜導(dǎo)體用壓接型銅、鋁接線端子和連接管
- 中考語文二輪專題復(fù)習(xí):散文和小說閱讀
- 《民法》全冊(cè)精講課件
- 【人衛(wèi)九版內(nèi)分泌科】第十一章-甲狀腺功能減退癥課件
- 護(hù)理人員業(yè)務(wù)技術(shù)檔案 模板
- 金融監(jiān)管學(xué)-金融監(jiān)管學(xué)課件
- 語文一年級(jí)上冊(cè):拼音9《y-w》ppt教學(xué)課件
- 標(biāo)準(zhǔn)溶液配制與標(biāo)定原始記錄(氫氧化鈉)
- 內(nèi)墻膩?zhàn)邮┕ぜ夹g(shù)交底
評(píng)論
0/150
提交評(píng)論