坦克大戰項目_第1頁
坦克大戰項目_第2頁
坦克大戰項目_第3頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、坦克大戰工程分組說明工程結構說明講說者姓名工程分12個類,分別為:1.效勞器Tan kServer2. 效勞器線程 ServerThread 3效勞器代理線程ServerAge ntThread4.重繪線程Pain tThread5.客戶端Tan kClie nt 6.客戶端線程Clie ntThread7.客戶端代理線程Clie ntAge ntThread11人33 > 1人4 丿4 1人5卜1人58. 作戰地圖WarMap 6 、9. 坦克 Tank 6> 1 人10. 子彈 Bullet 7 丿11. 效勞端坦克戰斗控制ServerWar 81人12. 客戶端坦克戰斗控制C

2、lie ntWar 91人各個類的功能說明1. 效勞器 TankServer可能用到的方法:ServerWar類中的構造方法:public ServerWar(Ta nkServer father)啟動游戲方法:public void setStart(boolean start) true 為開始,false 為停止初始化坦克方法:public void in itialTa nk()設置主坦克炮口方向的方法: public void setHostDir(int direction) 1,2,3,4分別表示上下左右主坦克移動的方法: public void hostMove()Server

3、Thread 類的構造方法:public ServerThread ( TankServer father , ServerSocket ss )可能用到的對象:效勞器代理線程 ServerAgentThread 的對象效勞器代理線程 ServerAgentThread 類中的輸出流對象效勞器類中需要實現以下功能:1) 有 main 方法,使其可以運行2) 繼承 JFrame ,通過構造方法創立一個窗體。窗體標題為 TankWar Server ,圖標為默認圖標 ico.gif ,居中顯示,大小不可變。窗體用分隔條分為兩局部,左側為主面板 ServerWar (別人提供),右側 為操作面板(自

4、己寫),主面板為獲取焦點狀態。3) 右側操作面板上有端口號的標簽和文本框(默認值 9999 )、昵稱的標簽和文本 框(默認值 Player2 )、建主按鈕、開始按鈕、停止按鈕。開始按鈕和停止按 鈕初始狀態為不可用。4) 添加監聽功能。窗體:當單擊窗口的關閉按鈕時,如果沒有客戶端連接,即效勞器線程未啟動,退出程序。如果客戶端已經連接成功,即效勞器代理線程已運行,那么通過效勞代理線程的的輸出流發出離開消息,關閉代理線程,效勞線 程和連接后退出程序。右側面板中:a) 建主按鈕按下前,端口號和昵稱可輸入,開始和停止按鈕不可用。根據端口號創立 TCP 連接,如果輸入的端口號不是數字,彈出錯誤提示框,如果

5、輸入的數字不在 065535 之間,彈出錯誤提示框。以本類對象和 TCP 連接為參數,調用 ServerThread 類的構造方法創立效勞器線程。如果創 建成功,啟動線程并彈出提示框,不成功彈出提示框。建主成功后,端口 號和昵稱不能更改,停止按鈕可用,開始按鈕不可用,等待客戶端連接。b) 客戶端連接成功后,效勞器代理線程會被新建并啟動,開始按鈕被置為可 用狀態。此時,按下開始按鈕后,通過代理線程 ServerAgentThread 類中 的輸出流,向客戶端發送開始消息。調用 Server 類中的 setStart 方法開 始游戲,并將開始按鈕設置為無效狀態。c) 當效勞器代理線程未啟動時,按下

6、停止按鈕,終止效勞器線程并關閉連 接,各按鈕恢復到初始狀態,調用 ServerWar 類中的方法,停止游戲并 初始化主機坦克。如果效勞器代理線程正在運行,那么還要通過效勞器代理 線程的輸出流發出效勞端離開的消息。d) 操作面板無事件時,主面板一直為焦點獲取狀態。左側主面板:主面板一直處于焦點獲取狀態。當空格鍵處于按下狀體時,調用 ServerWar 類中的方法發射子彈。當方向鍵第一次按下時,調用 ServerWar 中的方法改 變主坦克的炮口方向,處于按下狀態時,調用 ServerWar 中的方法移動坦 克。2. 效勞器線程 ServerThread效勞器線程類需要實現以下功能:1) 有以效勞

7、器類對象和 TCP 連接作為參數的構造方法2) 在其它類中能夠控制線程的啟動啟動和停止,并能獲取客戶端是否已連接3) 線程啟動后,等待客戶端連接,有客戶端連接時,為其分配一個代理線程 并傳遞給效勞器。如果客戶端已經連接,延時監測。3. 效勞器代理線程 ServerAgentThread效勞器代理線程類需要實現以下功能:可能用到的方法:ServerWar 類中的:顯示副坦克發炮的方法 public void clientFire(int direction,int x,int y)1) 有構造器:以效勞器類對象, TCP 連接和效勞器線程對象作為參數。定義 輸入流和輸出流。2) 在其他類中能夠設

