基于JAVA的剪刀石頭布游戲設計_第1頁
基于JAVA的剪刀石頭布游戲設計_第2頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、. 目 錄前言31剪刀石頭布游戲設計思路闡述42程序概要設計52.1功能需求分析52.2性能需求分析52.3程序框圖52.4 Java類及自定義類相互繼承的層次關系62.4.1 Java類及自定義類的說明62.4.2類中成員及作用73程序詳細設計83.1 包的加載83.2自定義類創(chuàng)建服務器端和客戶端83.3創(chuàng)建程序線程94測試運行95源代碼清單106總結137致謝13參考文獻13基于JAVA的剪刀石頭布游戲設計摘要:本課程設計使用Java語言,運用 java.io包和包及getInputStream()、getOutputStream()等方法,編寫出一個能在dos環(huán)境中顯示出剪刀石頭布游戲界

2、面,啟動服務器端線程,運行客戶端線程,提示玩家出拳,然后,程序把玩家輸入的數(shù)據(jù)傳入到服務器端,通過服務器端線程的函數(shù)得出結果,然后再把結果傳輸?shù)浇缑嫔稀jP鍵字:方法;網(wǎng)絡編程;多線程;輸入輸出流前言Java,是由Sun Microsystems公司于1995年5月推出的Java程序設計語言和Java平臺的總稱。用Java實現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺、動態(tài)的Web、Internet計算。從此,Java被廣泛接受并推動了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。在面向對象程序設計中,通過繼承可以簡化類的定義。繼承是一種聯(lián)

3、結類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現(xiàn)有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類,而原始類稱為新類的超類。派生類可以從它的基類那里繼承方法和變量, 并且類可以修改或增加新的方法使之更適合特殊的需要。在一個程序中,這些獨立運行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。多線程處理一個常見的例子就是用戶界面。利用線程,用戶可按下一個按鈕,然后程序會立即作出響應,而不是讓用戶等待程序完成了當前任務以后才開始響應。在Java語言中,線程是一種特殊的對象,它必須由Thread類

4、或其子()類來創(chuàng)建。通常有兩種方法來創(chuàng)建線程:其一,使用型構為Thread(Runnable) 的構造子將一個實現(xiàn)了Runnable接口的對象包裝成一個線程,其二,從Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對象即為線程。值得注意的是Thread類已經(jīng)實現(xiàn)了Runnable接口,因此,任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制。 Java語言支持多個線程的同時執(zhí)行,并提供多線程之間的同步機制。通過一個學期的學習,對Java有了一定的了解,為了鞏固所學知識,編寫一個剪刀石頭布游戲。1剪刀石頭布游戲設計思路闡述 在設計游戲時,

