基于java語言的網絡聊天系統開發與實現_第1頁
基于java語言的網絡聊天系統開發與實現_第2頁
基于java語言的網絡聊天系統開發與實現_第3頁
基于java語言的網絡聊天系統開發與實現_第4頁
基于java語言的網絡聊天系統開發與實現_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、摘要編程語言從機器語言,匯編語言,再到現在的高級語言,一步步發展到現在已經形成了一個完善語言的體系。就像是各個國家都有自己的語言一樣,編程語言也有許多不同的語言,而每種語言的出現都是為了迎合不同的需求,也都有自己獨特的語言魅力,Java也不例外,它的出現迎合了人們對應用程序跨平臺運行的需求。而且Java現在是全球流行的開發工具之一,它擁有了一套龐大且完善的類庫,內置了其他語言需要靠庫甚至是操作系統才能支持的功能,擁有一個虛擬機。本文在開始先對Java語言做了初步的介紹,即針對Java的特點做了詳細的描述,同時也針對Java程序的運行機制做了描述;開發環境做了簡單的介紹。接下來是對編寫的軟件的描

2、述,對Java API的應用,對Java語言的繼承、方法的重寫、接口和抽象類的使用。 緒論第一章系統開發環境1.1開發工具1.2應用環境第二章系統需求分析2.1需求分析2.2可行性分析第三章系統概要設計3.1設計目標3.2系統功能模塊第四章系統詳細設計4.1程序設計4.2各功能界面截圖第五章系統測試5.1測試的意義5.2測試過程5.3測試結果第六章總結參考文獻緒論Java語言簡介Java的發展和歷史Java的誕生得益于對家用電器的芯片的研制,開始時,開發者想用C+語言來開發電器的芯片,但是,由于芯片的種類各不相同,因此,程序要進行多次編譯。尤其是C+中的指針操作,稍有不慎,就會出現問題。程序可

3、以出錯,但是家用電器不能出錯誤,為此,開發者將C+語言進行簡化,去掉指針操作,去掉運算符重載,去掉C+中的多繼承,得到了Java語言,將它變成了一種解釋執行的語言,并在每個芯片上裝上一個Java虛擬機。剛開始時,Java語言被稱為Oak語言(橡樹語言)Java語言現在逐漸成熟起來,它的類也已經進千個了,而且還可以通過第三方購買中間件,為Java語言的發展提供了良好的發展前景,同時它也是跨平臺的語言,因此許多軟件開發商及硬件開發商也爭先恐后地想搭上Java語言的快車,都聲稱支持Java語言,它對微軟發起了有力的挑戰,而且Sun公司正努力開發Java芯片Java語言的特點Java是一種簡單的,面向

4、對象的,分布式的,健壯的,安全的,與平臺無關的,多線程的,高性能的,動態程序設計語言。1. 簡單易學Java語言雖起源于C+,但是去掉了C+語言中難于掌握的指針操作,內存管理非常簡單,如果要釋放內存資源,你僅需要讓其對象的引用等于null,這樣就使操作變得異常簡單2. 面向對象Java語言是面向對象的編程語言。面向對象技術很好的解決了當今軟件開發過程中新出現的種種傳統的面向過程語言所不能處理的問題,包括軟件開發的規模擴大,升級加快,維護量增大以及開發分工日益細化,專業化和標準化等。面向對象技術的核心是以更接近于人類思維的方式建立計算機模型,它利用類和對象的機制將數據與其上的操作封裝在一起,并通

5、過統一的接口與外界交互,是反映現實世界實體的個各類在程序中能夠獨立、自治和繼承。3. 分布式Java包括一個支持HTTP(超文本傳輸協議)和FTP(文件傳輸協議)等基于TCP/IP協議的子庫,因此,Java應用程序可憑借URL(統一資源定位符)打開并訪問網絡上的對象,其訪問方式與訪問本地文件系統幾乎完全相同。為分布式環境尤其是Internet提供了動態內容,無疑是一項非常宏達的工程,但是Java的語法特性可以很容易實現這項目標。4. 健壯性Java致力于檢查程序在編譯和運行時的錯誤。類型檢查可以檢查出許多開發早期出現的錯誤。Java自行操作內存,減少了內存錯誤的可能性。Java還實現了真數組,