8、置線程的啟動和停止。3) 線程啟動后,能夠接受和發送信息并對接受到的信息進行判斷和處理。a) 接受到客戶端發送的昵稱信息后,在效勞器界面彈出提示框。b) 接受到客戶端離開的信息后,結束代理線程,關閉輸入輸出流,關閉連 接,反應代理線程和效勞器線程結束信息,結束游戲并在效勞器界面 彈出提示信息,初始化主機坦克。c) 接受到副坦克更新信息后,獲取信息內容并調用 ServerWar 類中的 updateClient 方法在效勞器界面更新副坦克。d) 接受到副坦克發射子彈的信息后,獲取信息內容,并調用 ServerWar 類 中的 clientFire 方法在效勞器界面顯示發射子彈。4. 重繪線程 P

9、aintThread重繪效勞器窗體5. 客戶端 TankClient客戶端類需要實現以下功能:1) 有 main 方法,使其可以運行2) 繼承 JFrame ,通過構造方法創立一個窗體。窗體標題為 TankWar Client ,圖標為默認圖標 ico.gif ,居中顯示,大小不 可變。窗體用分隔條分為兩局部,左側為主面板 ClientWar ,右側為操作面 板,主面板為獲取焦點狀態。3) 右側面板上有主機名標簽和文本框,默認為 127.0.0.1 ,端口號標簽和文本框 , 默認為 9999 ,昵稱標簽和文本框,默認為 Player 。連接按鈕和斷開按 鈕。斷開按鈕初始狀態為不可用。4) 實現

10、監聽功能:窗體:當單擊窗口的關閉按鈕時,如果沒有連接,即客戶端代理線程未啟動,退出程序。如果已經連接成功,即客戶端代理線程已運行,那么通過客戶端代理線程的的輸出流發出離開消息,關閉代理線程,效勞線程和連接 后退出程序。右側面板:a) 單擊連接按鈕時,獲取端口號并判斷。如果不是數字或者不在 065535 之間彈出提示框。獲取昵稱,如果為空,彈出提示 框。獲取主機號,根據主機號和端口號創立連接,連接成功那么調 用 ClientAgentThread 類的構造方法創立代理線程并啟動。連接 失敗時,在客戶端界面彈出提示框。b) 單擊斷開按鈕時,通過客戶端代理線程的輸出流發出離開消息并 關閉代理線程和連

11、接。結束客戶端游戲,初始化副坦克和客戶端 窗口。c) 左側主面板:空格鍵處于按下狀態時,調用 ClientWar 中的方法,使副坦克發 射子彈。方向鍵第一次按下時,調用 ClieWar 中的方法,使副坦 克炮口轉向,之后此方向鍵再次處于按下狀態時,調用 ClieWar 中的方法移動副坦克。6. 客戶端線程 ClientThread有構造方法:傳遞參數為 TankClient 類的對象可以在其他類中控制線程的啟動和停止。延時 100ms ,重繪客戶端窗口。7. 客戶端代理線程 ClientAgentThread1) 有構造器:以客戶端類對象, TCP 連接和客戶端線程對象作為參數。定義 輸入流和

12、輸出流。2) 在其他類中能夠設置線程的啟動和停止。3) 線程啟動后,能夠接受和發送信息并對接受到的信息進行判斷和處理。a) 收到效勞器離開的消息后,停止客戶端的游戲,初始化副坦克。結 束代理線程,關閉連接,初始化客戶端窗體并彈出提示框。b) 收到效勞器開始的消息,啟動客戶端游戲。c) 收到主坦克位置更新消息后,獲取消息內容并更新主機。d) 收到增加子彈消息后,獲取消息內容并增加子彈。e) 收到更新子彈位置的消息后,獲取消息內容并更新子彈。f) 收到更新敵方坦克消息后,獲取消息內容更新坦克。g) 收到刪除子彈消息后,獲取消息內容并刪除子彈。h) 收到加分消息后,獲取消息內容并加分。i) 收到減血

13、消息后,獲取消息內容并相應減血。8. 地圖 WarMap地圖為網格型。每格大小為 20*20 像素,寬 40 個網格,高 35 個網格。左上 角,右上角,左下角,右下角和中間各有一個5 格*5 格大小的障礙物區對稱分布。障礙區填充特殊顏色。坦克不可逾越障礙區和地圖邊界。9. 坦克 Tank坦克有屬性:根本屬性:1) 坦克類型:區分電腦坦克還是玩家坦克2) 坦克編號:區分主坦克,副坦克和電腦坦克3) 坦克的移動速度4) 坦克炮口方向:子彈從坦克炮口位置發出5) 坦克的顏色6) 坦克的血量7) 坦克的當前位置其它屬性:坦克的生存狀態:活著或死亡坦克的得分:主坦克和副坦克分別統計類中包含的方法:1)

