java網(wǎng)絡課程設計---網(wǎng)絡斗地主說明書_第1頁
已閱讀1頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設 計 說 明 書</p><p><b>  網(wǎng)絡編程課程設計</b></p><p><b>  系統(tǒng)設計</b></p><p><b>  目標設計</b></p><p>  本次課程設計要求我們 按照網(wǎng)絡編程的基本原理,綜合運用所學的知

2、識,以小組為單位,設計開發(fā)一個基于網(wǎng)絡的游戲應用網(wǎng)絡斗地主。通過對該系統(tǒng)的分析、設計與實現(xiàn),將原理與應用相結(jié)合,使我們能夠?qū)W會如何把書本上學到的知識用于解決實際問題,培養(yǎng)動手能力;另一方面,使我們能深入理解和靈活掌握教學內(nèi)容。</p><p>  按照網(wǎng)絡協(xié)議規(guī)范,需要采用套接字方式,建立基于網(wǎng)絡的游戲應用。并且,我們將會提供新建游戲和加入游戲功能;用戶登陸后可以創(chuàng)建新游戲或加入已有游戲,通過客戶端與其它游戲用戶

3、對弈;程序需要采用多線程方式來確保程序功能的正確實現(xiàn),我們還要保證本程序操作方便、界面友好。</p><p>  1.2 開發(fā)和運行環(huán)境</p><p>  開發(fā)工具:MyEclipse</p><p>  運行環(huán)境: Windows xp</p><p>  1.3 本人主要工作</p><p>  負責設計網(wǎng)絡斗地

4、主的出牌規(guī)則處理和游戲運行時游戲邏輯部分,按照網(wǎng)絡編程的協(xié)議的規(guī)范,實現(xiàn)服務器上對上線用戶的偵聽,以及對多客戶端的支持和對于所有用戶出牌進行規(guī)則判斷和對用戶有些行為進行處理。在該部分設計中,應注意一些應有的常識性功能是如何實現(xiàn)的。還要保證協(xié)議和邏輯的正確性與合理性。</p><p>  網(wǎng)絡斗地主系統(tǒng)概要設計</p><p>  網(wǎng)絡斗地主是采用網(wǎng)絡協(xié)議為TCP/IP的網(wǎng)上對弈游戲,

5、60;運用 “客戶端-服務器 “(c/s) 網(wǎng)絡架構(gòu)模式。實現(xiàn)用戶通過Internt連接在任何地方與不同玩家進行對戰(zhàn)。用戶運行游戲后新建游戲,則該用戶即成為服務器端和客戶端的混合體,其他用戶通過加入游戲時的ip和端口來連接服務器。 通過使用多線程和網(wǎng)絡套接字SOCKET來實現(xiàn)游戲之間的通訊, 它是基于點對點的通 訊。開始讓服務器初始化建立服務器套接字SOCKET,基于某個端口P

6、ORT,服務器始終處 于監(jiān)聽狀態(tài)??蛻舳耸莿幼鞯陌l(fā)起者,何時發(fā)出申請由客戶端決定??蛻舳讼蚍掌靼l(fā) 出申請,服務器給予響應。打開客戶端套接字SOCKET,連接到服務器端的地址ADDRESS 和端口PORT。連接建立后,創(chuàng)建一個SOCKET實例,并開始一個線程,監(jiān)聽該客戶端請 求。服務器繼續(xù)監(jiān)聽其它用戶的連接。服務器通過數(shù)據(jù)輸入流從客戶端接收信息,并且 通過數(shù)據(jù)輸出流把相應的信息發(fā)送給客戶

7、端。 客戶端發(fā)送請求和響應接收到的各種信息。 在服務器和客戶端之間傳遞的消息格式是采用“[消息類別]+內(nèi)容“組成的,服務器和客戶端在傳遞消息的過程,根據(jù)消息的類別來進行相關的操作。</p><p>  2.1系統(tǒng)功能模塊設計</p><p>  本工程包含只包含controller,model,view三個包。其中controller包中有客戶端和服務器端模塊,mode

8、l包負責具體牌局規(guī)則的邏輯承載(如:派牌,比較大小,判斷用戶出牌出牌是否符合規(guī)則),view包具體的客戶端的界面。</p><p><b>  表1 模塊劃分表</b></p><p><b>  2.2系統(tǒng)流程圖</b></p><p><b>  圖1 系統(tǒng)流程圖</b></p>&

9、lt;p>  3.網(wǎng)絡斗地主系統(tǒng)詳細設計</p><p>  3.1 Poker.java</p><p>  該類為撲克牌類,定義撲克牌具有花色,大小,id號,以及對應的圖片 其中id號是每一張牌的唯一標示,從系統(tǒng)自動分發(fā)撲克,到網(wǎng)絡傳輸,甚至界面響應都用到的是撲克牌的id,在需要用到撲克牌的其他屬性的地方,以id為參數(shù)構(gòu)造一張撲克牌,撲克牌的所有信息存儲在"data/g

10、amedata"文件夾下,對應圖片 存放在"res/cards"文件夾下</p><p>  private Integer id;</p><p>  private Integer value;</p><p>  public Poker(Integer id) {</p><p>  this.id =