6、避免了覆蓋數據的可能。這些功能特征大大縮短了開發Java應用程序的周期。Java提供null指針檢測數組邊界,進行異常出口字節代碼校驗。5. 安全穩定對網絡上應用程序的另一個要求是較高的安全可靠性。用戶通過網絡獲取并在本地運行的應用程序必須是可信賴的,不會充當病毒或者其他惡意操作的傳播者而攻擊本地的資源,同時它還應該是穩定 的,輕易不會產生死機等錯誤,使得用戶樂意使用。6. 平臺無關Java語言獨特的運行機制使得它具有良好的二進制的可移植性,利用Java,開發人員可以編寫出與具體平臺無關,普遍適用的應用程序,大大降低了開發、維護和管理的開銷,也就是一次編譯,隨處運行。7. 支持多線程多線程是當

7、今軟件開發技術的又一重要成果,已成功應用在操作系統和應用開發等多個領域。多線程技術允許同一個進程有兩個或兩個以上的執行線索,即同時做兩件或多件事情,滿足了一些復雜軟件的需求。Java不但內置多線程功能,而且定義了一些用于建立、管理多線程的類和方法,使得開發具有多線程功能的程序變得簡單、容易和有效。8. 高性能如果解釋器的速度快,Java可以在運行時直接將目標代碼翻譯成機器指令。Sun用直接解釋器一秒鐘內可調用300 000個過程。翻譯目標代碼的速度與C+的性能沒什么區別。9. 動態性Java的動態性是其面向對象設計方法的擴展,它允許程序動態地裝入運行過程中所需要的類。Java編譯器將符號引用信

8、息在字節碼中保存下來并傳遞給解釋器嗎,再由解釋器完成動態連接類后,將符號引用信息轉換為數值偏移量。這樣,一個在存儲器生成的對象不在編譯過程中決定,而是延遲到運行時有解釋器確定,這樣對類中的變量和方法進行更新時就不至于影響現存的代碼。解釋執行字節碼時,這種符號信息的查找和轉換過程進在一個新的名字出現時才進行一次,隨后代碼便可以全速執行。在運行時確定引用的好處是可以使用已被更新的類,而不必擔心會影響原有的代碼。Java平臺簡介1998年12月,Sun發布了Java2平臺JDK 1.2,這時Java發展是上的里程碑。1999年6月,Sun公司重新組織Java平臺的集成方法,并將Java企業級應用平臺

9、作為發展方向。2004年,Sun發布JDK1.5更名為JDK5.0.2006年底,Sun再度推出JDK1.6(JDK6.0)。如今,Java家族也已經有四個主要成員:J2SE(Java 2 Standard Edition)用于工作站、PC機的Java標準平臺,現改名為JavaSE;J2EE(Java 2 Enterprise Edition)可擴展的企業級應用平臺,現改名為JavaEE;J2ME(Java 2 Micro Edition)嵌入式電子設備Java應用平臺,現改名為JavaME;JavaFX是一種聲明式的靜態類型編程語言,專為喜歡在可視化編程中的Web腳本人員和應用程序開發人員量

10、身定做,是Java新成員Java程序的運行機制和Java虛擬機(JVM)Java語言比較特殊,由Java語言編寫的程序需要經過編譯步驟,但是這個編譯步驟并不會生成特定平臺的機器碼,而是生成一種與平臺無關的字節碼文件(也就是.class文件)。當然,這種字節碼文件不是可執行的,必須使用Java解釋器來解釋執行。因此,我們可以認為:Java語言既是編譯型語言,也是解釋型語言。或者說,Java語言既不是純粹的編譯型語言,也不是純粹的解釋型語言。Java程序的執行過程必須經過先編譯,后解釋兩個步驟,Java語言里負責解釋執行字節碼文件的是Java虛擬機,即JVM(Java Virtual Machin

11、e)。JVM是可運行JAVA字節碼文件的虛擬計算機。所有平臺的JVM向編譯器提供相同的編譯接口,而編譯器只需要面向虛擬機,生成虛擬機能理解的代碼,然后由虛擬機來解釋執行。在一些虛擬機的實現中,還會將虛擬機代碼轉換成特定系統的機器碼執行,從而提高執行效率。JVM是一個抽象的計算機,和實際的計算機一樣,它具有指令集并使用不同的存儲區域。它負責執行指令,還要管理數據、內存和寄存器Java開發環境搭建首先進行JDK的安裝,下載JDK安裝包解壓后進行環境變量的配置,配置步驟如下:右擊桌面上“我的電腦”圖標,出現右鍵菜單;單擊“屬性”菜單項,出現“系統屬性”或“高級系統設置” 對話框;單擊該對話框的“高級

