




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、畢業設計(論文)任務書 第1頁畢業設計(論文)題目:基于java的魔塔游戲的設計與及實現畢業設計(論文)要求及原始數據(資料):1了解和運用Java面向對象的特性;2熟練掌握模塊化設計的思想,鍛煉使用java語言的能力;3深入分析魔塔游戲的關鍵技術與編寫語言;4深入了解魔塔游戲各個模塊的具體功能;5設計魔塔游戲的各個功能模塊以及模塊之間的關系;6實現魔塔游戲各個功能模塊;7訓練檢索文獻資料和利用文獻資料的能力;8訓練撰寫技術文檔與學位論文的能力。第2頁畢業設計(論文)主要內容:1綜述魔塔游戲的項目背景及功能;2深入分析基于java的魔塔游戲的關鍵技術與編寫語言;3了解基于java的魔塔游戲的相
2、關技術;4熟悉基于java的魔塔游戲的開發環境; 5設計魔塔游戲的功能模塊以及關系;6對基于java的魔塔游戲的功能模塊進行編寫;7對功能模塊進行整合并進行測試;8對測試結果進行分析,并對相關部分代碼進行修改;9對完整的基于java的魔塔游戲的運行結果記錄。學生應交出的設計文件(論文):1內容完整、層次清晰、敘述流暢、排版規范的畢業設計論文;2包括畢業設計論文、源程序等內容在內的畢業設計電子文檔及其它相關材料。 第3頁 主要參考文獻(資料):榮欽科技. HYPERLINK /kns50/detailref.aspx?filename=2006092044.nh&dbname=CMFD2006&
3、filetitle=%e5%9f%ba%e4%ba%8eNessus%e7%9a%84%e7%bd%91%e7%bb%9c%e5%ae%89%e5%85%a8%e6%a3%80%e6%b5%8b t _top Java2游戲設計M.北京. 清華大學出版社, 2004袁海燕,王文濤. HYPERLINK /kns50/detailref.aspx?filename=DZKK200611001&dbname=cjfd2006&filetitle=NESSUS%e5%9f%ba%e6%9c%ac%e5%8e%9f%e7%90%86%e5%8f%8a%e5%85%b6%e5%85%b3%e9%94%a
4、e%e6%8a%80%e6%9c%af%e5%88%86%e6%9e%90 t _top Java實用程序設計100例M . 北京.人民郵電出版社, 2005邵敏敏,陳德平. HYPERLINK /kns50/detail.aspx?filename=JSJC200702085&dbname=CJFD2007&filetitle=Nessus%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91%e5%8f%8a%e5%ae%9e%e4%be%8b t _top 解析Java的多線程機制J. HYPERLINK /kns50/Navi/Bridge.aspx?DBCode=c
5、jfd&LinkType=BaseLink&Field=BaseID&TableName=CJFDBASEINFO&NaviLink=%e8%ae%a1%e7%ae%97%e6%9c%ba%e5%b7%a5%e7%a8%8b&Value=JSJC t _blank 電腦知識與技術, 2006秦琴. Java語言的異常處理設計J.中國科技信息, 2006張洪斌. HYPERLINK /kns50/detailref.aspx?filename=XXAQ200312020&dbname=CJFD2003&filetitle=%e5%9f%ba%e4%ba%8eplug-in%e7%9a%84%e7
6、%bd%91%e7%bb%9c%e6%bc%8f%e6%b4%9e%e6%89%ab%e6%8f%8f%e7%b3%bb%e7%bb%9f t _top Java2高級程序設計M. HYPERLINK /kns50/Navi/Bridge.aspx?DBCode=CJFD&LinkType=BaseLink&Field=BaseID&TableName=CJFDBASEINFO&NaviLink=%e4%bf%a1%e6%81%af%e7%bd%91%e7%bb%9c%e5%ae%89%e5%85%a8&Value=XXAQ t _blank 中科多媒體出版社, 2010趙生慧. Java面向
7、對象程序設計. 北京. 高等教育出版社, 2010林建素,孟康健.Eclipse開發學習筆記(第1版).北京.電子工業出版社,2008.4Bruce Eckel. Thinking in JavaM. Upper Saddle River, New Jersey, USA: Prentice Hall, 2006Abraham Silberschatz, Henry F.Korth, S.Sudarshan. Database System conceptsM. USA:The McGraw-Hill Companies,Inc.Cay S. Horstmann, Gary Cornell.
8、Introduction to Java M. London: Macmillan. 2006專業班級學生要求設計(論文)工作起止日期指導教師簽字日期教研室主任審查簽字日期系主任批準簽字日期基于java的魔塔游戲的設計與實現摘要計算機技術的高速發展,極大程度上影響著我們的日常生活。我們使用計算機玩游戲也越來越普遍。考慮到Java語言簡單、安全、健壯等特性,以及“Write Once,run anywhere”的特點。本次的畢業設計課題使用Java語言開發一款益智類RPG(角色扮演)游戲魔塔。該游戲操作簡單,但對智力、謀略卻有一定的考驗。游戲設計中的特色功能主要包括:“怪物手冊”、“樓層跳轉”、
9、“背景音樂播放”、“游戲進度的存/取”等。功能的豐富并不代表操作的繁瑣,游戲過程中,玩家只需簡單操作鼠標和鍵盤即可。游戲中設有多種情景對話,加之背景音樂的播放,讓玩家有一種身臨其境的感覺。同時,該游戲擁有存檔的功能,使玩家不會因為每次都重新開始而煩惱。本次畢業課題的設計過程中主要使用到了Java Swing、線程、事件處理等技術,其中穿插了雙緩沖技術和Java Applet技術。同時借助Java語言面向對象的特點,充分利用封裝、繼承、多態的特性,將這一經典游戲呈現。關鍵詞:Java;Java Swing;游戲;魔塔;面向對象Design and realization of the Magic
10、 Tower Game Based on JavaAbstractThe rapid development of computer technology, greatly affecting our daily lives. We use the computer to play the game more and more common. Considering the Java is simple, secure, robust and other characteristics, as well as Write Once, run anywhere features. This ti
11、me, the graduation project use the Java language to develop a puzzle RPG (role-playing) games - Magic Tower. The game is simple to operate, but the game tests players intelligence and strategy. Game Design features include: Monster Manual, Jump floor, background music, game schedule load / store and
12、 so on. Feature-rich does not mean complicated operations, during the game, the player simply to operate the mouse and keyboard. The game has a variety of scenarios dialogue, combined with background music, allowing the player to have a feeling of being there. Meanwhile, the game has achieved the go
13、al that players will not have to re-start every time. The Graduation Project is mainly used in the design process to Java Swing, threads, event processing technology, interspersed with double buffering technology and Java Applet technology. The same time with the object-oriented features of the Java
14、 language, take advantage of encapsulation, inheritance, polymorphism characteristics, this classic game will be presented.Key words:Java; Java Swing; Game; Magic Tower; Object-Oriented目 錄 TOC o 1-4 h z u HYPERLINK l _Toc452912710 1 緒論 1 緒論1.1背景及現狀二十一世紀,我們的人類社會進入了一個全新的時代信息時代。人類為了減少自己的苦力勞動、腦力勞動,研發了有史
15、以來最偉大的科技技術計算機。計算機技術的高速發展,是因為人類龐大的需求所推動的。隨著時間的推移,計算機與我們的生活越走越近。目前,它基本已經完全融入到人類生活當中了,對社會的發展也有著非常大的作用。計算機在人們的生活中扮演著舉足輕重的角色,它是現代社會不可或缺的。人們可以使用計算機辦公、娛樂、購物等等,計算機的發展讓我們的生活變得更加豐富,更加便捷。在計算機上玩游戲,也成為我們主要的娛樂方式之一。但縱觀整個游戲領域,絕大多數的主流游戲都是使用C語言或C+語言開發的。使用Java語言編寫的游戲微乎其微。造成這一現象的原因可能是每種語言的特性所決定的,Java語言也有它的局限性。但是,這并不代表J
16、ava語言就不能開發游戲。此次研究課題就是基于Java語言開發一款角色扮演類的小游戲。1.2設計目的 當初在選擇畢業設計課題的時候,考慮到絕大數同學都會選擇基于Web的相關系統,而我并不像隨大流,所以我選擇了做基于Swing的游戲開發。同時,我想到了魔塔這款游戲,所以就下定決心去實現它,并且開發一款游戲軟件也是我的一個夢想,即使這只是一款十分簡單運行在桌面的游戲。之所以選擇Java Swing作為自己的主流技術,其主要原因在于Swing設計的直觀性,我喜歡那種所見即所得的感覺。作為一名在大學期間系統學習過Java語言的應屆畢業生,一直都是在做Web方面的系統研發,從未涉足游戲開發領域。也正好借
17、此機會,運用所學過的Java語言的相關技術,借用eclipse開發工具編寫一個游戲應用,既對自己學過的知識做一次檢驗,也能對一些不經常使用的技術有所了解,可謂兩全其美。2 開發環境及相關技術的介紹2.1開發環境操作系統:Microsoft Windows 7 64位程序語言:Java開發包: Java SE Development Kit 7, Update 75 (JDK 7u75)IDE: Eclipse Java EE IDE2.2 Java語言早在上世紀九十年代,Sun公司就已經推出了面向對象的程序設計語言Java,這一新的概念完全顛覆了之前程序員腦中面向過程的思想。 HYPERLIN
18、K /subview/29/12654100.htm t _blank Java 技術具有通用性、健壯性、平臺移植性和安全性等特性。介于Java編程語言的特點,Java語言在近幾年流行的計算機編程語言排行榜中名列前茅。絕大多數從事IT行業的程序員都會選擇Java語言作為自己第一編程語言。隨著社會的需求提升,Java技術在大數據、云計算、移動設備等領域均具備明顯的優勢。可見其發展前景十分的光明。Java語言之所以會獲得眾多程序員的青睞,一是其簡單易學,更重要的一點它對程序員是完全開放的。基于這一現狀,社會中涌現出越來越多使用Java語言進行編程的程序員。企業方面,也會考慮到為了企業的蓬勃發展,企
19、業在應聘程序員的時候,也將熟悉并能熟練應用Java語言作為一項硬性要求。Sun公司這一獨特的思想,不僅將Java語言推向社會,并被廣大程序員廣泛的使用,同時他們也在不斷完善Java語言,可謂兩全其美。這與微軟公司所倡導的注重精英和封閉式的模式完全不同。Java平臺主要由Java虛擬機(簡稱JVM)和Java 應用編程接口(簡稱API)構成。JVM作為操作系統與運行環境之間的中間件,為Java語言平臺無關性做出巨大的貢獻。因為有它的存在,Java程序只需生成能夠在Java虛擬機上運行的字節碼文件,即*.class文件,就可以在任何裝有Java虛擬機的地方運行;Java 應用編程接口是在Java推
20、出時就已經預先定義好的函數,目的是方便程序員使用一些基本的函數,完成特定的功能,程序員可以無需熟悉源碼、內部細節就能完成所需功能。這大大降低了Java語言的使用難度,也提高了程序員的編程效率。Java編程語言是簡單的,程序員可以直接使用API提供的函數,不需要了解函數內部具體的實現,也可以達到程序的需求。它摒棄了C語言中的指針、C+語言中的操作符重載等讓程序員頭疼的難點。并且Java語言提供了自動的垃圾回收機制,使得程序員不必為內存不足的問題而煩惱;Java編程語言是健壯的,它特有的強類型機制,保證了屬性、方法的安全性;垃圾回收機制解決了程序內存分配的問題,同時也保證了內存不會泄露。異常處理機
21、制會保證程序在出錯的時候,停止程序的運行,由程序員自身處理。Java中不再使用指針,取而代之的是引用,極大程度上提高了程序的安全性。總之,Java語言諸多的優點,讓它成為目前最為流行的編程語言之一。圖1-1 Java結構圖Java語言是現今使用最為廣泛的計算機編程語言之一,同時也是各領域、各行業最看重的語言。所以Sun公司將Java平臺針對不同領域、不同行業的需求分成了四個版本(其結構示意圖見圖1-1所示):Java SE(標準版):主要用來開發在桌面上運行的小型Java應用程序。Java EE(企業版):多用于企業級應用的開發,主要體現在服務器端,要求程序具有一定的、可靠性和安全性。主要體現
22、在開發Web應用。Java ME(微型版):主要開發運行在移動設備和嵌入式設備上的Java應用程序。Smart Card。本文主要運用J2SE,故作如下解釋。Java SE 是Java平臺標準版的簡稱(Java Platform, Standard Edition),用于開發和部署桌面、服務器以及嵌入設備和實時環境中的Java應用程序。Java SE包括用于開發Java Web服務的類庫,同時,Java SE為Java EE提供了基礎。本次畢業設計的課題將會綜合運用J2SE的API,主要目的在于熟練掌握Java語言面向對象編程的思想;熟悉Java語言的三大特性封裝、繼承、多態;學習Java中的
23、雙緩沖機制;對Java語言中線程能夠有更進一步的了解;能夠熟練掌握使用Eclipse開發J2SE程序的基本方法。掌握Eclipse調試程序的方法。簡單應用設計模式的概念。盡可能的提高程序開發效率,培養優秀的編程習慣。2.3核心技術Java Swing介紹Java Swing是一個用于開發Java應用程序用戶界面的開發工具包。Swing API是可擴展的GUI組件,可以是Java開發人員更方便的開發基于Java的前端/GUI應用。Swing組件遵循模型-視圖-控制器架構。Java Swing具有如下特點:重量輕:Swing組件與原生的API不同,它大多采用純Java代碼編寫。可在Java虛擬機上
24、直接運行。豐富的控件:Swing提供了豐富的控件,如按鈕組件、樹、滑塊、顏色選擇器等等。可以讓程序員根據需要選擇不同的控件。高度可定制:程序員可以很方便的調用Swing控件,創造一個簡單直白的外觀,并由程序員自定義內部邏輯等;可插拔的外觀和感覺:程序員可以在GUI應用程序中自定義控件的改變;Java Swing的核心開發步驟:1.確定使用容器;2.選擇布局管理器;3.添加組件;4.為組件添加事件處理。現就常用的核心控件做簡單的介紹:JFrame:基于Java Swing的GUI程序的基本思路都是以Jframe為基礎的,它是一個屏幕上的對象。它是所有控件存放的一個容器,同時它也是Swing組件和
25、操作系統之間的橋梁,讓這些獨立于操作系統的組件能夠運行并呈現給用戶。JPanel:此控件屬于container的一種,在panel控件上可以做到不提供環境的前提下,使用者可以任意的在上面作繪制工作。它有兩個主要的優點:一是容易在panel上增加邊框的設計;二是panel使用了雙重緩沖的方式來繪制其他控件。JLabel:該控件的主要作用是顯示文字或圖片。該控件的功能較為單一,使用者不能對其進行點選,滑鼠等相關操作也不能是它有所反應。JButton:這是按鈕組件,該組件主要是通過鼠標點擊,然后觸發一定的事件。所以一般情況下會對該組件添加鼠標事件的監聽。布局管理器的介紹:FlowLayout:該布局
26、管理器會將組件按照從左到右依次放置,并且它會根據container的大小來調整組件的大小以及換行。使用者添加組件的時候,布局管理器會自動將該組件排至末尾位置。GridLayout:該布局管理器以網格為基礎,將指定的container分割成數個大小相同的區域。使用者向該container中添加組件的時候,該布局管理器會按照從上到下、從左到右依次放入,每一個區域只允許放入一個組件。BorderLayout:這是container默認使用的布局管理器,它將container分割出五個區域:North、South、West、East、Center。且每一個區域最多只能存放一個組件。添加組件時,默認會存
27、放在Center區域。想要放在其他區域需要使用者自定義。CardLayout:該布局管理器可任意安排組件的存放位置,它只是需要定義“卡片”的數量。顯示的畫面可以隨“卡片”的切換而改變,且每次只能看到一張“卡片”。2.4關于EclipseEclipse是Java語言開發的集成開發環境,這是絕大數程序員所認可的。但是就Eclipse本身而言,它的功能則不僅僅就此一項而已。它可以通過添加一些插件,使其擁有其他的一些功能。以IBM公司牽頭,其他公司合作開發出的Eclipse,它不僅僅是某一門編程語言的開發環境,在它被開發之初是作為一個框架平臺,通過添加不同的組件,來構建針對于不同編程語言的開發環境。它
28、支持了絕大多數的插件,也正因為如此,使它變得如此的靈活,從而被廣大的程序員所喜愛。Eclipse中常見的插件有svn插件、maven插件、jadclipse插件等。安裝不同的插件,可以使Eclipse具有特有的功能。svn插件在公司軟件開發團隊中較為常見。它是一款免費的版本控制軟件,它可以很明確的指出代碼修改的時間和作者,極大程度上方便了程序員對代碼版本的管理。同時也避免了因為意外情況而導致代碼丟失的風險;Maven是解決依賴庫的一款非常好用的Java工具,在Eclipse的添加Maven插件后,可以很方便的在Eclipse中管理web、Java項目等;jadclipse插件作為反編譯插件,可
29、以幫助程序員查看封裝在jar包、war包中的代碼,對于開發人員來說,它是一個很好的“伙伴”。總之,Eclipse是程序員開發軟件的一款輔助工具,它可以幫助程序員們縮短整個開發的時間,降低了開發成本。3 游戲介紹3.1游戲背景很久很久已前,一位武功高強的魔法師因為厭惡國王,所以將國王最疼愛的公主抓了起來,美麗的公主被魔法師囚禁在一座神秘之塔里面。國王知道后,十分的氣憤,隨后下重金招募了諸多勇士。經過層層淘汰選拔,最終只留下了一位勇士。這位武功高強的勇士手持長劍進入滿是魔法師的魔塔之中,營救美麗的公主。可是萬萬沒有想到,剛剛進入塔中就遭到了壞人的暗算,不僅武器和法術都丟失了,還被關入了監獄,幸好得
30、到了一同坐牢的小偷和仙子的幫助讓你逃了出來,于是我們的英雄一邊練功一邊開始了他艱苦的救美之行游戲剛剛開始,勇士會與仙子進行對話,讓玩家大致了解整個游戲的背景及流程,并且仙子用自己最后的一點法力,恢復了勇士的功力,隨后游戲將真正開始。在游戲中,勇士通過擊殺怪物,獲取金幣和經驗,玩家可以在勇士商店或者經驗老人那里使用金幣和經驗,提升勇士的生命值、攻擊力、防御力。再結合隱藏在魔塔的各個角落的寶物,最終擊敗魔王,營救公主,獲得游戲勝利!如若玩家在于怪物的戰斗中失利,則游戲失敗!3.2游戲操作游戲菜單頁面操作:鼠標操作勇士上、下、左、右移動:鍵盤上、下、左、右鍵;與游戲設定人物對話:鍵盤空格鍵;游戲中商
31、店操作:鼠標操作;獲取游戲中“怪物手冊”:按X鍵查看,按X鍵關閉;獲取游戲中“風之羅盤”:按Z鍵打開,鼠標點擊,按Z鍵關閉;退出游戲:按Q鍵;重新開始:按R鍵;游戲存檔:按S鍵;讀取存檔:按A鍵;4 需求分析4.1功能需求該畢業設計課題所要設計的游戲應用只要涉及下列功能模塊:與npc對話、查看怪物手冊、商店交易、樓層跳轉、游戲存檔與讀取、戰斗畫面的顯示、重新開始和音樂播放。功能結構如圖4-1所示:魔塔拯救公主與NPC對 話查看怪物手冊商 店 交 易樓 層 跳 轉游戲存檔與讀取戰斗畫面顯示重 新 開 始音 樂 播 放圖4-1 功能結構圖4.1.1與NPC對話在本次設計的游戲中,在不同的情景下可能
32、會出現相應的非玩家角色(NPC),他的出現主要是幫助玩家快速有效的沿著主線進展,例如在游戲剛開始出現的“仙子”,她就會通過對話的形式告訴“勇士”一些游戲的背景信息和游戲主線方向信息等,引領玩家進入下一個游戲階段。玩家可以跟隨NPC的指引深入到游戲中,體會游戲帶給玩家的快樂!當“勇士”在地圖中遇到NPC時,程序會自動的創建一個TalkPane對象,該對象主要是借助于paint(Graphics g)方法中的g.drawString(“*”)方法,將對話框、對話的內容顯示出來。在該對象添加了KeyListener監聽器,當按space鍵時,實現雙方交流的過程。4.1.2查看怪物手冊在魔塔的每一層都
33、有不同屬性的怪物,他們關押著公主,你需要將他們一一擊潰。由于每一個怪物的生命值、攻擊力、防御力的不同,對玩家的判斷及策略造成影響,所以開發出此功能,用來顯示當前樓層所有怪物的屬性值信息,甚至還可以顯示出勇士與怪物戰斗將會消耗的生命值。著極大程度上降低了游戲的難度,但此功能主要是輔助玩家進行判斷的。當勇士獲得藏在魔塔中的怪物手冊后,通過按X鍵,可以顯示出當前樓層所有怪物的信息,主要包括怪物名、生命值、攻擊力、防御力、金幣值、經驗值、消耗值。玩家可以根據怪物手冊進行判斷,并決策自己是否繼續前進,還是提升自己的屬性,待損失降到最低的時候,再做出決定。4.1.3商店交易游戲中玩家提升屬性的方法有多種:
34、獲取道具提升、獲得NPC的幫助、商店交易。其中商店交易作為玩家提升屬性值的主力軍。而商店交易又分為兩種:一是通過金幣購買、二是通過經驗值兌換。當勇士前往商店后,會顯示出商店頁面,玩家通過鼠標操作,點擊鼠標左鍵完成相應的功能,如買賣鑰匙、提升攻擊力/防御力、提升生命值、提升等級等。游戲中的商店交易,不僅僅只體現在“怪物商店”,諸如“鑰匙商人”、“經驗老人”也具有類似的功能。在玩家購買物品或者使用經驗值交換的時候,需要確保“勇士”擁有足夠的金幣數或經驗值。4.1.4樓層跳轉由于整個游戲的樓層數較多,當玩家想要從高樓層去往低樓層時,將會是一件無聊而又費時的事情。故特意開發此項功能,實現樓層的跳轉。從
35、而很大程度上減少了勇士穿梭于各個樓層的時間,讓玩家體驗到瞬間移動的快感。勇士可以通過擊殺怪物,到達指定的樓層得到風之羅盤寶物,在獲得它之前此功能是不能使用的。得到風之羅盤后,玩家可以按下鍵盤上的Z鍵,然后在游戲界面上就會顯示玩家當前所去過的所有樓層,通過鼠標點擊,勇士可以直接到達指定樓層。該功能需要保證,“勇士”尚未到達的樓層,不能顯示出來,即界面上只能顯示到當前勇士到達的最高樓層。否則會破壞整個游戲的順利運行。4.1.5游戲存檔與讀取玩家如果想完成整個游戲,即救出公主,需要消耗很長的時間。此時就需要有一個功能能夠保證玩家的游戲數據不會丟失。為保證下一次游戲能夠繼續進行,就需要先獲取到舊的游戲
36、數據,然后繼續游戲。當玩家需要保存自己在游戲中的數據時時,只需按下鍵盤上的S鍵,程序會通過數據輸入輸出流,將必要的數據寫出到外部文件中;當玩家想要繼續游戲的時候,可以通過兩種方式恢復游戲數據:1.在游戲菜單界面,通過鼠標點擊“讀取進度”即可;2.進入游戲后,按下鍵盤上的A鍵,會將游戲進度恢復至上次保存的進度。該功能避免了玩家每次都要重新開始的困擾。4.1.6戰斗畫面顯示該游戲的主線是打敗所有的怪物,戰勝魔王,最后營救出美麗的公主。所以游戲中缺不了與怪物的戰斗,為營造出一個更加真實的戰斗場景,在此設計獨特的戰斗場景并加以音效,營造一個緊張激烈的戰斗場面。當勇士在魔塔中遇到怪物的時候,程序會顯示一
37、個戰斗畫面,畫面中展示了勇士和怪物的生命值、攻擊力、防御力和頭像。同時借助于線程的機制,模擬出雙方互相攻擊的效果,與此同時將伴有攻擊的音效。將戰斗的場面模擬的淋漓盡致。當一方的生命值降為0,戰斗畫面會根據具體情況顯示“戰斗勝利”或者“戰斗失敗”。顯示“戰斗失敗”,代表勇士犧牲,程序會運行game.over()方法,游戲結束;否則,勇士戰斗勝利,游戲繼續進行。4.1.7重新開始如果玩家在戰斗中“戰死”,由于劇情的需要,程序還會顯示一些對話框,隨后游戲結束,程序退出。但是如果玩家是根據對怪物手冊及當前局勢的分析后,覺得勇士將無法擊敗魔王,自己決定退出當前游戲,重新開始游戲。此時只需要按下鍵盤R鍵,
38、游戲將重新開始,一切數據恢復至初始值。玩家可以再次踏上拯救公主的征程。當然,玩家也可以通過關閉程序重新打開的方式。開發此功能只是略去了上述的步驟,縮短了一定的時間。4.1.8音樂播放游戲過程中,將伴隨有音效的播放,給玩家一種更加全方位的體驗,有一種置身其中的感覺。并且不同場景將有不一樣的音效體驗,盡量不讓玩家產生厭倦感。游戲中主要使用了Java Applet的技術,將多媒體音頻資料在Java程序運行的過程中播放出來。4.2性能需求計算機配置:安裝java環境,jdk6.0以上;響應時間:每一次玩家觸發事件后,程序的響應時間不得超過5秒;數據準確性:玩家在游戲的過程中,數據不能出現錯誤;玩家保存
39、進度后,讀取時數據應與保存時一致; 4.3可靠性和可用性需求可靠性:在玩家完整的進行一次游戲的過程中,不會出現程序運行錯誤、閃退的情況。同時能夠完成功能需求中的各個功能模塊。可用性:能夠保證在兩周時間內,程序能夠正常運行的比例在90%以上。4.4可維護性和可擴展性需求可維護性:能夠做到在不影響玩家數據的情況下,修復程序Bug。可擴展性:作為游戲開發,一成不變往往會使玩家產生情感疲勞,所以開發新的功能成為一種必要。所以,該游戲應該能確保在不影響之前功能情況下,添加新的功能模塊。5 程序設計與實現5.1 概要設計5.1.1主菜單設計圖5-1 主菜單效果圖主菜單由背景圖片、開始游戲、讀取游戲、游戲說
40、明、退出游戲五部分組成。顯示效果如圖5-1所示。在主菜單主要借助于鼠標操作。當點擊開始游戲,主菜單關閉,進入游戲主界面并開始游戲;當點擊讀取游戲,主菜單關閉,程序讀取之前保存數據,進入游戲主界面并開始游戲;當點擊游戲說明,進入游戲說明界面,游戲說明主要介紹了游戲背景及游戲的基本操作等;當單機退出游戲,主菜單關閉,程序結束運行。5.1.2游戲主界面設計主界面主要由兩部分組成,分別是“勇士”的狀態信息欄和游戲過程界面。狀態信息包括:等級、生命值、攻擊力、防御力、金幣數、經驗值、所擁有的鑰匙數、當前樓層數、最高樓層數。效果顯示如圖5-2所示。圖5-2 主界面效果圖5.1.3實體類設計勇士類:clas
41、s Hero extends Stuff private int hp;/生命值private int atk;/攻擊力private int def;/防御力private int money;/金幣數private int exp;/經驗值private int ykey;/黃色鑰匙數private int bkey;private int rkey;private Point xy;private int dir;private BookPane bp;private Game game;private HeroShake hs;private DoorShake ds;public H
42、ero(int paramInt1, int paramInt2, int paramInt3, Point paramPoint) hp = paramInt1;atk = paramInt2;def = paramInt3;xy = paramPoint;怪物類:class Monster extends Stuff public String name;Monster(String paramString, int paramInt1, int paramInt2, int paramInt3,int paramInt4, int paramInt5) = paramString;thi
43、s.hp = paramInt1;this.atk = paramInt2;this.def = paramInt3;this.money = paramInt4;this.exp = paramInt5;5.2核心技術運用5.2.1封裝Java類將數據和方法放在一起,并為數據設定private的訪問權限,為方法設定public的訪問權限。所以對使用該類的其他類來說,只能使用其公有的方法,不能使用其私有化的數據,從而實現信息的隱藏。這就是所謂的封裝性。數據封裝解決了傳統結構方法中數據與操作分離所帶來的各種問題,程序員只用通過指定的入口才能對數據進行操作,這種方式大大提高了程序的可復用性和可維護
44、性。數據的封裝,實現了將一個類中私有數據和公有數據的分離,其他類可以很清楚的看到自己可以訪問的數據,降低了復雜性。在本游戲中,對封裝性的運用,體現在對核心實體類中各屬性值的封裝。將那些不該讓訪問到的數據設為private,實現屬性的私有化。這也是對屬性值的保護。5.2.2繼承 繼承是Java編程語言的又一大特性。繼承就是將已存在的類作為基礎建立一個新的類,使用到的關鍵字為extends。通過使用這種方式創建出來的新類,可以使用父類中訪問權限允許的屬性及方法,與此同時,新類中可以設定自己特有的屬性和方法。但不能選擇性的繼承某一父類。Java的這一特性深受廣大程序員的青睞,因為它提高了編寫代碼的效
45、率,降低了開發的成本。Java繼承的特征:繼承關系是可以傳遞的;繼承能夠讓程序的閱讀者清楚的看清類與類之間的關系;繼承可以提高一致性,從而減少了類之間的接口,提高了程序的易維護性。本游戲中,核心實體類勇士類、怪物類中擁有一些共有屬性,如生命值、攻擊力、防御力等,故抽象出父類Stuff類,封裝了共有屬性,降低了代碼的重復率,提高了編程效率。5.2.3多態多態的概念:不同的類的對象,在接收到同一個消息時,會根據具體情況做出不同的響應,即同一個消息發出后,程序將會根據具體情況(消息中參數、調用的對象等方面)執行不同的行為。多態性是Java語言的一大特性。多態具體可以分為以下兩種:編譯時多態和運行時多
46、態,編譯時多態又稱為重載,運行時多態又稱為重寫。重載:1.定義在同一個類中,具有多個同名的方法2.方法名字相同,參數列表不同(參數個數不同,參數的類型不同,參數的順序不同(在參數類型不同的基礎上)3.跟返回類型無關。重寫:1.發生在子父類之間,子類具有和父類相同的行為。2.方法的簽名完全一致。方法名,返回類型,參數列表完全一致。3.訪問權限不能被縮小。4.異常不能被擴大。5.2.4雙緩沖技術當調用repaint()方法會出現動畫的閃爍,給玩家帶來不流暢的視覺感,那么如何來處理掉這種閃爍的效果呢?就是利用java的雙緩沖技術。雙緩沖技術的工作原理:先在內存中分配一個圖片和設置它的大小和游戲窗口一
47、樣(在內存中的空間我們是看不到的),然后利用getGraphics()方法去獲得給空間并將它全部一次性的顯示到我們的屏幕上。這樣在我們的動畫窗口上面是顯示出來就非常的流暢了。避免了上面的閃爍效果。雙緩沖技術示意圖如圖5-3所示:圖5-3 雙緩沖技術示意圖雙緩沖技術相關代碼:public void update(Graphics g) if (offScreenImage = null) offScreenImage = this.createImage(Constant.Game_width,Constant.Game_height);Graphics goff = offScreenImag
48、e.getGraphics();paint(goff);g.drawImage(offScreenImage, 0, 0, null);5.2.5鎖機制在Java編寫的程序中,有時會出現多個線程并發訪問同一數據的情況,進而造成數據的不一致性,并對程序的最終結果造成影響。所以 HYPERLINK /base/17 o Java EE知識庫 t _blank Java語言提出了一個全新的概念鎖。鎖機制的出現可以很方便的實現原子性。將所有的公有屬性(即會被多個線程共同訪問的代碼)放在一個有“鎖”的代碼塊中,這個代碼塊被稱為同步代碼塊。同步代碼塊有兩部分組成:一部分是公共資源,放在大括號中,稱之為公共
49、資源;一部分是標識此為同步代碼塊的標志符(synchronized 關鍵字)。synchronized /代碼塊 每個Java對象都可以用做一個實現同步的鎖,這些鎖被稱為內置鎖(Intrinsic Lock)或監視鎖(Monitor Lock),當線程即將運行有synchronized關鍵字標識的代碼塊時,會自動獲取到該公有資源的鎖。當程序在退出代碼塊時將會釋放這個鎖資源(無論是通過正常路徑退出代碼塊,還是通過拋異常退出)。一個線程想要獲取到這個內置鎖,首先要保證這個鎖資源沒有被其他線程獲取,其次該線程必須要執行被這個鎖資源“鎖住的”代碼塊。內置鎖為互斥鎖,即線程A獲取到鎖后,其他的所有線程如
50、果還想獲取到該鎖,只有等線程A釋放鎖資源,在該階段這些線程都將會進入到鎖池等待的狀態,只有獲得鎖資源,該線程才會重新進入可執行狀態,等待CPU的調用。故同步代碼塊中的操作可以保證原子性。當某個線程請求一個被其它線程持有的內置鎖時,發出請求的線程就會進入鎖池等待狀態,直到該鎖資源被釋放。只有線程獲取到這個鎖資源,該線程才能重新進入到可執行狀態,等待被cpu調度。否則,它將會一直處于阻塞狀態。5.2.6 Java AppletJava Applet是使用Java編程語言編寫應用在頁面的一種小的程序。它可以產生豐富的、特殊的效果,能夠使我們的頁面看起來不再單一無趣,而是豐富多彩的。而包含Java A
51、pplet應用程序的網頁被稱之為Java-Powered頁。用戶訪問到Java-Powered頁時,Java Applet將會被下載到用戶的計算機上并執行,但是前提是用戶使用的瀏覽器必須支持Java語言。Java Applet還有一個優點,就是它是在用戶計算機上執行的,因此它的執行速度不會受到網絡寬帶、用戶并發訪問量的影響,讓用戶能夠更好、更快、更流暢的欣賞嵌入網頁的多媒體資源。也正是因為這個特點,使得Java Applet技術曾被廣泛的應用在網頁技術。在Java Applet中,可以實現圖形繪制、 HYPERLINK /view/285104.htm t _blank 字體和顏色控制、動畫和
52、聲音的插入、人機交互及網絡交流等功能.Applet還提供各種名為抽象窗口 HYPERLINK /view/1241761.htm t _blank 工具箱 (Abstract Window Toolkit,AWT)的窗口環境開發工具,但AWT的設計是存在缺陷的,取而代之的Swing技術為Java GUI組建的輕量組建.它們利用用戶計算機的GUI元素,可以建立標準的 HYPERLINK /view/185360.htm t _blank 圖形用戶界面,如窗口、按鈕、滾動條等。目前,在網絡上有非常多的地方應用到了Applet技術,使得我們的網絡生活更加豐富多彩。5.2.7事件處理技術編寫基于Swi
53、ng的游戲應用程序必然會使用到事件處理技術,根據玩家的操作做出相應的事件處理。在Java應用程序中事件處理有很多種,在本游戲中主要用到鼠標事件、鍵盤事件。現就這兩種最為常用的事件處理技術做如下簡短性的介紹:一、鼠標事件在游戲中,玩家會必不可少的會使用鼠標進行操作,所以,鼠標操作事件將是不可或缺的。在Java Swing中的諸多組件上都可以添加鼠標事件的監聽。實現MouseListener接口,可以通過重寫不同的方法,對發生在事件源上的點擊、釋放鼠標、鼠標移入/移除事件源、鼠標左鍵/右鍵點擊等事件的發生做出不同的邏輯處理。實現MouseMotionListener接口可以處理拖動鼠標和移動鼠標的
54、事件。實現這兩個接口就可以完成游戲所需的所有的鼠標操作的事件處理。具體會對接口中的 HYPERLINK mk:MSITStore:C:UsersAdministratorDesktop文檔JDK_API_1_6_zh_CN.CHM:/java/awt/event/MouseListener.html l mouseClicked(java.awt.event.MouseEvent) mouseClicked( HYPERLINK mk:MSITStore:C:UsersAdministratorDesktop文檔JDK_API_1_6_zh_CN.CHM:/java/awt/event/Mou
55、seEvent.html o java.awt.event 中的類 MouseEvente)、 HYPERLINK mk:MSITStore:C:UsersAdministratorDesktop文檔JDK_API_1_6_zh_CN.CHM:/java/awt/event/MouseListener.html l mouseEntered(java.awt.event.MouseEvent) mouseEntered( HYPERLINK mk:MSITStore:C:UsersAdministratorDesktop文檔JDK_API_1_6_zh_CN.CHM:/java/awt/eve
56、nt/MouseEvent.html o java.awt.event 中的類 MouseEvente)、 HYPERLINK mk:MSITStore:C:UsersAdministratorDesktop文檔JDK_API_1_6_zh_CN.CHM:/java/awt/event/MouseListener.html l mousePressed(java.awt.event.MouseEvent) mousePressed( HYPERLINK mk:MSITStore:C:UsersAdministratorDesktop文檔JDK_API_1_6_zh_CN.CHM:/java/a
57、wt/event/MouseEvent.html o java.awt.event 中的類 MouseEvente)三個方法進行重寫,實現相應的業務邏輯。二、鍵盤事件為了更加的方便玩家操作,還會設有一些的鍵盤事件。當玩家按下、釋放或敲擊鍵盤上一個鍵時就觸發了鍵盤事件,必須要有觸發事件的事件源。當一個組件處于激活狀態時,敲擊鍵盤上一個鍵就導致這個組件觸發了鍵盤事件。事件源使用addKeyListener方法獲得監視器。監視器是一個對象,創建該對象的類必須實現接口KeyListener。用KeyEvent類的public int getKeyCode()方法,可以判斷哪個鍵被按下、敲擊或釋放,ge
58、tKeyCode()返回一個鍵碼值。也可以用KeyEvent類的public char getKeyChar()判斷哪個鍵被按下、敲擊或釋放,getKeyChar()返回鍵上的字符。根據返回的字符,程序員可以編寫不同的邏輯來處理,從而達到按下不同的鍵,執行不同的業務邏輯。鍵盤事件主要是對如下幾個方法進行重寫:keyPressed(KeyEvent e)、keyReleased(KeyEvent e)。5.2.8線程說到線程,我們就不得不先介紹一下進程的概念。進程是計算機進行資源分配的基本單位。可以說一個程序的運行就是一個進程的執行。但是由于計算機的發展以及復雜功能的需求,進程已經滿足不了現今社
59、會的一些要求,所以才提出了比進程還要小的線程。線程是程序運行過程中最小的執行單位。線程有三個要素:cpu、代碼、數據。在Java語言中線程的實現方式主要有兩種:一是直接繼承Thread類,二是實現Runnable接口。有關于線程有兩個最主要的方法:run()方法、start()方法。run()方法規定了線程所要執行的程序流程。start()方法是用來啟動線程的,相當于向cpu發出執行信號,等待cpu的調用。線程的狀態初步分為五種:初始狀態:剛剛申請了內存空間來存儲線程對象,即剛使用new關鍵字創建好的線程就會處于該狀態。就緒狀態:剛剛創建好的線程調用了start()方法后所處的狀態,等待cpu
60、的調度。進入該狀態的線程就脫離了程序員的控制。運行狀態:處于就緒狀態的線程獲取到cpu的資源進入該狀態,該狀態的線程會去執行run()方法中的代碼。阻塞狀態:線程會由于缺少某一資源而無法進入就緒狀態。阻塞狀態又分為掛起狀態、鎖池等待、等待池等待幾種。掛起狀態是由于線程遇到sleep()方法或join()方法,放棄了cpu的使用權;鎖池等待是線程在執行的過程中遇見了synchronized關鍵字申請對象的鎖資源,且該資源正被其他線程使用,故而進入鎖池等待;等待池等待是正在運行的線程遇見wait操作之后,進入到阻塞狀態,直到收到notify或者notifyAll所下達的通知,則線程會退出阻塞狀態,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年綠色建材項目申請報告綠色供應鏈管理
- 城市燃氣管道更新改造項目2025年社會穩定風險評估與風險評估指標創新報告
- 中醫藥現代化進程中的英國市場拓展研究報告
- 鄉村培訓機構管理辦法
- 臨沂阻燃電工管理辦法
- 事業編制辭職管理辦法
- 倉庫周末管理辦法細則
- 企業貸款減免管理辦法
- 公司印章外出管理辦法
- 二手車零售店管理辦法
- 新能源會計面試題及答案
- 初中電學知識點課件
- 藝術療愈與心理健康工作室行業深度調研及發展戰略咨詢報告
- 老年骨質疏松性疼痛診療與管理中國專家共識2024解讀課件
- 2025年企業健康體檢計劃及總結
- 英語在生活中的應用
- 急診醫學課件-災害事故急救課件
- 儀表工安全培訓課件
- FOCUS-PDCA醫院品質管理獲獎案例-提高住院患者入院宣教知曉率
- 2025年大學英語四級詞匯(亂序版)
- 五年高考真題(2020-2024)分類匯編 政治 專題14 認識社會(探索認識的奧秘、尋覓社會的真諦) 含解析
評論
0/150
提交評論