




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
太原理工大學畢業設計(論文)用紙摘要手機等移動設備的發展使人類進入了一個全新的世界,人與人之間可以遠隔萬里為了同一興趣愛好而交流,做到了游戲無國界。隨著手機的不斷發展,手機游戲作為一個新的名詞融入到了人們的日常生活當中。手機游戲產業作為現代電子技術的產物,正在以其獨特的魅力在全世界的娛樂領域占據主流位置,我們在承認廣大娛樂網民的選擇空間狹小的同時,也必須明確的一點就是手機游戲本身所具有的強大的吸引力。手機游戲的吸引力主要在于,它在讓玩家打發時間的同時,可以讓人實現在顯示生活中不能實現的理想,得到在顯示中不能得到的東西。而且手機游戲產業促動高科技技術不斷升級,作為經濟增長的一大支撐點,已經成為經濟騰飛的重要支柱。近年來,世界手機游戲市場高速發展。根據統計,全球手機游戲玩家所占互聯網人群的比例已經超過30%。手機游戲憑借其信息雙向交流,速度快,不受空間限制等互聯網優勢,具有誘人的互動性、仿真性和競技性,已經成為網絡業盈利優厚的三大領域之一。網絡平臺的發展,為手機游戲奠定了堅實的“物質”基礎。手機的迅猛發展為手機游戲提供了“高速公路”,而專用游戲服務器則為手機游戲提供了容量巨大的“加油站”。前不久,手機游戲還被視為一個“高風險”的行業,但隨著人們對手機游戲的重新認識,手機游戲正在恢復其應有的地位。實現了從游戲設計,界面開發,到游戲的設計,功能的測試;基本實現了Android游戲連連看的功能流程。本游戲界面簡單直觀,易于操作,完全基于Android系統。經過分析,我使用了SUN公司的JSP開發工具,利用其提供的各種面向對象的開發工具,首先建立應用原型,然后對初始原型系統進行需求迭代,不斷修正和改進,直至形成滿意的可行系統。關鍵字:連連看、手機游戲、Android平臺。
DesignandImplementationBasedAndroidSnakegameAbstractDevelopmentofmobilephonesandothermobiledevicestomakemankindintoanewworldordercanbeseparatedbythousandsofmilesandcommunicatethesamehobbies,sothegamewithoutbordersbetweenpeople.Withthecontinuousdevelopmentofmobilephones,mobilephonegamesasanewtermintopeople'sdailylife.Mobilegameindustryasaproductofmodernelectronictechnology,isitsuniquecharmintheworldofentertainmenttooccupythemainstreamposition,werecognizethemajorityofInternetuserschoosetheentertainmentspaceissmall,butalsomustbeclearpointisthatthegameitselfhasamobilephonethepowerfulattraction.Themainattractionofmobilegamesisthatitallowsplayerstopassthetimeatthesametime,peoplecanachieveinthedisplayidealcannotbeachievedinlife,togetinthedisplaycannotgetsomething.Andmobilegamesindustryactuationescalatinghightechnologyasamajoranchorofeconomicgrowth,hasbecomeanimportantpillarofeconomictake-off.Inrecentyears,therapiddevelopmentoftheworld'smobilephonegamemarket.Accordingtostatistics,theproportionofmobilegamersworldwideInternetpopulationhasexceeded30%.MobileGamesbyvirtueofitstwo-wayexchangeofinformation,fast,withoutspaceconstraintsandotherInternetadvantages,withattractiveinteractive,simulationandcompetitivenature,hasbecomeoneofthethreeareasoffavorableearningsnetworkingindustry.Networkdevelopmentplatformformobilegameshaslaidasolid"material"basis.Therapiddevelopmentofmobilephonesforthemobilegameprovidesa"highway",anddedicatedgameservercapacity,comparedwithmobilegamesofferenormous"gasstation."Notlongago,mobilegamingwasseenasa"highrisk"oftheindustry,butaspeoplere-understandingofmobilegames,mobilegamesarebeingrestoredtoitsrightfulplace.Achieveatestfromgamedesign,interfacedevelopment,togamedesign,function;basicrealizationAndroidgamelianliankanfunctionprocesses.Thegameinterfaceissimpleandintuitive,easytooperate,basedentirelyontheAndroidsystem.Afteranalysis,IusetheSUN'sJSPdevelopmenttools,usingavarietyofobject-orienteddevelopmenttoolsitprovides,firstcreateaprototypeapplication,thentheinitialprototypeofthesystemneedstoconstantlyreviseandimproveuntilasatisfactoryviablesystem.Keyword:linklinkgame,MobileGames,Androidplatform
目錄摘要 IAbstract II第1章緒論 61.1課題研究意義 61.2論文結構安排 61.3本章小結 7第2章基礎知識與開發技術 82.1Android技術簡介 82.1.1Android基本知識 82.1.2Android系統特點 82.1.3Android手機平臺的優勢 92.2Java技術簡介 102.3本章小結 11第3章系統分析與設計 123.1可行性分析 123.1.1操作可行性 123.1.2技術可行性 123.1.3經濟可行性 123.1.4社會可行性 123.2功能需求分析 133.3系統基本流程 133.4系統模塊設計 133.4消息響應設計 153.5圖形連通算法設計 153.6系統風格定位 163.7本章小結 16第4章系統的設計與實現 174.1系統運行界面圖 174.2開發環境的搭建 204.3部分代碼 204.4本章小結 39第5章系統測試與性能 405.1軟件測試 405.1.1測試簡介 405.1.2測試分類 405.1.3測試步驟 405.2游戲系統測試 415.3游戲性能分析 425.4本章小結 42第6章總結與展望 436.1結論 436.2進一步工作方向 43參考文獻 44致謝 45英文原文及翻譯 46太原理工大學畢業設計(論文)用紙第1章緒論2007年11月由Google牽頭有30多家移動技術和無線應用領域領先企業組成的開放手機聯盟(openHandsetAlliance)發布了其智能手機平臺——Android。Android是一個真正意義上的開放性移動設備綜合平臺,它包括操作系統、用戶界面、中間件和應用程序,擁有移動電話工作所需的全部軟件,同時其開放性保證該平臺不存在任何阻礙移動產業創新的專有權障礙。游戲產業作為現代電腦電子技術的產物,正在以其獨特的魅力在全世界的娛樂領域占據主流位置,我們在承認廣大娛樂網民在選擇空間狹小的同時,也必須明確的一點就是游戲本身所具有的強大的吸引力。它在讓玩家打發時間的同時,可以讓人實現在顯示生活中不能實現的理想,得到在現實中不能得到的東西。而且游戲產業促動高科技技術不斷升級,作為經濟增長的一大支撐點,已經成為經濟騰飛的“第四產業”。本設計將使用Java語言和Android平臺實現出可以在模擬器上運行的連連看游戲。1.1課題研究意義現在小游戲、網頁游戲越來越受網民歡迎,除了玩的方法簡單外(不像其他游戲還需要注冊下載繁瑣過程),很多游戲不乏經典。連連看游戲就是典型了!游戲“連連看”,只要將相同花色的兩張圖用三根以內的直線連在一起就可以消除,規則簡單容易上手。游戲速度節奏快,畫面清晰可愛,老少皆宜。不管你走到哪個游戲網站,連連看游戲總是排在受玩家歡迎排名的前5位,休閑、趣味、益智是連連看玩不厭的精華,且不分男女老少、工薪白領,是一款適合大眾的經典網絡休閑小游戲。完成這次畢業設計,不僅可以提高我對知識的綜合運用能力,增加實現項目設計的經驗,同時讓我深入地了解一個安卓游戲的基本制作過程以及各項功能的實現,拓寬了自己的知識面。通過完成一個比較完善的安卓游戲,我對圖像編輯、程序設計等各方面的知識有了更深的理解,也為以后的工作和學習打下了很好的鋪墊。1.2論文結構安排整篇論文共分為六章,其主要內容安排如下:第1章緒論。介紹論文的選題背景,系統的基本功能的實現以及論文結構的安排。包括課題的背景資料簡介、國內外研究現狀和發展趨勢、深入地介紹了課題研究的價值以及對未來的影響。為本系統的編寫調試提供了強大的理論依據。第2章基礎知識和相關的開發技術。這部分主要是介紹實現系統的技術支撐體系和系統的開發方法。包括:開發模型,Android技術和Java技術等,并且詳細介紹了Android的基本知識、各種特點、Android平臺的優勢和手機游戲開發的市場價值以及Java開發的詳細步驟和游戲使用的主要技術及問題。第3章系統可行性研究與需求分析。本章概要地闡述了本系統的體系結構,描述了各個功能模塊,并分析了系統功能與系統角色和流程分析,展示了本系統的流程圖,為下一章的系統的設計與實現打下基礎。第4章系統的設計和實現。這部分主要介紹了本章通過對基于Android的連連看游戲的各個功能的實現,描述了系統的設計理念、基本流程和風格定位,展示了各個模塊的模型和界面圖,全面深刻的解析了該系統所具有的全部功能極其實現的方法。對每個界面的設計以及思路進行了詳細的解釋第5章系統測試與性能分析。描述了軟件測試的基本方法、測試的總類和測試的步驟,對游戲進行了的系統測試和性能上的分析,達到了需求分析中的功能要求,實現了連連看游戲的設計。以上標志著本次基于Android的連連看游戲的設計與實現工作成功的完成。第6章總結。對整篇論文加以總結與回顧以及對未來的展望。1.3本章小結第一章主要是對課題的總體介紹,包括課題的背景資料簡介、國內外一些研究的現狀成果和發展趨勢、還深入地介紹了課題研究的價值以及對未來的影響。為本系統的編寫調試提供了強大的理論依據。
第2章基礎知識與開發技術2.1Android技術簡介2.1.1Android基本知識Android是一種基于Linux的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用“安卓”或“安致”。Android操作系統最初由AndyRubin開發,主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。隨后Google以Apache開源許可證的授權方式,發布了Android的源代碼。第一部Android智能手機發布于2008年10月。Android逐漸擴展到平板電腦及其他領域上,如電視、數碼相機、游戲機等。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。2013年的第四季度,Android平臺手機的全球市場份額已經達到78.1%。[1]2013年09月24日谷歌開發的操作系統Android在迎來了5歲生日全世界采用這款系統的設備數量已經達到10億臺。Android一詞的本義指“機器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統的名稱,該平臺由操作系統、中間件、用戶界面和應用軟件組成。Android一詞最早出現于法國作家利爾亞當(AugusteVilliersdel'Isle-Adam)在1886年發表的科幻小說《未來夏娃》(L'èvefuture)中。他將外表像人的機器起名為Android。Android的Logo是由Ascender公司設計的,誕生于2010年,其設計靈感源于男女廁所門上的圖形符號,[1]于是布洛克繪制了一個簡單的機器人,它的軀干就像錫罐的形狀,頭上還有兩根天線,Android小機器人便誕生了。其中的文字使用了Ascender公司專門制作的稱之為“Droid”的字體。Android是一個全身綠色的機器人,綠色也是Android的標志。顏色采用了PMS376C和RGB中十六進制的#A4C639來繪制,這是Android操作系統的品牌象徵。有時候,它們還會使用純文字的Logo。[1]2012年7月美國科技博客網站BusinessInsider評選出二十一世紀十款最重要電子產品,Android操作系統和iPhone等榜上有名。2.1.2Android系統特點Android系統具有如下5個特點:1.開放性。Google與開放手機聯盟合作開發了Android,Google通過與運營商、設備制造商、開發商和其他有關各方結成深層次的合作伙伴關系,希望通過建立標準化、開放式的移動電話軟件平臺,在移動產業內形成一個開放式的生態系統。2.應用程序無界限。Android上的應用程序可以通過標準API(ApplicationProgrammingInterface,應用程序編程接口)訪問核心移動設備功能。通過互聯網,應用程序可以聲明它們的功能可供其他應用程序使用。3.應用程序是在平等的條件下創建的。移動設備上的應用程序可以被替換或擴展,即使是撥號程序或主屏幕這樣的核心組件。4.應用程序可以輕松地嵌入網絡。應用程序可以輕松地嵌入HTML、JavaScript和樣式表,還可以通過WebView顯示網絡內容。5.應用程序可以并行運行。Android是一種完整的多任務環境,應用程序可以在其中并行運行。在后臺運行時,應用程序可以生成通知以引動注意。每個Android應用程序都存在于它自己的世界之中:默認情況下,每個應用程序均運行于它自己的Linux進程中。當應用程序中的任意代碼開始執行時,Android啟動一個進程,而當不再需要此進程而其它應用程序又需要系統資源時,則關閉這個進程。每個進程都運行于自己的Java虛擬機(VM)中。所以應用程序代碼實際上與其它應用程序的代碼是隔絕的。默認情況下,每個應用程序均被賦予一個唯一的Linux用戶ID,并加以權限設置,使得應用程序的文件僅對這個用戶、這個應用程序可見。當然,也有其它的方法使得這些文件同樣能為別的應用程序所訪問。使兩個應用程序共有同一個用戶ID是可行的,這種情況下他們可以看到彼此的文件。從系統資源維護的角度來看,擁有同一個ID的應用程序也將在運行時使用同一個Linux進程,以及同一個虛擬機。2.1.3Android手機平臺的優勢現在常見的智能手機平臺有:Symbian、WindowsMobile、PALM、Blackberry、iOS等。Android平臺的優勢主要體現在以下方面:1.開放性Android平臺是開放性的平臺,允許任何移動終端廠商加入到Android聯盟中來。顯著的開放性可以使其擁有更多的開發者,隨著用戶和應用的日益豐富,一個嶄新的平臺也將很快走向成熟。開放性對于Android的發展而言,有利于積累人氣,這里的人氣包括消費者和廠商,而對于消費者來講,最大的受益正是豐富的軟件資源。開放的平臺也會帶來更大競爭,如此一來,消費者將可以用更低的價位購得心儀的手機。2.掙脫運營商的束縛在過去很長的一段時間,手機應用往往受到運營商制約,使用什么功能接入什么網絡,幾乎都要受到運營商的控制。自從Android上市,用戶可以更加方便地連接網絡,運營商的制約減少。隨著EDGE、HSDPA這些2G至3G移動網絡的逐步過渡和提升,手機隨意接入網絡已不再是運營商口中的笑談。3.豐富的硬件選擇這一點還是與Android平臺的開放性相關。由于Android的開放性,眾多的廠商會推出千奇百怪,功能特色各異的多種產品。功能上的差異和特色,卻不會影響到數據同步、甚至軟件的兼容。例如你從諾基亞Symbian風格手機一下改用蘋果iPhone,同時還可Symbian中優秀的軟件帶到iPhone上使用、聯系人等個人資料更是可以方便地轉移。4.開發手機軟件不受任何限制Android平臺提供給第三方開發商一個十分寬泛、自由的環境。因此不會受到各種條條框框的阻擾,可想而知,如此一來會有多少新穎別致的軟件誕生。5.無縫結合的Google應用如今叱咤互聯網的Google已經走過了10年度的歷史。從搜索巨人到全面的互聯網滲透,Google服務如地圖、郵件、搜索等已經成為連接用戶和互聯網的重要紐帶,而Android平臺手機將無縫結合這些優秀的Google服務。正因為Android具有以上的優越性,所以2010年末數據顯示,僅正式推出兩年Android操作系統就將要超越稱霸十年的諾基亞Symbian系統,使之躍居全球最受歡迎的智能手機平臺。2.2Java技術簡介Android以Java作為開發語言,JDK是進行Java開發時必需的開發包。Java是由SunMicrosystems公司于1995年5月推出的Java面向對象程序設計語言(以下簡稱Java語言)和Java平臺的總稱。由JamesGosling和同事們共同研發,并在1995年正式推出。Java最初被稱為Oak,是1991年為消費類電子產品的嵌入式芯片而設計的。1995年更名為Java,并重新設計用于開發Internet應用程序。用Java實現的HotJava瀏覽器(支持Javaapplet)顯示了Java的魅力:跨平臺、動態的Web、Internet計算。從此,Java被廣泛接受并推動了Web的迅速發展,常用的瀏覽器均支持Javaapplet。另一方面,Java技術也不斷更新。(2010年Oracle公司收購了SUN)與傳統程序不同,Sun公司在推出Java之際就將其作為一種開放的技術。全球數以萬計的Java開發公司被要求所設計的Java軟件必須相互兼容。“Java語言靠群體的力量而非公司的力量”公司的口號之一,并獲得了廣大軟件開發商的認同。這與微軟公司所倡導的注重精英和封閉式的模式完全不同。Sun公司對Java編程語言的解釋是:Java編程語言是個簡單、面向對象、分布式、解釋性、健壯、安全與系統無關、可移植、高性能、多線程和動態的語言。Java平臺是基于Java語言的平臺。這樣的平臺非常流行。因此微軟公司推出了與之競爭的.NET平臺以及模仿Java的C#語言。Java是功能完善的通用程序設計語言,可以用來開發可靠的、要求嚴格的應用程序。抽象類:規定一個或多個抽象方法的類別本身必須定義為abstract,抽象類只是用來派生子類,而不能用它來創建對象。final類:又稱“最終類”,它只能用來創建對象,而不能被繼承,與抽象類剛好相反,而且抽象類與最終類不能同時修飾同一個類。包:Java中的包是相關類和接口的集合,創建包須使用關鍵字package。多態類:在java中,對象變量是多態的。而java中不支持多重繼承。接口:Java中的接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。Java中的每一個類都是從Object類擴展而來的。object類中的equal和toString方法。equal用于測試一個對象是否同另一個對象相等。toString返回一個代表該對象的字符串,每一個類都會從Object類繼承該方法,有些類重寫了該方法,以便返回當前狀態的正確表示。(toString方法是一個很重要的方法)通用編程:任何類類型的所有值都可以同object類型的變量來代替。封裝:就是把數據和行為結合起在一個包中,并對對象使用者隱藏數據的實現過程,一個對象中的數據叫他的實例字段(instancefield)。重載:當多個方法具有相同的名字而含有不同的參數時,便發生重載。編譯器必須挑選出調用哪個方法進行編譯。重寫:也可稱為方法的“覆蓋。”在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類并不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。值得注意的是,子類在重新定義父類已有的方法時,應保持與父類完全相同的方法頭聲明。數組列表:ArrayList動態數組列表,是一個類庫,定義在java.util包中,可自動調節數組的大小。class類object類中的getclass方法返回class類型的一個實例,程序啟動時包含在main方法的類會被加載,虛擬機要加載他需要的所有類,每一個加載的類都要加載它需要的類。基本語法編輯編寫Java程序時,應注意以下幾點:大小寫敏感:Java是大小寫敏感的,這就意味著標識符Hello與hello是不同的。類名:對于所有的類來說,類名的首字母應該大寫。如果類名由若干單詞組成,那么每個單詞的首字母應該大寫,例如MyFirstJavaClass。方法名:所有的方法名都應該以小寫字母開頭。如果方法名含有若干單詞,則后面的每個單詞首字母大寫。源文件名:源文件名必須和類名相同。當保存文件的時候,你應該使用類名作為文件名保存(切記Java是大小寫敏感的),文件名的后綴為.java。(如果文件名和類名不相同則會導致編譯錯誤)。主方法入口:所有的Java程序由publicstaticvoidmain(String[]args)方法開始執行。2.3本章小結本章介紹了本系統的開發環境,系統的開發方法,并且詳細介紹了Android的基本知識、各種特點、Android平臺的優勢和手機游戲開發的市場價值以及Java技術簡介、開發的詳細步驟和游戲使用的主要技術及問題。
第3章系統分析與設計3.1可行性分析3.1.1操作可行性游戲的操作可行性其實是一個游戲成功與否的關鍵,在很多著名游戲中游戲操作合理性經常成為玩家討論的焦點,所以說游戲設計的合理性既是需要考慮的關鍵也是對玩家選擇此游戲的主要吸引力。游戲時間不能過長也不能過短,在經過反復思考和老師的指導后,決定將時間做成第一關100秒左右,往后逐漸遞減。這一決定保證了游戲的正常完成,同時也是考慮到了制作時間的限制。在“連連看游戲”設計中,在游戲中玩家可以通過每消去兩個圖片,都可以得到增加游戲剩余時間的機會。而在進入第二關后,隨著游戲復雜性和難度的提升,再加上游戲時間的逐漸減少,因而在這樣的設計下,玩家可以感受到游戲的可玩性,同時也可以享受到完成游戲的成就感。3.1.2技術可行性Android以Java作為開發語言,JDK是進行Java開發時必需的開發包。進行開發前先要建立合適的開發環境,其中基于Java的整合型可擴展平臺Eclipse是我們的首選。Eclipse是一款非常優秀的開源IDE,Google官方也提供了基于Eclipse的Android開發插件ADT,Android平臺為開發者提供了源碼開放的軟件開發包(SDK),它包含了使用Java語言開發Android平臺應用的必要工具和組件(API)。在大量插件的配合下,完全可以滿足從企業級Java應用到手機終端Java游戲的開發。Eclipse是一款很好的動畫游戲制作軟件。它完全符合面向對象編程的要求,大大的提升了程序編寫的能力。而且在Eclipse軟件中,它自帶了一些常用的組件。這為我們對這各組件開發提供了很大的幫助。因此在技術上是可行的。3.1.3經濟可行性開發該系統所需的相關資料可以通過已存在的相關系統進行調查采集,所需的其他應用軟件、硬件系統也易于獲得.因此,開發成本較低。而引進使用本系統后,與傳統方式相比,具有高效率、低成本、高質量的特點,可以節省不少人力、物力及財力。所以,從經濟的角度來看,該系統可行。3.1.4社會可行性本游戲豐富的道具和公共模式的加入,增強游戲的競爭性。多樣式的地圖,使玩家在各個游戲水平都可以尋找到挑戰的目標,長期地保持游戲的新鮮感。Android游戲的大量玩家是年輕人,而現在年輕人的巨大的消費潛力使得本游戲開發具有社會可行性。3.2功能需求分析業務邏輯模塊主要是對數據進行邏輯處理。主要可分為三大模塊即歡迎模塊、游戲模塊、圖形模塊。(1)歡迎模塊打開軟件后,首先展示給用戶的是一個歡迎動畫,隨后就是主界面,包含了“開始游戲”模塊。(2)游戲模塊玩家點擊“開始游戲”后,進入游戲界面。用戶點擊開始游戲后,系統開始倒計時,屏幕最上行有倒計時的時間進度條,第一關設置時間為100s。玩家每消掉任何一對圖形會出現線條連路方式出現以及顯示消圖效果發出消圖聲音。如果玩家在規定的時間內將所有的圖形消掉,系統提示玩家:恭喜過關。在系統所給的時間內沒有消掉所有圖形則將退出游戲,并提示:游戲結束!如果游戲出現了死鎖的情況(也就是說沒有圖形可以相消的情況),系統會提示玩家:沒有可以消的方塊了,請使用游戲道具“重排”,然而“重排”每一次的游戲中最多只能用兩次,如果重列用完了之后還出玩死鎖情況,系統便自動再次重新排列,直到不出現死鎖。(3)圖形模塊圖形模塊是用來管理圖形的。包括圖形的圖片,圖形的隨機排列,圖形的顯示和消除等。3.3系統基本流程本游戲是一款基于Android的手機連連看游戲,玩家進入游戲后,進入主界面,顯示開始游戲、游戲設置、游戲介紹、游戲幫助和退出游戲。當玩家點擊“開始游戲”后,玩家在規定時間內消去全部圖片,即可進入下一關,如果沒有在規定時間內消去全部圖片,則失敗。當玩家所得的分數高于游戲中排行榜的分數,則可以在排行榜上保存姓名和得分。當玩家在菜單里選擇“退出游戲”后,將進入系統主界面。當玩家點擊“保存退出”后,將進入系統主界面,當玩家點擊“關于游戲”后,可以看到游戲的排行榜,也可以清除排行榜的記錄,還可以看到游戲的幫助文檔,向玩家介紹本游戲的使用方法。當玩家點擊主界面的“退出游戲”,即退出連連看游戲程序。3.4系統模塊設計1.系統總體設計,總共分為五個模塊,分別是:“菜單設計”,“界面設計”,“算法設計”,“消息響應設計”和“用戶管理設計”,如圖3-3所示。圖3-3系統總體設計2.系統詳細設計(1)菜單設計,總共分為四個模塊,分別是:“開始游戲”,“規則說明”和“退出游戲”,如圖3-4所示。圖3-4菜單設計(2)界面設計,總共分為三個模塊,分別是:“框架設計”,“地圖設計”和“進度條設計”,如圖3-5所示。圖3-5界面設計(3)算法設計,總共分為兩個個模塊,分別是:“畫線設計”和“消除算法設計”,如圖3-6所示。圖3-6算法設計3.4消息響應設計總共分為三個模塊,分別是:“鼠標響應”,“時間響應”和“繪圖響應”,如圖3-7所示。圖3-7消息響應設計用戶管理設計,只有排行榜設計一個模塊,只有當排行榜為空或者玩家得分超過排行榜,才用得到,如圖3-8所示。圖3-8用戶管理設計3.5圖形連通算法設計每次用戶選擇兩個圖形,如果圖形滿足一定條件(兩個圖形一樣,且這兩個圖形之間存在轉彎少于3的路徑),則兩個圖形都能消掉。給定任意具有相同圖形的兩個格子,我們需要尋找這兩個格子之間在轉彎最少的情況下,經過格子數目最少的路徑。如果這個最優路徑的轉彎數目少于3,則這兩個格子可以消去。在檢驗兩個方塊能否消掉的時候,我們要讓兩個方塊同時滿足兩個條件才行,就是兩者配對并且連線成功。下面的這三種情況,我們可以知道,需要三個檢測,這三個檢測分別檢測一條直路經。這樣就會有三條路徑。若這三條路徑上都是空按鈕,那么就剛好是三種直線(兩個轉彎點)把兩個按鈕連接起來了。1.相鄰。直接連接消除。2.若不相鄰的先在第一個按鈕的同行找一個空按鈕。(1)找到后看第二個按鈕橫向到這個空按鈕所在的列是否有按鈕;(2)沒有的話再看第一個按鈕到與它同行的那個空按鈕之間是否有按鈕;(3)沒有的話,再從與第一個按鈕同行的那個空按鈕豎向到與第二個按鈕的同行看是否有按鈕。沒有的話路徑就通了,可以消了。3.若2失敗后,再在第一個按鈕的同列找一個空按鈕。(1)找到后看第二個按鈕豎向到這個空按鈕所在的行是否有按鈕;(2)沒有的話,再看第一個按鈕到與它同列的那個空按鈕之間是否有按鈕;(3)沒有的話,再從與第一個按鈕同列的那個空按鈕橫向到與第二個按鈕同列看是否有按鈕。沒有的話路徑就通了,可以消了。若以上三步都失敗,說明這兩個按鈕不可以消去。3.6系統風格定位Android游戲的大量玩家是年輕人,鑒于這點我的設計風格選擇了水果,圖片基本上都是可愛的水果。這樣設計首先是基于用戶群,第二在參考了很多網上的連連看游戲,多數是紙牌造型,所以這樣可以讓本游戲變得更有個性。同時也嘗試了很多其他的風格,但最后還是覺得水果風格最適合本游戲。3.7本章小結本章概要地闡述了本系統的體系結構,描述了各個功能模塊,并分析了系統功能與系統角色和流程分析,為下一章的系統的設計與實現打下基礎。
第4章系統的設計與實現4.1系統運行界面圖1. 歡迎界面,如圖4-1所示。圖4-1歡迎界面2. 點擊一次“開始游戲”,進入游戲界面.如圖4-2所示。圖4-2開始游戲3. 游戲進行時,消除圖片時會出現連線路徑,如圖4-3所示。圖4-3運行界面4.在規定時間內消除所有之后,游戲勝利,如圖4-4。圖4-4勝利界面5.未在規定時間內消除所有,游戲失敗,如圖4-5。圖4-5失敗界面4.2開發環境的搭建4.2.1下載Eclipse首先我們需要下載Android開發時會用到的整合開發環境Eclipse。目前Android應用程式只支援使用Java來編寫Android應用程式。所以開發前必須先安裝Java開發套件(JavaDevelopmentKit,JDK)。各平臺的JDK可至/下載。安裝好JDK后,我們可以前往Eclipse網站下載Eclipse這個方便的整合開發環境。下載Eclipse時選EclipseIDEforJavaDevelopers或EclipseIDEforJavaEEDevelopers這兩種版本,只有這兩種版本才會預裝EclipseJDT擴充套件。下載完同樣先解壓縮到適當目錄下。4.2.2安裝EclipseEclipse不需要安裝,只要確認你的系統上有安裝Java,即可直接開啟Eclipse資料夾,點擊Eclipse開始執行Eclipse整合開發環境。第一次啟動Eclipse時會彈出視窗讓你決定預設的工作目錄。一般使用Eclipse預設的工作目錄即可。進入到EclipseIDE后,安裝Android開發工具擴充套件。4.2.3Eclipse安裝ADT擴充套件下載完最新的ADT擴充套件后,打開Eclipse開發環境。選擇Help->SoftwareUpdates選項,這選項會帶出一個新視窗。選擇AvailableSoftware標簽,選擇右方的AddSite...(新增網站)按鈕,會彈出一個輸入框。選擇右上角的Local...按鈕,并選取剛下載的Android最新開發工具檔案,選到之后按下“OK”按鈕離開。在視窗中全選新出現項目的所有選項后,按下右方的Install按鈕。4.2.4下載AndroidSDK接著我們要從/p/Androidbmi/wiki/下載Android軟體開發套件(SoftwareDevelopmentKit,SDK)。下載下來的SDK檔案需要先解壓縮。Windows平臺需要先另行安裝解壓縮程式,如免費的7-zip解壓縮工具。將解壓縮后的AndroidSDK檔案夾命名為Android_sdk。在Eclipse打開偏好設定頁面Preference,選擇Android標簽,在SDKLocation欄位按下“Browse...”鍵,選擇剛剛解壓縮完的Android_sdk檔案夾所在地,然后按下視窗右下角的套用Apply按鈕。這樣AndroidSDK就設定完畢。4.3部分代碼綜訴:此部分為音樂代碼。包括了音效的音量,當游戲為開始界面時,調用專門的一段音樂;在進入游戲后,當點擊某一圖片時,調用點擊聲音,點擊另一張圖片時,如果兩張圖片相同,且兩張圖片能夠連通,則調用連通聲音,如果不能連通,當點擊第二張圖片時,仍是點擊圖片聲音。以下是部分示例代碼:packagewhu.iss.sric.android;importjava.util.HashMap;importandroid.content.Context;importandroid.media.AudioManager;importandroid.media.SoundPool;publicclassSoundPlay{ //音效的音量 intstreamVolume;//定義SoundPool對象 privateSoundPoolsoundPool; //定義HASH表 privateHashMap<Integer,Integer>soundPoolMap; /*************************************************************** *Function:initSounds();Parameters:nullReturns:None.Description: *初始化聲音系統Notes:none. ***************************************************************/ publicvoidinitSounds(Contextcontext){ //初始化soundPool對象,第一個參數是允許有多少個聲音流同時播放,第2個參數是聲音類型,第三個參數是聲音的品質 soundPool=newSoundPool(25,AudioManager.STREAM_MUSIC,100); //初始化HASH表 soundPoolMap=newHashMap<Integer,Integer>(); //獲得聲音設備和設備音量 AudioManagermgr=(AudioManager)context .getSystemService(Context.AUDIO_SERVICE); streamVolume=mgr.getStreamVolume(AudioManager.STREAM_MUSIC); } /** *把資源中的音效加載到指定的ID(播放的時候就對應到這個ID播放就行了) *Function:loadSfx();Parameters:nullReturns:None.Description:加載音效資源 *Notes:none. */ publicvoidloadSfx(Contextcontext,intraw,intID){ soundPoolMap.put(ID,soundPool.load(context,raw,1)); }/*************************************************************** *Function:play();Parameters:sound:要播放的音效的ID,loop:循環次數Returns:None. *Description:播放聲音Notes:none. ***************************************************************/ publicvoidplay(intsound,intuLoop){ soundPool.play(soundPoolMap.get(sound),streamVolume,streamVolume,1, uLoop,1f); }} 綜訴:游戲中消除圖片的判斷。判斷兩張圖片能否被消除要滿足兩個條件,一個是兩張圖片是否相同,只有兩張圖片相同時才能進行消除;另一個條件是判斷兩個圖片之間是否能夠連通,分三種情況,一種是兩張圖片在同一條直線上,要么同一行,要么同一列,且這兩張圖片之間沒有其他圖片阻擋。還有一種情況是兩張圖片之間需要通過一個拐點才能連通,這就需要找到那個拐點,拐點需要滿足它的X軸與拐點的X軸相同,另一張圖片的Y軸與拐點的Y軸相同,或者一張圖片的Y軸與拐點的Y軸相同,另一張圖片的X軸與拐點的X軸相同,且兩張圖片都與拐點連通。再有就是兩張圖片需要兩個拐點才能連通,那就把其中一個拐點當做一張和所選圖片相同的圖片,再按照一個拐點的方法找到一個拐點,再找到另一個能與已找到的拐點連通的拐點即可。 以下是部分示例代碼:packagewhu.iss.sric.android;importwhu.iss.sric.view.GameView;importandroid.app.AlertDialog;importandroid.app.Dialog;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.ImageButton;importandroid.widget.TextView;publicclassMyDialogextendsDialogimplementsOnClickListener{ privateGameViewgameview; privateContextcontext; publicMyDialog(Contextcontext,GameViewgameview,Stringmsg,inttime){ super(context,R.style.dialog); this.gameview=gameview; this.context=context; this.setContentView(R.layout.dialog_view); TextViewtext_msg=(TextView)findViewById(R.id.text_message); TextViewtext_time=(TextView)findViewById(R.id.text_time); ImageButtonbtn_menu=(ImageButton)findViewById(R.id.menu_imgbtn); ImageButtonbtn_next=(ImageButton)findViewById(R.id.next_imgbtn); ImageButtonbtn_replay=(ImageButton)findViewById(R.id.replay_imgbtn); text_msg.setText(msg); text_time.setText(text_time.getText().toString().replace("$",String.valueOf(time))); btn_menu.setOnClickListener(this); btn_next.setOnClickListener(this); btn_replay.setOnClickListener(this); this.setCancelable(false); } @Override publicvoidonClick(Viewv){//點擊時判斷是否為同一圖片 this.dismiss(); switch(v.getId()){ caseR.id.menu_imgbtn: Dialogdialog=newAlertDialog.Builder(context).setIcon(R.drawable.buttons_bg20).setTitle(R.string.quit).setMessage(R.string.sure_quit).setPositiveButton(R.string.alert_dialog_ok,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){ ((WelActivity)context).quit();}}).setNegativeButton(R.string.alert_dialog_cancel,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){}}).create(); dialog.show();// gameview.startPlay();// Toast.makeText(context,text,duration); break; caseR.id.replay_imgbtn: gameview.startPlay(); break; caseR.id.next_imgbtn: gameview.startNextPlay(); break; } }} 綜訴:這是界面設定部分。對界面的布局,進度條的位置和設定,對圖片框架的大小和尺寸,對刷新剩余圖片和消除圖片的位、尺寸進行了設定。同時還對每個圖片的大小進行了設定。指定了圖片的來源和圖片在棋盤中的位置,使得圖片的位置數字化,為獲得圖片位置判斷是否連通提供了條件。 在進行界面設定時,在最外層圖片外圍設定了一圈絕對通暢的線路,使得最外層不相鄰但是相同的圖片可以連接。 以下是部分示例代碼:packagewhu.iss.sric.view;importjava.util.ArrayList;importjava.util.List;importwhu.iss.sric.android.R;importandroid.app.Activity;importandroid.content.Context;importandroid.content.res.Resources;importandroid.graphics.Bitmap;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.graphics.Point;importandroid.graphics.Rect;importandroid.graphics.drawable.Drawable;importandroid.util.AttributeSet;importandroid.util.DisplayMetrics;importandroid.view.View;publicclassBoardViewextendsView{ /** *xCountx軸方向的圖標數+1 */ protectedstaticfinalintxCount=10; /** *yCounty軸方向的圖標數+1 */ protectedstaticfinalintyCount=12; /** *map連連看游戲棋盤 */ protectedint[][]map=newint[xCount][yCount]; /** *iconSize圖標大小 */ protectedinticonSize; /** *iconCounts圖標的數目 */ protectedinticonCounts=19; /** *icons所有的圖片 */ protectedBitmap[]icons=newBitmap[iconCounts]; /** *path可以連通點的路徑 */ privatePoint[]path=null; /** *selected選中的圖標 */ protectedList<Point>selected=newArrayList<Point>(); publicBoardView(Contextcontext,AttributeSetatts){ super(context,atts); calIconSize(); Resourcesr=getResources(); loadBitmaps(1,r.getDrawable(R.drawable.fruit_01)); loadBitmaps(2,r.getDrawable(R.drawable.fruit_02)); loadBitmaps(3,r.getDrawable(R.drawable.fruit_03)); loadBitmaps(4,r.getDrawable(R.drawable.fruit_04)); loadBitmaps(5,r.getDrawable(R.drawable.fruit_05)); loadBitmaps(6,r.getDrawable(R.drawable.fruit_06)); loadBitmaps(7,r.getDrawable(R.drawable.fruit_07)); loadBitmaps(8,r.getDrawable(R.drawable.fruit_08)); loadBitmaps(9,r.getDrawable(R.drawable.fruit_09)); loadBitmaps(10,r.getDrawable(R.drawable.fruit_10)); loadBitmaps(11,r.getDrawable(R.drawable.fruit_11)); loadBitmaps(12,r.getDrawable(R.drawable.fruit_12)); loadBitmaps(13,r.getDrawable(R.drawable.fruit_13)); loadBitmaps(14,r.getDrawable(R.drawable.fruit_14)); loadBitmaps(15,r.getDrawable(R.drawable.fruit_15)); loadBitmaps(16,r.getDrawable(R.drawable.fruit_17)); loadBitmaps(17,r.getDrawable(R.drawable.fruit_18)); loadBitmaps(18,r.getDrawable(R.drawable.fruit_19)); } /** * *計算圖標的長寬 */ privatevoidcalIconSize(){DisplayMetricsdm=newDisplayMetrics();((Activity)this.getContext()).getWindowManager() .getDefaultDisplay().getMetrics(dm);iconSize=dm.widthPixels/(xCount);} /** * *@paramkey特定圖標的標識下的資源 *@paramddrawable */ publicvoidloadBitmaps(intkey,Drawabled){ Bitmapbitmap=Bitmap.createBitmap(iconSize,iconSize,Bitmap.Config.ARGB_8888); Canvascanvas=newCanvas(bitmap); d.setBounds(0,0,iconSize,iconSize); d.draw(canvas); icons[key]=bitmap; } @Override protectedvoidonDraw(Canvascanvas){ /** *繪制連通路徑,然后將路徑以及兩個圖標清除 */ if(path!=null&&path.length>=2){ for(inti=0;i<path.length-1;i++){ Paintpaint=newPaint(); paint.setColor(Color.CYAN); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(3); Pointp1=indextoScreen(path[i].x,path[i].y); Pointp2=indextoScreen(path[i+1].x,path[i+1].y); canvas.drawLine(p1.x+iconSize/2,p1.y+iconSize/2, p2.x+iconSize/2,p2.y+iconSize/2,paint); } Pointp=path[0]; map[p.x][p.y]=0; p=path[path.length-1]; map[p.x][p.y]=0; selected.clear(); path=null; } /** *繪制棋盤的所有圖標當這個坐標內的值大于0時繪制 */ for(intx=0;x<map.length;x+=1){ for(inty=0;y<map[x].length;y+=1){ if(map[x][y]>0){ Pointp=indextoScreen(x,y); canvas.drawBitmap(icons[map[x][y]],p.x,p.y,null); } } } /** *繪制選中圖標,當選中時圖標放大顯示 */ for(Pointposition:selected){ Pointp=indextoScreen(position.x,position.y); if(map[position.x][position.y]>=1){ canvas.drawBitmap(icons[map[position.x][position.y]], null, newRect(p.x-5,p.y-5,p.x+iconSize+5,p.y+iconSize+5),null); } } } /** * *@parampath */ publicvoiddrawLine(Point[]path){ this.path=path; this.invalidate(); } /** *工具方法 *@paramx數組中的橫坐標 *@paramy數組中的縱坐標 *@return將圖標在數組中的坐標轉成在屏幕上的真實坐標 */ publicPointindextoScreen(intx,inty){ returnnewPoint(x*iconSize,y*iconSize); } /** *工具方法 *@paramx屏幕中的橫坐標 *@paramy屏幕中的縱坐標 *@return將圖標在屏幕中的坐標轉成在數組上的虛擬坐標 */ publicPointscreenToindex(intx,inty){ intix=x/iconSize; intiy=y/iconSize; if(ix<xCount&&iy<yCount){ returnnewPoint(ix,iy); }else{ returnnewPoint(0,0); } }} 綜訴:這部分是UI界面的設定.主要運用了Android語言提供的強大的包,Layout類里面有很多可以直接拿來用的方法,幫助我們來實現界面. 在這個程序的界面里,我們主要用到了TextView,LinearLayout,ImageButton,等布局模塊,大大方便了我們對界面的設定.以下是部分示例代碼:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"android:id="@+id/view_dialog"android:layout_width="match_parent"android:layout_height="match_parent"> <TextViewandroid:id="@+id/text_message" android:layout_height="wrap_content" android:layout_width="fill_parent" android:textColor="@android:color/white" android:gravity="center_horizontal" android:textSize="18sp" /> <TextViewandroid:id="@+id/text_time" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="@string/time" android:layout_below="@id/text_message" android:textColor="@android:color/white" android:gravity="center_horizontal" android:textSize="18sp" />
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省濟南市萊蕪區市級名校2024-2025學年初三下學期第五次模擬考試語文試題含解析
- 臨床免疫學檢驗課件 第17章 補體的檢測及應用學習資料
- 山東菏澤市曹縣重點中學2024-2025學年初三復習統一檢測試題數學試題含解析
- 廊坊師范學院《材料電化學》2023-2024學年第二學期期末試卷
- 遼寧省沈陽市實驗北重點名校2025年第二次高中畢業生復習統一檢測試題生物試題含解析
- 陜西西安市愛知中學2025年初三第二次診斷性考試數學試題含解析
- 二零二五應聘護士勞動的合同
- 年薪合同書協議書二零二五年
- 二零二五產品設計合同書范例
- 二零二五版正式正規離婚協議書
- 員工食堂就餐協議書
- 創傷緊急救護知識課件
- 醫院單位單位內部控制自我評價報告
- 湖北省第十屆湖北省高三(4月)調研模擬考試數學試題及答案
- 五一勞動節前安全檢查重點
- 2025年03月廣東深圳市光明區科技創新局公開招聘專干5人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 內蒙古通遼市科左中旗實驗小學2025屆數學三下期末質量檢測試題含解析
- 高溫急救知識培訓
- 學前教育學 課件 第1、2章 緒論;學前教育的目標、內容的方法
- 2025北京豐臺高三一模物理試題及答案
- 江南美術遺產融入美育的數智化路徑探索
評論
0/150
提交評論