12、”選項,出現如圖2所示的對話框。單擊“環境變量”按鈕,將看到如圖3所示的“環境變量”的對話框,通過該對話框可以修改或添加環境變量。圖2圖3第一章系統開發環境1.1開發環境Sun Microsystems公司在推出Java語句的同時,推出了一套開發工具JDK。Sun提供的基于字符模式的Java開發工具包JDK:Java開發工具(JDK)是許多Java專家最初使用的開發環境。Java是平臺無關的語言是指用Java寫的應用程序不用修改就可以在不同的軟硬件平臺上運行。Java源程序編寫可以借助于記事本,Editplus,UltraEdit等第三方編輯工具。所有的Java文件編輯、編譯、調試、解釋運行都

13、是通過使用字符命令來執行操作。JDK由一個標準庫和一組建立、測試及建立文檔的Java實用程序組成。其核心Java API是一些預定義的類庫,開發人員需要使用這些類來訪問Java語言的功能。JDK是整個Java的核心,包括了Java運行環境,一堆Java工具和Java基礎的類庫。不論什么Java應用服務器實質都是內置了某個版本的JDK。因此掌握JDK是學好Java的第一步。JDK里面是Java類庫和Java的語言規范,它提供的是無論是用何種開發軟件寫java程序都必須用到類庫和java語言規范,沒有JDK,你的java程序根本就不能用。最主流的JDK是Sun公司發布的JDK,除了Sun之外,還有

14、很多公司和組織都開發了自己的JDK,例如IBM公司開發的JDK,BEA公司的Jrocket,還有GNU組織開發的JDK等待,其中IBM的JDK包含的JVM運行效率要比Sun的JDK包含的JVM高出許多。而專門運行在X86平臺的Jrocket在服務端運行效率也要比Sun的JDK好很多。但是不管怎么說,還是需要把Sun的JDK掌握好。但是在這里我借助的是一個編程軟件MyEclipse來完成程序的編寫與調試的1.2應用環境操作系統:Windows 7應用環境:JDK 1.6應用軟件:Myeclipse第二章系統需求分析2.1需求分析游戲簡介:游戲中玩家通過鼠標來移動自己的飛機,打掉飛機或蜜蜂會獲得分

15、數和獎勵,打掉一架飛機獲得5分,打掉一只蜜蜂獲得隨機獎勵:一條命或者40次雙倍火力,如果撞上敵機或蜜蜂,則會失去生命,同時雙倍火力清零。每撞到一次就生命值減1,當生命值為0時,游戲結束shoots要滿足以下幾點要求:1. 鼠標點擊界面游戲開始2. 鼠標移出界面游戲暫停再次移入繼續開始3. 飛機跟隨鼠標指針移動4. 打掉飛機就分值增加,打掉蜜蜂就獎勵生命值或者雙倍火力2.2可行性分析Shoots游戲是一種簡單的大眾游戲,在實現游戲的過程中你需要對子彈與敵機或蜜蜂的碰撞做出判斷,判斷的處理可以由坐標的范圍來完成;如果碰撞就要做刪除處理,通過記錄碰撞的對象(對象是存放在數組中的)的下標可以對它進行刪

16、除操作;以及在它們越界(超出畫板范圍的那些敵機和蜜蜂)后對它們要刪除;因為敵機和蜜蜂是不斷生成的,會越來越多,而存放它們的是一個數組,這個數組不是固定的長度,會隨著敵機和蜜蜂的數量的增加而進行擴容,所以如果不對越界的敵機和蜜蜂進行處理,數組會越來越大,從而占有更多的存儲空間,而游戲運行也越來越慢;另外實現子彈、敵機和蜜蜂的自動移動,需要對存放它們的數組遍歷然后對每一個存放的對象的坐標屬性進行加減操作;而用鼠標來操作飛機就需要用到與鼠標移動相關的觸發事件,在鼠標的點擊,滑動,移出面板,移入面板同樣都有與之相關的鼠標事件,通過這些事件來實現暫停,運行。選擇使用Java語言,一方面是接觸的多,另一方

17、面是Java是一種跨平臺的,適合于分布式計算機環境的面向對象編程語言,用Java寫的應用程序不用修改就可在不同的軟硬件平臺上運行。第三章系統概要設計3.1設計目標可以利用鼠標移動戰機,鼠標移出游戲面板游戲暫停,鼠標再次移入游戲面板游戲開始,還要隨機的產生敵機和蜜蜂,生命值為零結束游戲。3.2系統功能模塊1.類與類之間的關系包括一個源文件,五個類和兩個接口圖3.12.java源文件及其功能編號文件名功能1ShootGame該文件是程序入口,包含main方法和實現各種具體操作的方法2FlyingObject抽象父類,將Hero、Airplane、Bee、Bullet中共有的屬性抽出來放在里面 3H