11、id;</p><p>  if (id == 0) {this.value = 0;</p><p>  } else if (id == 53) {</p><p>  this.value = 499;</p><p>  } else if (id == 54) {this.value = 500;</p><p&

12、gt;  } else if (id > 0 && id < 53) {this.value = (id - 1) / 4 + 3;</p><p><b>  }}</b></p><p><b>  @Override</b></p><p>  public int compareTo(P

13、oker o) {</p><p>  return this.value.compareTo(o.value);}</p><p><b>  @Override</b></p><p>  public boolean equals(Object obj) {</p><p>  Poker poker = (Pok

14、er) obj;</p><p>  if (this.value.equals(poker.value)) {return true;</p><p>  } else {return false; }}</p><p>  public Integer getId() {return id;}</p><p>  public Integ

15、er getValue() {return value;</p><p><b>  }}</b></p><p>  3.2 PokerRules.java</p><p>  該類用于承擔用戶在進行游戲時對用戶所出牌進行大小比較和規(guī)則判斷。</p><p>  public static Boolean canS

16、end(Vector<Poker> lasttime, Vector<Poker> thistime) {</p><p>  if (lasttime.size() == 0) {</p><p>  if (judgePokerType(thistime) != 0) {</p><p>  return true; } else {re

17、turn false; }}</p><p>  else { if (judgePokerType(lasttime) == judgePokerType(thistime)) {</p><p>  if (getMainPokerValue(thistime) > getMainPokerValue(lasttime)) {return true; }else {return

18、false;}}</p><p>  else if (judgePokerType(thistime) == 37) {</p><p>  return true;} else {return false; }}}</p><p>  3.3 GamePanel.java</p><p>  此類為游戲主頁面模塊,用戶再進行游戲時進行的

19、所有操作都由此類承擔。</p><p>  private int distant = 20; </p><p>  private int height = 600;</p><p>  private Boolean isMyTurn = false;// 是否輪到當前玩家出牌</p><p>  private Vector<In

20、teger> lastpokerIDVector = new Vector<Integer>();</p><p>  private Vector<JLabel> lastPokerLabelVector = new Vector<JLabel>(); </p><p>  private Vector<Poker> lastSend

21、edPokerVector = new Vector<Poker>(); </p><p>  private JButton[] lordChooseButton = new JButton[2]; </p><p>  private JLabel lordLabels[] = new JLabel[3];// 地主頭像顯示標簽</p><p>  

22、private Vector<Integer> mypokerIDVector = new Vector<Integer>();</p><p>  private Vector<PokerLabel> myPokerLabelVector = new Vector<PokerLabel>(); </p><p>  private Vect

23、or<JLabel> mySendPokerLabelVector = new Vector<JLabel>(); </p><p>  private JButton notSendButton;// 不出按鈕</p><p>  private Integer notSendNum = 2;// 放棄出牌的玩家的個數(shù)</p><p>  

24、private ObjectOutputStream oos;</p><p>  private Vector<JLabel> otherSendPokerLabelVector = new Vector<JLabel>(); </p><p>  private Vector<Integer> player1pokerIDVector = new V

25、ector<Integer>();</p><p>  private Vector<JLabel> player1PokerLabelVector = new Vector<JLabel>(); </p><p>  private Vector<Integer> player2pokerIDVector = new Vector<I

26、nteger>();</p><p>  private Vector<JLabel> player2PokerLabelVector = new Vector<JLabel>(); </p><p><b>  4.系統(tǒng)測試</b></p><p>  游戲開始后,但沒有單獨的界面顯示:</p>&

27、lt;p>  圖2.測試信息游戲開始</p><p><b>  圖3 游戲正式開始</b></p><p><b>  圖4 游戲進行中</b></p><p>  圖5 游戲中過牌操作</p><p><b>  圖6 游戲結(jié)束</b></p><

28、p><b>  5.個人體會</b></p><p>  本次網(wǎng)絡編程課程設計,經(jīng)過最初的短期培訓,是我對曾經(jīng)學習過但未很好地掌握的JAVA編程有了一個更具體的認識,并且能夠簡單理解程序編制的基本過程與常用類和方法。相比從前,對于編程的認識有了很大的進步。通過接下來三周的關于網(wǎng)絡五子棋程序的開發(fā)和學習,我更好地實踐了記憶中并未很好掌握的相關知識和技能,對包括套接字,線程等內(nèi)容有了更好的

29、理解??梢赃M行簡單的程序閱讀與編譯,提升了自身的能力與技能。相信在以后的工作學習生活中,我能夠更好地掌握相關技能并增加一技之長。</p><p>  對于本次網(wǎng)絡編程課程設計,我感到自己的提升很大。對于自身的能力有了一個更好的認知。并且讓我能夠更好地面對未來的工作生活。對于JAVA技術的基礎掌握也比從前更加扎實與熟練。本次網(wǎng)絡斗地主系統(tǒng)雖然有一些基本功能未能很好地實現(xiàn),但是我們已經(jīng)盡了自己很大的努力,也得到了自身

溫馨提示

  • 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

提交評論