14、 根本屬性的全屬性構造方法,所有屬性的 get 方法和除類型、編號外的屬 性的 set 方法。2) 坦克移動的方法:朝坦克當前方向做水平或豎直的二維移動3) 繪制坦克的方法:坦克由一個主體、一個蓋子、兩排輪子和一個炮筒組成。主體為四角為圓角的矩形。蓋子在主體中間,為帶填充顏色的圓角矩形。炮筒為連接在坦克短邊的帶填充顏色的矩形。兩排輪子對稱分布在主體長邊兩側,由數個 帶填充顏色的小圓串成。主坦克、副坦克和電腦坦克的主體用三種不同顏色加以區分。坦克的方向與炮筒所在方向一致。坦克在朝向不同方向時,輪子呈現不同 顏色。4) 獲取坦克當前所占位置的方法5) 獲取坦克移動后所占位置的方法10. 子彈 Bu

15、llet屬性:1) 子彈的編號。每個子彈一個編號2) 子彈所屬坦克的編號。3) 子彈的類型。子彈分玩家坦克和電腦坦克兩類4) 子彈的方向。上下左右5) 子彈的速度。6) 子彈的殺傷力7) 子彈的起始坐標位置。起始位置必須在炮口處,所以用發射子彈坦克的位置做基準位。8) 子彈存在狀態。存活顯示,不存活就不顯示構造器:1) 用于副坦克子彈的,需要子彈編號和子彈起始位置作參數2) 用于主坦克子彈的,需要除存活狀態外的其它屬性做參數。方法:1) 子彈編號、歸屬、類型、方向、殺傷力和起始位置的 get 方法2) 子彈起始位置的 set 方法3) 子彈繪制生成的方法4) 子彈向上下左右運動的方法5) 獲取

16、子彈所在矩形(炮筒)的 get 方法11. 效勞端坦克戰斗 ServerWar構造方法:以 TankServer 類對象做參數,啟動效勞端窗體實時重繪線程并初始化坦克。方法:1) 初始化坦克通過 Tank 類構造方法,創立主坦克,副坦克和五個電腦坦克。主、副坦 克在地圖下方中間位置,炮口向上。三個電腦坦克分列在地圖最上方,炮 口向下,另外兩個分居左右,炮口互對。2) 有向客戶端發送消息的方法3) 有判斷子彈是否擊中物體的方法a) 子彈擊中障礙物、地圖邊界或敵方坦克,子彈消失b) 同陣營的坦克子彈能夠穿越坦克繼續移動c) 電腦坦克擊中主副坦克后,主副坦克的血量減少d) 將以上信息發送給客戶端,實

17、現畫面根本同步。4) 獲取一個隨機位置的方法。隨機選取五個位置中的一個,用于生成電腦坦 克。如果該位置有坦克那么更換隨機位置。當前電腦坦克小于五個時那么隨機 生成。5) 判斷坦克是否可以移動的方法坦克遇到障礙物、地圖邊界或其他坦克時不能繼續向前移動。6) 主坦克發射子彈的方法、副坦克發射子彈的方法和電腦坦克發射子彈的方 法。生成子彈并向客戶端發送子彈信息。7) 設置主坦克方向的方法和判斷主坦克是否能夠開始移動的方法8) 更新副坦克位置和方向的方法9) 效勞端游戲繪制方法。a) 游戲開始后,繪制地圖,繪制主副坦克并向客戶端發送主坦克信息。b) 繪制電腦坦克,電腦坦克隨機改變方法,按一定概率發射子

18、彈,可以移 動時不間斷移動,不能移動時隨機改變方向。并向客戶端發送電腦坦 克的信息。c) 空格鍵處于按下狀態時生成子彈并使其移動,子彈接觸到障礙物、地圖 邊界或敵方坦克后消失。并實時把子彈信息傳遞給客戶端。d) 游戲沒有開始時,只繪制地圖和主副坦克及電腦坦克。e) 繪制主坦克和副坦克的血量條并按戰斗情況統計改變血量,主副坦克血 量為 0 時結束游戲,彈出游戲結束提示并向客戶端發送信息。12. 客戶端坦克戰斗 ClientWar構造方法:以 TankServer 類對象做參數,啟動效勞端窗體實時重繪線程并初始化坦克。方法:1) 初始化坦克通過 Tank 類構造方法,創立主坦克,副坦克和五個電腦坦克。主、副坦 克在地圖下方中間位置,炮口向上。三個電腦坦克分列在地圖最上方,炮 口向下,另外兩個分居左右,炮口互對。2) 客戶端繪制方法a) 游戲開始后,繪制地圖,繪制主副坦克并向客戶端發送主坦克信息。b) 繪制電腦坦克,電腦坦克隨機改變方法,按一定概率發射子彈,可以移 動時不間斷移動,不能移動時隨機改變方向。并向客戶端發送電腦坦 克的信息。c) 空格鍵處于按下狀態時生成子彈并使其移動,子彈接觸到障礙物、地圖 邊界或敵方坦克后消失。并

溫馨提示

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

評論

0/150

提交評論