18、ero 4Airplane表示敵機,繼承FlyingObject類,實現Enemy接口,提供移動的屬性與方法 5Bee表示蜜蜂,繼承FlyingObject類,同時實現Award接口,提供蜜蜂移動的方法 6Bullet表示子彈,繼承FlyingObject類,提供移動的方法 7Enemy表示敵人的接口,提供獲取分數方法 8Award表示獎勵的接口,提供獲取獎勵類型(雙倍活力或生命值)的方法3.數據建模:使用一個數據模型,描述對象的關系,使用繪圖坐標系作為參考模型,英雄機、敵機、蜜蜂以及子彈都是矩形區域,如下圖所示:以英雄機為例標示出數據x、y、width以及height所表示的位置。敵機、蜜蜂

19、、子彈以及英雄機的這四個屬性類似的第四章系統詳細設計4.1程序設計1.主類ShootGame(1)成員變量成員變量描述變量類型變量名稱面板寬面板高啟動狀態運行狀態暫停狀態游戲結束狀態記錄當前狀態背景圖片開始圖片暫停圖片游戲結束圖片敵機圖片蜜蜂圖片子彈圖片英雄機圖片0英雄機圖片1英雄機對象敵人數組(敵機+小蜜蜂)子彈數組定時器時間間隔(毫秒)敵人入場計數子彈入場計數得分int intintintintintint BufferedImage BufferedImage BufferedImage BufferedImage BufferedImage BufferedImage Buffered

20、Image BufferedImage BufferedImage HeroFlyingObjectBullet Timerint intintint WIDTH HEIGHTSTART RUNNINGPAUSE GAME_OVERstate backgroundstartpausegameoverairplanebeebullethero0hero1hero flyingsbullets timer; intervelflyEnteredIndexshootIndexint score(2)方法方法描述方法名稱隨機生成敵人對象敵人入場飛行物走一步子彈入場(英雄機發射子彈)所有子彈和所有敵人碰

21、撞一顆子彈和所有敵人碰撞刪除越界的敵人和子彈 檢查游戲結束啟動執行重寫paint() g:畫筆畫狀態畫分和畫命畫英雄機對象畫敵人對象畫子彈對象 nextOne()enterAction()stepAction()shootAction()bangAction()bang(Bullet b)outOfBoundsAction()checkGameOverAction()action()paint(Graphics g)paintState(Graphics g)paintScore(Graphics g)paintHero(Graphics g)paintFlyingObjects(Graphi

22、cs g)paintBullets(Graphics g)2.主類ShootGame中的main方法(1).主類的main為程序入口,定義了游戲窗口的的大小、居中,點擊右上角“x”關閉窗口以及設置窗口的可見性還調用了啟動游戲的方法action()3.抽象父類FlyingObject由圖3.1可以分析出英雄機、敵機、子彈以及蜜蜂都有x、y、width以及height屬性,因此,將這些屬性抽象到父類FlyingObject中。另外,它們在界面上都是以圖片的形式顯示,因此在父類FlyingObject中,添加image屬性,表示它們的貼圖;由于蜜蜂和敵機都可以被子彈擊中,因此在FlyingObjec

23、t類中添加shootBy方法,該方法的參數為子彈類型。下圖是以蜜蜂為例,說明子彈被擊中的算法。代碼如下:/*敵人被子彈打,this:敵人;bullet:子彈*/publicboolean shootBy(Bullet bullet)/找出敵機的四個角的坐標int x1 = this.x;int x2 = this.x+this.width;int y1 = this.y;int y2 = this.y+this.height;/找出子彈坐標int x = bullet.x;int y = bullet.y;return xx1 & xy1 & yShootGame.HEIGHT; 7.類Bee

24、,表示蜜蜂繼承FlyingObject,重寫了Step方法,實現Award接口,蜜蜂可以左右和向下移動,故含有移動速度的屬性和越界的判斷,代碼如下:package shoots;import java.util.Random;publicclass Bee extends FlyingObject implements AwardprivateintxSpeed = 1;privateintySpeed = 2;privateintawardType;public Bee()image = ShootGame.bee;width = image.getWidth();height = imag