5、我們要充分考慮到剪刀石頭布游戲的特性,以及多種技術的實現(xiàn):構造創(chuàng)建服務器端和客戶端創(chuàng)建輸入輸出流編寫服務器端處理數(shù)據(jù)的線程方法繪制游戲界面繪制界面上的提示采用此方法設計使程序簡潔明了,使繪制游戲界面時簡單化,更加易于游戲的實現(xiàn),程序也更易于讀懂。如java中得到輸入輸出流的方法:/調用客戶端的getInputStream()方法Inputs=newBufferedReader(newInputStreamReader(client.getInputStream();通過調用此方法獲取從服務器得到的數(shù)據(jù)調用客戶端的getOutputStream()方法,通過此方法把客戶端的數(shù)據(jù)傳輸給服務器。2程

6、序概要設計2.1功能需求分析 一個剪刀石頭布游戲,根據(jù)一般的常識,首先要有兩個人,兩個人同時出,然后,根據(jù)雙方的出拳,決定誰是贏者,雖然想起來這個游戲很簡單,但如何實現(xiàn) ,還是有一定難度的。實現(xiàn)這個時針時涉及到幾個技術問題:1. 雙方如何出拳2. 如何同時出拳3. 如何判斷哪方贏了4. 如何顯示結果剪刀石頭布游戲,都是通過兩個人同時出拳,然后根據(jù)雙方出的拳,判定哪方是贏家。2.2性能需求分析準確性:在實現(xiàn)此的過程中,我們要考慮到,雙方是否能同時地出拳,還要就是如何去判斷,準確地知道哪方是贏家.簡潔性:在實現(xiàn)此的過程中,我們要考慮到,怎樣使游戲界面更簡單,讓人更容易明白它怎樣去玩。2.3程序框圖

7、游戲程序框圖如圖1所示:圖1 游戲程序框圖2.4 JAVA類及自定義類相互繼承的層次關系2.4.1 Java類及自定義類的說明自定義類:類名:SocketServer作用:服務器類繼承的父類:Thread類實現(xiàn)的接口:無類名:Service作用: 服務器類,它是判定勝負的類繼承的父類:Thread類類中成員: String data; BufferedReader inputs; PrintStream outputs; Socket client;實現(xiàn)的接口:無類名:Client作用:客戶端類類中的成員: getInputStream();getOutputStream();InputStr

8、eamReader ();readLine();實現(xiàn)的接口:無自定義類中子類和其父類的繼承關系如圖2如所示:ThreadServicegetInputStreamStartRunRandomgetOutputStreamReadline 圖2 子類及其父類繼承關系圖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;/定義套接

9、字 BufferedReader inputs = null;/讀取數(shù)據(jù) BufferedReader key = null;/緩沖數(shù)據(jù) PrintStream outputs = null;/輸出數(shù)據(jù)3程序詳細設計3.1類獲包的加載加載剪刀石頭布游戲設計中用到的類和包,用于運行主程序:import java.io.*; import .*; 3.2自定義類創(chuàng)建服務器端使用自定義類ServerSocket繼承父類Thread使用run等方法,構造函數(shù)創(chuàng)建一個服務器端。程序代碼如下:public class SocketServer extends Thread ServerSocket ser

10、ver; 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 Socket

11、Server(); 3.3創(chuàng)建數(shù)據(jù)處理類 創(chuàng)建一個用于數(shù)據(jù)處理類使服務器能準確處理數(shù)據(jù),獲取數(shù)據(jù),并使用方法run()實現(xiàn)數(shù)據(jù)處理。實現(xiàn)代碼如下:  /創(chuàng)建數(shù)據(jù)儲存變量 inputs = new BufferedReader(new InputStreamReader(client.getInputStream();outputs = new PrintStream(client.getOutputStream();  /創(chuàng)建一個Run方法 public void run() 3.4創(chuàng)建客戶端類 創(chuàng)建一個用于客戶端接收玩家輸入的數(shù)據(jù)的類,程序實現(xiàn)代碼如下

12、:     /接收客戶端的數(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

13、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

14、("請出拳:石頭/剪刀/布 "); 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測試運行 程序編寫好后,

15、用MyEclipse軟件運行,檢測程序設計結果,執(zhí)行目標程序后得到如圖4所示的窗體:圖4 程序測試圖“空格+石頭、剪刀或布”經(jīng)檢測程序運行正常。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

16、 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(Soc

17、ket socket) client = socket; try inputs=newBufferedReader(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.ran

18、dom() * 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 = "電腦是石頭,恭喜,你贏了!" el

19、se if (res = 1 && "石頭".equals(data) data = "電腦是剪刀,恭喜,你贏了!" else if (res = 1 && "剪刀".equals(data) data = "電腦也是剪刀,打平了!" else if (res = 1 && "布".equals(data) data = "電腦是剪刀,電腦贏了!" else if (res = 2 && "石頭&quo

20、t;.equals(data) data = "電腦是布,電腦贏了!" else if (res = 2 && "剪刀".equals(data) data = "電腦是布,恭喜,你贏了!" else if (res = 2 && "布".equals(data) data = "電腦也是布,打平了!" else data = "電腦不認識你出的拳" outputs.println(data); catch (IOException e) e.

21、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&q

22、uot;,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("請出拳:石頭/剪刀/布 "); data = ke

溫馨提示

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

評論

0/150

提交評論