版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于Android平臺五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)摘要:隨著移動(dòng)互聯(lián)時(shí)代的到來以及智能手機(jī)的普及,人們的生活?yuàn)蕵贩绞揭哺鴷r(shí)代的腳步逐漸向移動(dòng)端發(fā)展。Android平臺憑借其開放性及穩(wěn)定性吸引了大量的用戶和開發(fā)者,稱為了目前用戶最多、發(fā)展最快的移動(dòng)終端操作系統(tǒng)。本文著重于研究基于Android操作系統(tǒng)的手機(jī)游戲,擬將中國傳統(tǒng)的現(xiàn)實(shí)類小游戲五子棋遷移到移動(dòng)端。通過對該五子棋游戲的設(shè)計(jì)與開發(fā),進(jìn)一步的了解Android操作系統(tǒng)。本游戲有三個(gè)模塊,分別是游戲開始界面,游戲運(yùn)行界面和游戲結(jié)束選擇界面,分別實(shí)現(xiàn)游戲的各個(gè)功能。由于Java語言能更好的兼容Android操作系統(tǒng),本文采用Java語言進(jìn)行開發(fā),配合Eclipse開發(fā)工具,開發(fā)出功能完善,界面美觀的五子棋游戲。本次基于Android的五子棋游戲采用了MVC框架模式,將業(yè)務(wù)邏輯,數(shù)據(jù),界面顯示分離開來,把五子棋的核心算法即業(yè)務(wù)邏輯聚集到一起,使界面和用戶交互聚集在一起,降低代碼耦合度,提高了程序設(shè)計(jì)的效率。關(guān)鍵詞:五子棋游戲;Android;MVC框架模式一、緒論(一)課題的選題背景隨著移動(dòng)互聯(lián)時(shí)代的到來,智能手機(jī)已經(jīng)成為人們生活中必不可少的一種通訊工具。智能手機(jī)的發(fā)展之路迅速而快捷,其發(fā)展?fàn)顩r可謂是日新月異。在如此快速前行的路上,應(yīng)運(yùn)而生的Android操作系統(tǒng)僅經(jīng)過幾年的發(fā)展,就已經(jīng)占據(jù)了很大市場。Android系統(tǒng)的普及促使越來越多的開發(fā)人員投入Android開發(fā)之中。但早期Android剛推出時(shí),許多大的游戲廠商卻對它望而卻步。持這種觀望態(tài)度的主要原因就是Android版本更新的速度太快,兼容性存在問題。但這種情況在2010年以后得到解決,隨著Android版本的穩(wěn)定以及游戲產(chǎn)業(yè)的蓬勃發(fā)展,大牌廠商開始進(jìn)入Android平臺,為帶來了高端的游戲體驗(yàn)。同時(shí),三星、索尼也正在積極的研發(fā)基于Android平臺的游戲手機(jī),這一切都標(biāo)志著Android游戲的春天來臨。事實(shí)證明,對這種種跡象的預(yù)測是正確的。五年過后的現(xiàn)在,各種游戲公司開始就Android游戲展開布局,手機(jī)游戲再次以其便攜性成為人們喜歡的休閑活動(dòng),成功地挑戰(zhàn)了傳統(tǒng)PC端游戲,成為當(dāng)前游戲發(fā)展的主力。國際上有Gameloft、Gamevil、EA等公司著手研發(fā);國內(nèi)除了老牌的傳統(tǒng)游戲公司,像騰訊,完美世界,盛大等,還新生了一批專業(yè)研發(fā)移動(dòng)端游的公司,像頑石互動(dòng),觸控科技等。Android平臺以其優(yōu)越性成功的吸引了眾多游戲公司及獨(dú)立開發(fā)者的青睞。在Android游戲風(fēng)靡世界的征途上,許多經(jīng)典游戲都做出了卓越的貢獻(xiàn)?!稇嵟男▲B》、《水果忍者》、《找你妹》、《神廟逃亡》、《捕魚達(dá)人》等等,這些耳熟能詳?shù)挠螒蛎衷贏ndroid游戲發(fā)展史上留下了濃墨重彩的一筆。與此同時(shí),隨著高通、英偉達(dá)等硬件廠商對Android游戲市場的關(guān)注,以及OpenGL對Android渲染優(yōu)化的支持,Android游戲的品質(zhì)也因?yàn)榘l(fā)展平臺的擴(kuò)充而越來越顯上乘化。畫質(zhì)細(xì)膩,場景唯美的大型3D手機(jī)游戲也陸續(xù)出現(xiàn)。先是由TrendyEntertainment公司用虛幻3引擎開發(fā)的《地牢守護(hù)者》橫空出世,在當(dāng)年的Android手游中大放異彩。后來又陸續(xù)出現(xiàn)《細(xì)胞分裂5》、《刺客信條》、《地牢獵手》、《FIFA10》、《阿凡達(dá)》、《天下HD》等基于Android的高品質(zhì)3D手游。這一切的發(fā)展都見證著Android游戲的蓬勃生命力。(二)課題的目的和意義隨著現(xiàn)代生活節(jié)奏的加快,越來越多的人感覺到生活的壓力,對一成不變的生活方式感到煩悶,因此需要一些調(diào)節(jié)來暫緩節(jié)奏,舒緩心情。本設(shè)計(jì)通過開發(fā)基于Android平臺的五子棋游戲,實(shí)現(xiàn)不同難度的人機(jī)對弈,能夠達(dá)到休閑的目的。在休閑之余還能益智,給快節(jié)奏的生活帶來一些樂趣。由于五子棋的策略性,可以有效地鍛煉思維嚴(yán)密程度,訓(xùn)練邏輯及思維延展性,一舉兩得。五子棋游戲看似簡單,但開發(fā)過程中用到的搜索算法卻與人工智能運(yùn)算相關(guān)。人工智能是當(dāng)前計(jì)算機(jī)發(fā)展的前沿學(xué)科,研究的是使用各種算法使機(jī)器能夠像人一樣聽說讀寫,甚至是思考。而本次五子棋游戲的開發(fā)使用的搜索算法屬于人工智能學(xué)科中的博弈分支,它通過推理技術(shù)和搜索方法來實(shí)現(xiàn)電腦AI,通過對這些算法的使用,本游戲?qū)崿F(xiàn)了人機(jī)對弈,在博弈過程中,可以發(fā)現(xiàn)智能模擬的不足,促進(jìn)對智能算法的進(jìn)一步研究,因此本課題有一定的學(xué)術(shù)意義。(三)課題的研究的主要目標(biāo)和內(nèi)容本設(shè)計(jì)的主要目標(biāo)是設(shè)計(jì)與實(shí)現(xiàn)基于Android平臺的五子棋游戲。該游戲用該實(shí)現(xiàn):用戶打開應(yīng)用后,進(jìn)入主界面,顯示開始游戲、游戲設(shè)置和幫助。主要可分為歡迎模塊、游戲模塊和退出模塊。以人機(jī)對弈為游戲主體,實(shí)現(xiàn)人與電腦AI的對弈。電腦與玩家各執(zhí)黑子白子,輪流下棋。直到有一方連成五子即為贏棋,游戲結(jié)束。在進(jìn)行游戲的同時(shí),會(huì)播放背景音樂。(四)系統(tǒng)開發(fā)環(huán)境及相關(guān)技術(shù)1.Android簡介Android是基于Linux內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機(jī)操作系統(tǒng),早期由Google開發(fā),后由開放手持設(shè)備聯(lián)盟(Open
Handset
Alliance)開發(fā)。它采用了軟件堆層(software
stack,又名以軟件疊層)的架構(gòu),主要分為三部分。底層Linux內(nèi)核只提供基本功能;其他的應(yīng)用軟件則由各公司自行開發(fā),部分程序以Java編寫。Android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。Android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和Linux內(nèi)核層。開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡化了組件的重用,任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性)。同樣,該應(yīng)用程序重用機(jī)制也使用戶可以方便的替換程序組件。Android開發(fā)四大組件分別是:活動(dòng)(Activity):用于表現(xiàn)功能。服務(wù)(Service):后臺運(yùn)行服務(wù),不提供界面呈現(xiàn)。廣播接收器(BroadcastReceiver):用于接收廣播。內(nèi)容提供商(ContentProvider):支持在多個(gè)應(yīng)用中存儲和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫[4]。2.Eclipse簡介Eclipse是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺,專注于為高度集成的工具開發(fā)提供一個(gè)全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺。Eclipse只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(JavaDevelopmentTools,JDT)。Eclipse最初是由IBM公司開發(fā)的替代商業(yè)軟件VisualAgeforJava的下一代IDE開發(fā)環(huán)境,2001年11月貢獻(xiàn)給開源社區(qū),現(xiàn)在它由非營利軟件供應(yīng)商聯(lián)盟Eclipse基金會(huì)(EclipseFoundation)管理。2003年,Eclipse3.0選擇OSGi服務(wù)平臺規(guī)范為運(yùn)行時(shí)架構(gòu)。2007年6月,穩(wěn)定版3.3發(fā)布;2008年6月發(fā)布代號為Ganymede的3.4版;2009年6月發(fā)布代號為Galileo的3.5版;2010年6月發(fā)布代號為Helios的3.6版;2011年6月發(fā)布代號為Indigo的3.7版;2012年6月發(fā)布代號為Juno的4.2版;2013年6月發(fā)布代號為Kepler的4.3版;2014年6月發(fā)布代號為Luna的4.4版;2015年6月項(xiàng)目要發(fā)布代號為Mars的4.5版。Eclipse是著名的跨平臺的自由集成開發(fā)環(huán)境(IDE),最初主要用來Java語言開發(fā),但是目前亦有人通過插件使其作為其他計(jì)算機(jī)語言比如C++和Python的開發(fā)工具。Eclipse原本只是一個(gè)框架平臺,提供插件開發(fā)環(huán)境(Plug-inDevelopmentEnvironment,PDE),這個(gè)組件主要針對希望擴(kuò)展Eclipse的軟件開發(fā)人員,允許構(gòu)建與Eclipse環(huán)境無縫集成的工具,眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。Eclipse中的每樣?xùn)|西都是插件,Eclipse提供插件,為用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境,使所有的工具開發(fā)人員都具有同等的發(fā)揮場所。
Eclipse主要由Eclipse項(xiàng)目、Eclipse工具項(xiàng)目和Eclipse技術(shù)項(xiàng)目三個(gè)項(xiàng)目組成,具體包括四個(gè)部分組成——EclipsePlatform、JDT、CDT和PDE.JDT支持Java開發(fā)、CDT支持C開發(fā)、PDE用來支持插件開發(fā),EclipsePlatform則是一個(gè)開放的可擴(kuò)展IDE,提供了一個(gè)通用的開發(fā)平臺。它提供建造塊和構(gòu)造并運(yùn)行集成軟件開發(fā)工具的基礎(chǔ)。EclipsePlatform允許工具建造者獨(dú)立開發(fā)與他人工具無縫集成的工具。
EclipseSDK(軟件開發(fā)者包)是EclipsePlatform、JDT和PDE所生產(chǎn)的組件合并,它們可以一次下載。這些部分在一起提供了一個(gè)具有豐富特性的開發(fā)環(huán)境,允許開發(fā)者有效地建造可以無縫集成到EclipsePlatform中的工具。EclipseSDK由Eclipse項(xiàng)目生產(chǎn)的工具和來自其它開放源代碼的第三方軟件組合而成。Eclipse項(xiàng)目生產(chǎn)的軟件以CPL發(fā)布,第三方組件有各自自身的許可協(xié)議。Eclipse項(xiàng)目具有3個(gè)子項(xiàng)目,分別為平臺,開發(fā)工具箱,外部插件開發(fā)環(huán)境。這些子項(xiàng)目又細(xì)分成更多子項(xiàng)目。例如平臺子項(xiàng)目包含數(shù)個(gè)組件,如Compare、Help與Search。JDT子項(xiàng)目包括三個(gè)組件:UserInterface(UI)、核心(Core)及排錯(cuò)(Debug)。3.Java簡介Java是由SunMicrosystems公司在1995年正式推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)語言和Java平臺的總稱。由JamesGosling和同事們共同研發(fā)。Java最初被稱為Oak,是1991年為消費(fèi)類電子產(chǎn)品的嵌入式芯片而設(shè)計(jì)的。1995年更名為Java,并重新設(shè)計(jì)用于開發(fā)Internet應(yīng)用程序。SUN的工程師敏銳地察覺到HTML文檔的死板將Web變成了一潭死水,這對于那些癡迷于Web瀏覽器的人來說是致命的,他們迫切的想通過Web進(jìn)行交互。于是從1994年起,SUN工程師們開始將OAK技術(shù)應(yīng)用于WEB上,并且開發(fā)出了HotJava的第一個(gè)版本,從此Java開始風(fēng)靡。一方面,Java被廣泛接受并推動(dòng)了Web的迅速發(fā)展,常用的瀏覽器均支持Javaapplet。另一方面,Java技術(shù)也不斷更新。Java自面世后就非常流行,發(fā)展迅速。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java具備了顯著優(yōu)勢和廣闊前景。Java由四個(gè)部分組成“Java編程語言,Java文件格式,Java虛擬機(jī),Java應(yīng)用程序接口。其中,Java虛擬機(jī)是Java語言能夠跨平臺的保證,JDK也是非常重要的開發(fā)工具。Java主要分為三個(gè)體系,分別是標(biāo)準(zhǔn)版的JavaSE,企業(yè)版的JavaEE和微型版的JavaME。Java語言之所以能夠?qū)++語言造成很大的沖擊,除了它的跨平臺之外,還因?yàn)樗且环N簡單的面對對象的編程語言。它以其安全,結(jié)構(gòu)中立,可移植性得到編程人員的青睞。另外一個(gè)原因就是Java平臺內(nèi)嵌的API能縮短應(yīng)用系統(tǒng)的開發(fā)周期并降低成本,其各種組件形成了一個(gè)獨(dú)特的組件體系結(jié)構(gòu),它獨(dú)立于平臺,并與各個(gè)開源框架配合發(fā)展,這一切特性都推動(dòng)了Java的迅猛發(fā)展。4.JDK簡介JDK(JavaDevelopmentKit)是Java開發(fā)工具的簡稱。在前面已經(jīng)提到過它,但在安裝并配置它以前,需要更加深入地了解它。它是由Sun公司針對Java開發(fā)人員發(fā)布的免費(fèi)軟件開發(fā)工具包。自從Java推出以來,JDK已經(jīng)成為使用最廣泛的一套Java開發(fā)工具。2006年,Sun公司宣布將要發(fā)布基于GPL協(xié)議的開源JDK,這個(gè)決定使JDK成為開源軟件。在此基礎(chǔ)之上,Sun公司最終促成了GPL協(xié)議的OpenJDK的發(fā)布。JDK中包括很多開發(fā)、調(diào)試Java程序的工具。javac:即為Java編譯器。用來將寫好的后綴名為.java的源代碼文件逐個(gè)編譯成后綴名為.class的字節(jié)碼文件。這是Java開發(fā)中必不可少的一個(gè)程序,開發(fā)過程中用的最多的程序之一。java:它是Java字節(jié)碼的解釋程序。它可以解釋并執(zhí)行后綴名為.class的字節(jié)碼文件,前面由javac編譯好的程序就是由它來執(zhí)行的。事實(shí)上,無論是用控制臺編譯還是用Eclipse,Java程序最終都是由這個(gè)程序來解釋并執(zhí)行的。jdb:它的全名為:javadebugger,是用來調(diào)試Java程序代碼的。javadoc:這是一個(gè)自動(dòng)生成文檔的工具,它可以把Java源代碼中的注釋語句自動(dòng)整理成文檔。jar:打包工具,Java的字節(jié)碼文件是以后綴.class結(jié)尾的,當(dāng)程序文件少的時(shí)候容易管理,可是隨著程序規(guī)模的增大,它的文件也會(huì)相應(yīng)增多。為了方便管理,Java提供了將類文件進(jìn)行合并的jar工具。它可以把許多功能相關(guān)的類文件合并為一個(gè)后綴為.jar的文件,減少了文件數(shù)量,使類文件的管理變得更為有序。JDK并不是只有一個(gè)版本,各公司推出的JDK在某些地方略有不同。不過,這些不同并不會(huì)程序本身的運(yùn)行造成什么影響,它們差別只在性能以及平臺上而已。除Sun推出的官方JDK以外,其他公司的JDK主要有下面幾個(gè):基于GNU的開源JDK--GCJ(TheGNUCompilerforJava),可用在Linux系統(tǒng)上。IBM公司的J9JDK,可用在AIX、Linux、Windows等主流系統(tǒng)上。Oracle公司推出的JRockitJDK,適用于Windows、Linux及Solaris系統(tǒng)。5.AndroidSDKTools簡介AndroidSDK(softwaredevelopmentkit)Android軟件開發(fā)工具包。被軟件開發(fā)工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應(yīng)用軟件的開發(fā)工具的集合。AndroidSDKTools是Android專屬的軟件開發(fā)工具包,其中包括Android模擬器,用于在計(jì)算機(jī)上虛擬移動(dòng)設(shè)備,進(jìn)行設(shè)計(jì)和調(diào)試程序。若想在Eclipse中開發(fā)Android應(yīng)用,AndroidSDKTools必不可少。6.MVC框架MVC全名是ModelViewController,是模型(model)-視圖(view)-控制器(controller)的縮寫,是一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯。MVC被獨(dú)特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中。(1)模型(Model):表示程序運(yùn)行的核心;(2)視圖(View):顯示數(shù)據(jù);(3)控制器(Controller):處理數(shù)據(jù)。MVC是一個(gè)框架模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開。使用MVC的應(yīng)用程序被分成三個(gè)核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)。(五)系統(tǒng)開發(fā)平臺及運(yùn)行環(huán)境配置1.系統(tǒng)開發(fā)平臺系統(tǒng)開發(fā)環(huán)境及工具操作系統(tǒng):Win7開發(fā)工具:Eclipse(2)運(yùn)行環(huán)境操作系統(tǒng):Android2.2及以上版本。2.系統(tǒng)開發(fā)環(huán)境配置(1)JDK配置首先需要到Oracle官方網(wǎng)站下載開發(fā)所需的JDK,也就是Java開發(fā)環(huán)境。下載完畢后解壓到一個(gè)文件目錄下,記住這個(gè)目錄,配置變量時(shí)要用到這個(gè)目錄。本機(jī)的目錄是:C:\ProgramFiles\Java\jdk1.7.0_67然后右鍵點(diǎn)擊計(jì)算機(jī)→屬性→系統(tǒng)屬性設(shè)置→高級→環(huán)境變量,如圖1.1:圖1.1環(huán)境變量找到系統(tǒng)變量,新建一個(gè)JAVA_HOME變量,填寫變量值為JDK的安裝目錄。在系統(tǒng)變量中尋找PATH變量,選擇編輯,在PATH下方變量值文本框中輸入;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(前面的分號不能省略,如果原來PATH變量末尾值有分號,則不用輸入。)圖1.2PATH設(shè)置在系統(tǒng)變量中新建CLASSPATH變量,此處變量值文本框中則需要填寫上
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一點(diǎn))。檢驗(yàn)是否配置成功,運(yùn)行cmd輸入java-version,若顯示如圖,則證明配置成功圖1.3檢測配置(2)AndroidSDK配置打開Eclipse,點(diǎn)擊菜單Window→preferences進(jìn)入首選項(xiàng)設(shè)置界面:圖1.4路徑選擇在Loaction選項(xiàng)填上AndroidSDK的安裝目錄。點(diǎn)擊OK后就可進(jìn)入安裝界面了,這個(gè)安裝和更新的過程需要持續(xù)一段時(shí)間,靜靜等待即可。安裝成功后,就可以設(shè)置虛擬機(jī)來調(diào)試程序了。(3)Eclipse配置打開Eclipse,在菜單欄選擇help→InstallNewSoftWare,出現(xiàn)對話框:圖1.5添加環(huán)境工具點(diǎn)擊Add按鈕,名字寫為Android,輸入/android/eclipse/,點(diǎn)擊Next將出現(xiàn)界面如下:圖1.6選擇工具然后直接點(diǎn)擊Next,而后一直點(diǎn)擊確定,就可以到安裝插件的頁面,然后重新啟動(dòng)Eclipse,就可以進(jìn)行正常的AndroidApplication開發(fā)了。(4)虛擬設(shè)備配置安裝過工具后,即可在虛擬設(shè)備上進(jìn)行測試。選中項(xiàng)目文件,右鍵RunAs,選擇虛擬設(shè)備。若果沒有的話,需要?jiǎng)?chuàng)建一個(gè)。選擇完成后,將會(huì)出現(xiàn)虛擬機(jī)界面,Android程序便可直接在PC端運(yùn)行了:圖1.7虛擬設(shè)備二、系統(tǒng)的可行性分析(一)經(jīng)濟(jì)可行性分析本游戲使用開源的Eclipse工具及Java語言編寫,所用到的JDK和AndroidSDK等相關(guān)工具均屬于免費(fèi),可在相關(guān)網(wǎng)站上直接下載。與本課題有關(guān)的參考資料可由網(wǎng)上查閱或到圖書館查閱。開發(fā)過程中,除了測試需要人力外,整個(gè)軟件開發(fā)過程僅需一人,不需消耗過多人力資源。資金方面除了網(wǎng)上查閱電子文檔需要交納極少的費(fèi)用外,幾乎沒有其它支出。綜上所述,本次軟件開發(fā)成本是比較低的,從經(jīng)濟(jì)上講完全是可行的。(二)技術(shù)可行性分析技術(shù)可行性分析需要考慮很多因素,主要從技術(shù)方面對本軟件的開發(fā)做一個(gè)詳細(xì)的分析。包括軟件開發(fā)的相應(yīng)技術(shù),硬件級別和開發(fā)環(huán)境版本等。目前擁有的技術(shù)足以完成本次軟件開發(fā),硬件級別與軟件版本也能夠跟的上開發(fā)的需要,開發(fā)環(huán)境也足以支撐本次程序的開發(fā)、調(diào)試及運(yùn)行。本游戲采用Java語言開發(fā),Windows7操作系統(tǒng),Eclipse工具。三者結(jié)合使本次游戲開發(fā)具有很多優(yōu)勢,比如運(yùn)行迅速,內(nèi)存占用低等。所以,在技術(shù)方面完全可以達(dá)到要求。(三)操作可行性分析就開發(fā)者而言,由于本次五子棋游戲重點(diǎn)實(shí)現(xiàn)人機(jī)對弈功能,相關(guān)核心算法使用剪枝算法對棋盤進(jìn)行搜索,得到最優(yōu)解,而后決定落子地方。電腦AI十分智能,使用搜索算法可以達(dá)到很高的智商,能夠使玩家有一種棋逢對手的感覺。并且能在下棋的過程中提高玩家的下棋水平。對玩家而言,本游戲操作簡單易懂,容易上手。點(diǎn)擊開始游戲后直接進(jìn)入游戲界面開始輪流下子,雙方有任意一方連成五子,本局游戲結(jié)束。彈出對話框選擇重新游戲還是返回主界面。三、需求分析(一)系統(tǒng)的功能模塊的概述和分析基于Android平臺的五子棋游戲設(shè)計(jì)框架采用了MVC模式,將業(yè)務(wù)邏輯,數(shù)據(jù)和界面顯示分離開,可以理清開發(fā)思路,縮短開發(fā)周期。本游戲的目的就是開發(fā)出可在Android平臺運(yùn)行的五子棋游戲,用戶進(jìn)入界面后,可以選擇開始游戲,游戲設(shè)置和幫助三個(gè)按鈕。點(diǎn)擊開始游戲直接進(jìn)行人機(jī)對弈,點(diǎn)擊游戲設(shè)置,則可以選擇難度,點(diǎn)擊幫助按鈕,則可以顯示游戲規(guī)則,開發(fā)者信息等。該游戲功能完善,具有良好清新的界面,可以給用戶帶來不錯(cuò)的游戲體驗(yàn)。(二)系統(tǒng)功能模塊設(shè)計(jì)1.系統(tǒng)組成本系統(tǒng)分為三大塊,分別是開始游戲,游戲設(shè)置,和幫助。根據(jù)系統(tǒng)功能分析,可以畫出系統(tǒng)的功能模塊圖3.1所示:五子棋游戲幫助游戲設(shè)置開始游戲五子棋游戲幫助游戲設(shè)置開始游戲圖3.1主界面模塊圖2.子模塊設(shè)計(jì)對弈模塊:該模塊描述了人機(jī)對弈的設(shè)計(jì)流程,直接的顯示出了本游戲的主題邏輯。重新開始開始游戲人機(jī)對弈勝負(fù)回主界面重新開始開始游戲人機(jī)對弈勝負(fù)回主界面圖3.2對弈流程圖四、系統(tǒng)實(shí)現(xiàn)(一)開發(fā)工程概述在Eclipse中建立Android工程,并為之命名為Five1.0,本工程中共有八個(gè)類,分別實(shí)現(xiàn)不同功能,如圖,其中:ChessStatus類是用來定義一個(gè)枚舉類型,放置棋盤落子點(diǎn)狀態(tài)的。ChessType類是用來存放棋子類型的類。ComputerPlayer類是用來控制電腦AI的類。GameView類是用來顯示游戲視圖的類。MainActivity類是該工程的主活動(dòng)類。ScoreTable類是計(jì)分板,用來輔助電腦AI進(jìn)行落子判定。Screen類用來控制控制屏幕比例的類。StartActivity類是游戲開始的起始類。圖4.1系統(tǒng)類圖(二)開始界面實(shí)現(xiàn)過程啟動(dòng)游戲,進(jìn)入程序的主界面,在游戲的主界面中可以通過點(diǎn)擊不同的按鈕選擇相應(yīng)的功能,一下是游戲主界面顯示:圖4.2開始界面實(shí)現(xiàn)開始界面的主要代碼如下:<ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:background="@drawable/luo"/><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:layout_marginTop="54dp"android:text="黑白五子棋"android:textAppearance="?android:attr/textAppearanceLarge"android:textColor="#545454"/><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="游戲設(shè)置"/><Buttonandroid:id="@+id/button3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button2"android:layout_alignRight="@+id/button2"android:layout_below="@+id/button2"android:layout_marginTop="48dp"android:text="幫助"/><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@+id/button2"android:layout_alignLeft="@+id/button2"android:layout_marginBottom="22dp"android:text="開始游戲"/>(三)對弈界面實(shí)現(xiàn)過程對弈界面是本游戲的重要界面,在此界面中電腦與玩家輪流落子,呈現(xiàn)出博弈的智慧。1.棋盤實(shí)現(xiàn)圖4.3棋盤界面棋盤界面如上圖,該界面的實(shí)現(xiàn)代碼:(1)加載棋盤背景: publicGameView(Contextcontext){ super(context); this.context=context; this.setBackgroundResource(R.drawable.bg);(2)繪制棋盤線條: PADDING_LEFT=((screenWidth)/(COLS-1))/2; PADDING_TOP=((screenHeight)/(ROWS-1))/2; PADDING=PADDING_LEFT<PADDING_TOP?PADDING_LEFT:PADDING_TOP; ROW_MARGIN=((screenHeight-PADDING*2))/(ROWS-1); COL_MARGIN=((screenWidth-PADDING*2))/(COLS-1); MARGIN=ROW_MARGIN<COL_MARGIN?ROW_MARGIN:COL_MARGIN; PADDING_LEFT=(screenWidth-(COLS-1)*MARGIN)/2; PADDING_TOP=(screenHeight-(ROWS-1)*MARGIN)/2; initChess();protectedvoidonDraw(Canvascanvas){ super.onDraw(canvas); Paintpaint=newPaint(); paint.setColor(Color.WHITE); //打印行 for(inti=0;i<ROWS;i++){ canvas.drawLine(PADDING_LEFT,i*MARGIN+PADDING_TOP,(COLS-1) *MARGIN+PADDING_LEFT,i*MARGIN+PADDING_TOP,paint); } //打印列 for(inti=0;i<COLS;i++){ canvas.drawLine(PADDING_LEFT+i*MARGIN,PADDING_TOP, PADDING_LEFT+i*MARGIN,MARGIN*(ROWS-1) +PADDING_TOP,paint); }2.落子實(shí)現(xiàn)當(dāng)游戲開始后,系統(tǒng)會(huì)默認(rèn)玩家一方執(zhí)白棋落子,而后電腦一方執(zhí)黑棋落子。雙方下棋直到任意一方連成五子。界面如圖:圖4.4下棋界面此功能實(shí)現(xiàn)主要代碼為:(1)重新開始方法,初始化棋子:publicvoidreStart(){ initChess(); gameOver=false; }(2)打印棋子 for(intr=0;r<ROWS;r++){ for(intc=0;c<COLS;c++){ //System.out.print(chessMap[r][c]+""); if(chessMap[r][c]==ChessType.NONE) continue; if(chessMap[r][c]==ChessType.BLACK){ paint.setColor(Color.BLACK); canvas.drawCircle(r*MARGIN+PADDING_LEFT,c*MARGIN +PADDING_TOP,MARGIN/2,paint); }elseif(chessMap[r][c]==ChessType.WHITE){ paint.setColor(Color.WHITE); canvas.drawCircle(r*MARGIN+PADDING_LEFT,c*MARGIN +PADDING_TOP,MARGIN/2,paint); } }3.判斷勝負(fù)每一步下棋,系統(tǒng)都會(huì)判定是否有相同顏色的五子連在一起,若沒有,則游戲繼續(xù)進(jìn)行。若有,則游戲進(jìn)入結(jié)束界面,并根據(jù)檢測結(jié)果提示獲勝方。圖4.5判斷勝負(fù)該功能的實(shí)現(xiàn)代碼如下:publicbooleanhasWin(intr,intc){ ChessTypechessType=chessMap[r][c]; System.out.println(chessType); intcount=1;(1)縱向搜索,檢測是否有相同五子連成一線: for(inti=r+1;i<r+5;i++){ if(i>=GameView.ROWS) break; if(chessMap[i][c]==chessType){ count++; }else break; } for(inti=r-1;i>r-5;i--){ if(i<0) break; if(chessMap[i][c]==chessType) count++; else break; } //System.out.println(count+""+"1"); if(count>=5) returntrue;(2)橫向搜索,檢測是否有相同五子連成一線: count=1; for(inti=c+1;i<c+5;i++){ if(i>=GameView.COLS) break; if(chessMap[r][i]==chessType) count++; else break; } for(inti=c-1;i>c-5;i--){ if(i<0) break; if(chessMap[r][i]==chessType) count++; else break; } //System.out.println(count+""+"2"); if(count>=5) returntrue;(3)反斜向搜索,檢測是否有相同五子連成一線: count=1; for(inti=r+1,j=c+1;i<r+5;i++,j++){ if(i>=GameView.ROWS||j>=GameView.COLS){ break; } if(chessMap[i][j]==chessType) count++; else break; } for(inti=r-1,j=c-1;i>r-5;i--,j--){ if(i<0||j<0) break; if(chessMap[i][j]==chessType) count++; else break; } //System.out.println(count+""+"3"); if(count>=5) returntrue;(4)斜向搜索,檢測是否有相同五子連成一線: count=1; for(inti=r+1,j=c-1;i<r+5;i++,j--){ if(i>=GameView.ROWS||j<0) break; if(chessMap[i][j]==chessType) count++; else break; } for(inti=r-1,j=c+1;i>r-5;i--,j++){ if(i<0||j>=GameView.COLS) break; if(chessMap[i][j]==chessType) count++; else break; } //System.out.println(count+""+"4"); if(count>=5) returntrue; returnfalse; }4.重新開始此時(shí)再次點(diǎn)擊屏幕,則會(huì)出現(xiàn)重新開始界面。點(diǎn)擊重新開始,可以重新開始本局游戲。圖4.6重新開始該功能的實(shí)現(xiàn)代碼如下:publicvoidreStart(){ initChess(); gameOver=false; } newAlertDialog.Builder(context) .setTitle("提示") .setMessage("游戲已結(jié)束,是否重新開始?") .setPositiveButton("確定",newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ reStart(); } }) .setNegativeButton("取消",null).show(); } this.invalidate();returnsuper.onTouchEvent(event);5.棋子類在算法中,將棋子分為三種狀態(tài),分別是活、死和半活狀態(tài),為系統(tǒng)的評分系統(tǒng)做準(zhǔn)備。實(shí)現(xiàn)代碼如下:publicenumChessStatus{ ALIVE, DIED, HALFLIVE}棋盤上的棋子分為三種,一種是白色,一種是黑色,另外一種是空,所以這三種狀態(tài)用代碼表示如下:enumChessType{NONE, WHITE, BLACK}6.輔助評分類此類是用來輔助α-β剪枝算法的判定計(jì)算,用來計(jì)算下一步棋子的權(quán)重,并依此來選擇下一步的落子點(diǎn),提高AI智能程度。其實(shí)現(xiàn)代碼如下:publicclassScoreTable{ privateScoreTable(){} publicfinalstaticintFIVE=100;//成5publicfinalstaticintDOUBLE_ALIVE_FOUR=99;//雙活4(分析對手用)publicfinalstaticintALIVE_FOUR_AND_DEAD_FOUR=98;//活4死4(對手分析用)publicfinalstaticintALIVE_FOUR_AND_ALIVE_THREE=96;//活4活3(分析對手用)publicfinalstaticintALIVE_FOUR_AND_DEAD_THREE=95;//活4死3(分析對手用)publicfinalstaticintALIVE_FOUR_AND_ALIVE_TWO=94;//活4活2publicfinalstaticintALIVE_FOUR=93;//活4publicfinalstaticintDOUBLE_DEAD_FOUR=92;//雙死4publicfinalstaticintDEAD_FOUR_AND_ALIVE_THREE=91;//死4活3publicfinalstaticintDEAD_FOUR_AND_ALIVE_TWO=90;//死4活2publicfinalstaticintDOUBLE_ALIVE_THREE=80;//雙活3publicfinalstaticintALIVE_THREE_AND_DEAD_THREE=70;//活死3publicfinalstaticintHALF_ALIVE_FOUR=65;//半活4(類似○○○形),優(yōu)先級小于活4publicfinalstaticintALIVE_THREE=60;//活3publicfinalstaticintDEAD_FOUR=50;//死4publicfinalstaticintDOUBLE_ALIVE_TWO=40;//雙活2publicfinalstaticintDEAD_THREE=30;//死3publicfinalstaticintALIVE_TWO=20;//活2publicfinalstaticintDEAD_TWO=10;//死2publicfinalstaticintSINGLE=0;//單個(gè)}7.開始控制類該類用來控制游戲開始的方式及進(jìn)入游戲主體的邏輯。主要代碼如下:publicclassStartActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_start); findViewById(R.id.button1).setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Loading(); } }); } privatevoidLoading(){ Intentintent=newIntent(); intent.setClass(StartActivity.this,MainActivity.class); startActivity(intent); StartActivity.this.finish(); }8.主要交互類用來控制游戲界面交互相關(guān)事件。主要代碼如下:publicclassMainActivityextendsActivity{ privateScreenscreen; privateGameViewgameView=null; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); this.getScreen();//得到屏幕的大小 gameView=newGameView(this); setContentView(gameView); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. //getMenuInflater().inflate(R.menu.main,menu); menu.add("重新開始"); menu.add("退出"); returntrue; } @Override publicbooleanonOptionsItemSelected(MenuItemitem){ if(item.getTitle().equals("重新開始")){ gameView.reStart(); }elseif(item.getTitle().equals("退出")){ finish(); } returnsuper.onOptionsItemSelected(item); }五、系統(tǒng)測試(一)軟件測試在此游戲的各模塊基本功能都已實(shí)現(xiàn)后,開始進(jìn)行軟件測試,以求能夠保證程序完整運(yùn)行的同時(shí),還能夠經(jīng)受住時(shí)間的檢驗(yàn)。1.軟件測試簡介軟件測試是使用人工操作或者軟件自動(dòng)運(yùn)行的方式來檢驗(yàn)它是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別的過程。它是幫助識別開發(fā)完成(中間或最終的版本)的計(jì)算機(jī)軟件(整體或部分)的正確度、完全度和質(zhì)量的軟件過程。2.軟件測試原則1.測試應(yīng)該盡早進(jìn)行,最好在需求階段就開始介入,往往需求分析會(huì)與客戶要求產(chǎn)生差異,這是軟件開發(fā)過程中的最大錯(cuò)誤。2.由于自我認(rèn)知的差異,編程人員應(yīng)該避免檢查測試自己的程序,軟件測試應(yīng)該由第三方來負(fù)責(zé),以用戶的身份進(jìn)行測試。3.設(shè)計(jì)測試用例時(shí)應(yīng)考慮到各種情況。例如,合法的輸入和不合法的輸入以及各種邊界條件,特殊情況下要制造極端狀態(tài)和意外狀態(tài),如網(wǎng)絡(luò)異常中斷、電源斷電等。4.應(yīng)該重點(diǎn)注意測試中的群集現(xiàn)象。5.對錯(cuò)誤結(jié)果要進(jìn)行一個(gè)確認(rèn)過程。一般由A測試出來的錯(cuò)誤,一定要由B來確認(rèn)。嚴(yán)重的錯(cuò)誤可以召開評審會(huì)議進(jìn)行討論和分析,對測試結(jié)果要進(jìn)行嚴(yán)格地確認(rèn),是否真的存在這個(gè)問題以及嚴(yán)重程度等。6.制定嚴(yán)格的測試計(jì)劃,設(shè)定測試用例。一定要制定測試計(jì)劃,選合適的測試用例,并且要有指導(dǎo)性。測試時(shí)間安排盡量寬松,不要希望在極短的時(shí)間內(nèi)完成一個(gè)高水平的測試。7.妥善保存測試計(jì)劃、測試用例、出錯(cuò)統(tǒng)計(jì)、測試日志和分析報(bào)告的更新,為以后軟件維護(hù)提供方便,Android游戲更是應(yīng)該從各個(gè)方面進(jìn)行測試,以保證游戲質(zhì)量。3.軟件測試目標(biāo)1.發(fā)現(xiàn)一些可以通過測試避免的開發(fā)風(fēng)險(xiǎn)。2.實(shí)施測試來降低所發(fā)現(xiàn)的風(fēng)險(xiǎn)。3.確定測試何時(shí)可以結(jié)束。4.在開發(fā)項(xiàng)目的過程中將測試看作是一個(gè)標(biāo)準(zhǔn)項(xiàng)目。4.軟件測試過程第一步:對要執(zhí)行測試的產(chǎn)品項(xiàng)目進(jìn)行分析,確定測試策略,制定測試計(jì)劃。該計(jì)劃被審核批準(zhǔn)后轉(zhuǎn)向第二步。測試工作啟動(dòng)前一定要確定正確的測試策略和指導(dǎo)方針,這些是后期開展工作的基礎(chǔ)。只有將本次的測試目標(biāo)和要求分析清楚,才能決定測試資源的投入。第二步:設(shè)計(jì)測試用例。設(shè)計(jì)測試用例要根據(jù)測試需求和測試策略來進(jìn)行,進(jìn)度壓力不大時(shí),應(yīng)該設(shè)計(jì)的詳細(xì),如果進(jìn)度、成本壓力較大,則應(yīng)該保證測試用例覆蓋到關(guān)鍵性的測試需求。該用例被批準(zhǔn)后轉(zhuǎn)向第三步。第三步:如果滿足“啟動(dòng)準(zhǔn)則”,那么執(zhí)行測試。執(zhí)行測試主要是搭建測試環(huán)境,執(zhí)行測試用例。執(zhí)行測試時(shí)要進(jìn)行進(jìn)度控制、項(xiàng)目協(xié)調(diào)等工作。第四步:提交缺陷。這里要進(jìn)行缺陷審核和驗(yàn)證等工作。第五步:消除軟件缺陷。通常情況下,開發(fā)經(jīng)理需要審核缺陷,并進(jìn)行缺陷分配。程序員修改自己負(fù)責(zé)的缺陷。在程序員修改完成后,進(jìn)入到回歸測試階段。如果滿足“完成準(zhǔn)則”,那么正常結(jié)束測試。第六步:撰寫測試報(bào)告。對測試進(jìn)行分析,總結(jié)本次的經(jīng)驗(yàn)教訓(xùn),在下一次的工作中改。軟件測試過程管理,主要包括軟件測試是什么樣的過程,如何評價(jià)一個(gè)軟件測試過程,如何進(jìn)行配置管理和測試風(fēng)險(xiǎn)分析以及測試成本的管理,GoogleSDK中專門集成了一種測試技術(shù),用來檢測Android程序的穩(wěn)定性。5.測試步驟(1)模塊測試(2)子系統(tǒng)測試(3)系統(tǒng)測試(4)驗(yàn)收測試(5)平行運(yùn)行(二)測試方法1.白盒測試白盒測試是一種測試用例設(shè)計(jì)方法,盒子指的是被測試的軟件,白盒指的是盒子是可視的,你清楚盒子內(nèi)部的東西以及里面是如何運(yùn)作的。"白盒"法全面了解程序內(nèi)部邏輯結(jié)構(gòu)、對所有邏輯路徑進(jìn)行測試。"白盒"法是窮舉路徑測試。在使用這一方案時(shí),測試者必須檢查程序的內(nèi)部結(jié)構(gòu),從檢查程序的邏輯著手,得出測試數(shù)據(jù)。2.黑盒測試黑盒測試也稱功能測試,它是通過測試來檢測每個(gè)功能是否都能正常使用。在測試中,把程序看作一個(gè)不能打開的黑盒子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,在程序接口進(jìn)行測試,它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025下半年貴州遵義市市直事業(yè)單位選調(diào)56人考試筆試備考題庫及答案解析
- 2025恒豐銀行武漢分行社會(huì)招聘14人備考考試試題及答案解析
- 2025年陜西華森盛邦科技有限公司招聘參考考試試題及答案解析
- 環(huán)衛(wèi)作業(yè)實(shí)施方案
- 深度解析(2026)《GBT 26093-2010齒輪雙面嚙合綜合測量儀》(2026年)深度解析
- 深度解析(2026)《GBT 25785-2010 2-氨基-4,6-二硝基酚鈉(苦氨酸鈉)》(2026年)深度解析
- 深度解析(2026)《GBT 25643-2010道路施工與養(yǎng)護(hù)機(jī)械設(shè)備 路面銑刨機(jī)》(2026年)深度解析
- 2025廣西桂林電子科技大學(xué)第二批教職人員控制數(shù)工作人員公開招聘32人參考考試試題及答案解析
- 2025懷化市教育局直屬學(xué)校公開招聘教職工65人參考筆試題庫附答案解析
- 2025海南儋州市教育局赴高校(考核)招聘中學(xué)教師40人(一)考試筆試備考題庫及答案解析
- 2025春季學(xué)期國開電大??啤独砉び⒄Z1》一平臺機(jī)考真題及答案(第五套)
- GB/T 45683-2025產(chǎn)品幾何技術(shù)規(guī)范(GPS)幾何公差一般幾何規(guī)范和一般尺寸規(guī)范
- CJ/T 107-2013城市公共汽、電車候車亭
- 可靠性測試標(biāo)準(zhǔn)試題及答案
- 入股境外合同協(xié)議書
- 門店分期轉(zhuǎn)讓合同協(xié)議
- 一般將來時(shí)復(fù)習(xí)教案
- 瑜伽館年度店長工作總結(jié)
- 高效空調(diào)制冷機(jī)房的關(guān)鍵技術(shù)現(xiàn)狀與展望
- 2024-2025學(xué)年成都市青羊區(qū)九年級上期末(一診)英語試題(含答案和音頻)
- 《小講課糖尿病》課件
評論
0/150
提交評論