25、e.getHeight();Random rand = new Random();x = rand.nextInt(ShootGame.WIDTH-this.width);y =-this.height;awardType=rand.nextInt(2);publicint getType()returnawardType;publicvoid step()x += xSpeed;y += ySpeed;if(x=ShootGame.WIDTH-this.width)xSpeed = -1;if(xShootGame.HEIGHT; 8.類Bullet,表示子彈繼承FlyingObject,重

26、寫了step方法,定義了越界的判斷方法,代碼如下:package shoots;publicclass Bullet extends FlyingObject privateintspeed = 3;public Bullet(int x, int y)image = ShootGame.bullet;width = image.getWidth();height = image.getHeight();this.x = x;this.y = y;publicvoid step()y -= speed;publicboolean outOfBounds()returnyx1 & hxy1 &

27、hy0)/雙倍火力Bullet bullets = new Bullet2;bullets0 = new Bullet(this.x+xstep,this.y-ystep);bullets1 = new Bullet(this.x+3*xstep,this.y-ystep);doubleFire -= 2;/火力減2return bullets;else /單倍火力Bullet bullets = new Bullet1;bullets0 = new Bullet(this.x+2*xstep,this.y-ystep);return bullets;10.主類ShootGame由于主類要實現

28、畫板的功能,所以繼承了JPanel,在該類中,使用靜態常量定義面板的寬和高,并使用ImageIO的read方法加載圖片;界面繪制過程如下:(1).在該類中添加FlyingObject類型的屬性flyings,用于存儲射擊游戲的所有敵機和蜜蜂;(2).添加Bullet類型的屬性bullet,用于存儲射擊游戲中的所有子彈;(3).添加Hero類型的屬性hero,表示英雄機;(4).添加paintHero方法、paintBullets方法、paintFlyingObject方法,分別用于實現在面板上畫英雄機、子彈、敵機、蜜蜂;并重寫paint方法,在該方法中調用上述三個方法;(5).添加構造初始化屬

29、性flyings、bullets以及hero;(6).重構Airplane類Bee類,設置固定的x、y坐標位置,以便顯示查看。另外在該類中定義了許多的方法,關鍵方法的詳細功能及實現如下:1).shootAction()方法,實現每次調用20次該方法發射一次子彈,并將發射的子彈存儲到bullets數組中2).bangAction方法和bang方法,這兩個方法實現了子彈與飛行物(蜜蜂或敵機)的碰撞檢測,詳細過程如下:(1).循環遍歷存儲所有子彈的數組bullets;(2).在上述循環中,再次使用循環,遍歷存儲所有飛行物的數組flyings,在該循環中判斷當前子彈是否擊中某個飛行物,如果擊中則退出循

30、環,記錄被擊中的飛行物在flyings數組中的索引index;(3).在flyings數據中找到該飛行物,并將其移除;(4).判斷該飛行物的類型是Emeny還是Award,如果是Enemy類型,則獲取加分;如果是Award類型,則獲取獎勵(5).獲取獎勵的類型,如果是獎勵的類型為DOUBLE_FIRE,則獲得40次雙倍活力;如果獎勵類型是LIFE,則獎勵生命值,3).outOfBoundsAction方法,該方法用于刪除越界飛行物以及子彈,詳細實現過程如下:(1).創建FlyingObject類型的數組flyingLives,用于存儲所有活著的飛行物(蜜蜂和敵機),即沒有越界的飛行物;(2).

31、循環遍歷存儲所有飛行物的數組flyings,并判斷每一個飛行物是否越界,將沒有越界的飛行物放入flyingLives數組中存儲,并記錄不越界飛行物的個數index;(3).將flyingLives數組中的元素,復制到flyings數組中,并重新指定flyings數組的長度index;(4).刪除子彈與刪除飛行物的過程類似。4).isGameOver方法,該方法用于判斷游戲是否結束,方法實現的詳細過程如下:(1).循環遍歷存儲所有飛行物(蜜蜂和敵機)的數組flyings(2).在循環中,判斷英雄機是否與飛行物發生碰撞,如果發生碰撞,則減生命值、雙倍火力清零,記錄被撞飛行物在flyings數組中的索引index,該索引默認是-1,即沒有發生碰撞;(3).判斷index是否為-1,如果不為-1,將該索引位置的元素從flyings數組中清除;(4).判斷生命值是否小于等于0,并返回比較結果4.2各功能界面截圖1.Shoots游戲的基本運行界面(1)初始界面(2).程序開始運行界面鼠標點擊游戲界面,游戲開始;移動鼠標可以操作英雄機(3).鼠標移出游

溫馨提示

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

評論

0/150

提交評論