




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
題目基于Android系統(tǒng)的五子棋游戲開發(fā)與實(shí)現(xiàn)學(xué)生姓名學(xué)號(hào)所在系(院)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)名稱年級(jí)指導(dǎo)教師于桂玲職稱講師2013年6月10日北京郵電大學(xué)畢業(yè)設(shè)計(jì)(論文)誠(chéng)信聲明本人聲明所呈交的畢業(yè)設(shè)計(jì)(論文),題目《基于Android平臺(tái)的五子棋游戲開發(fā)與實(shí)現(xiàn)》是本人在指導(dǎo)教師的指導(dǎo)下,獨(dú)立進(jìn)行研究工作所取得的成果,除了文中特別加以標(biāo)注和致謝中所羅列的內(nèi)容以外,畢業(yè)設(shè)計(jì)(論文)中不包含其他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得北京郵電大學(xué)或其他教育機(jī)構(gòu)的學(xué)位或證書而使用過的材料。申請(qǐng)學(xué)位論文與資料若有不實(shí)之處,本人承擔(dān)一切相關(guān)責(zé)任。本人簽名:日期:畢業(yè)設(shè)計(jì)(論文)使用權(quán)的說明本人完全了解北京郵電大學(xué)有關(guān)保管、使用論文的規(guī)定,其中包括:①學(xué)校有權(quán)保管、并向有關(guān)部門送交學(xué)位論文的原件與復(fù)印件;②學(xué)??梢圆捎糜坝?、縮印或其它復(fù)制手段復(fù)制并保存論文;③學(xué)??稍试S論文被查閱或借閱;④學(xué)校可以學(xué)術(shù)交流為目的,復(fù)制贈(zèng)送和交換學(xué)位論文;⑤學(xué)??梢怨紝W(xué)位論文的全部或部分內(nèi)容。本人簽名:日期:指導(dǎo)教師簽名:日期:北京郵電大學(xué)畢業(yè)設(shè)計(jì)(論文)PAGEI目錄1前言 11.1課題研究背景 11.2課題研究的意義和目的 41.3可行性研究 51.3.1技術(shù)可行性 51.3.2經(jīng)濟(jì)可行性 61.3.3操作可行性 61.4本章小結(jié) 72需求分析與系統(tǒng)設(shè)計(jì) 82.1需求分析與創(chuàng)新意義 82.1.1系統(tǒng)的需求分析 82.1.2系統(tǒng)的創(chuàng)新與意義 82.2系統(tǒng)的功能設(shè)計(jì) 92.2.1人機(jī)對(duì)戰(zhàn) 92.2.2人人對(duì)戰(zhàn) 92.2.3關(guān)于 102.3系統(tǒng)的組成與實(shí)現(xiàn)原理 102.3.1系統(tǒng)組成 102.3.2系統(tǒng)實(shí)現(xiàn)原理 102.4本章小結(jié) 113客戶端系統(tǒng)的實(shí)現(xiàn) 123.1用戶進(jìn)入游戲 133.2人人對(duì)戰(zhàn) 153.3人機(jī)對(duì)戰(zhàn) 203.4關(guān)于 223.5本章小結(jié) 224系統(tǒng)的測(cè)試 234.1系統(tǒng)的測(cè)試環(huán)境 234.1.1系統(tǒng)的開發(fā)環(huán)境 234.1.2系統(tǒng)運(yùn)行環(huán)境 234.2系統(tǒng)功能測(cè)試 234.2.1人人對(duì)戰(zhàn)測(cè)試 244.2.2人機(jī)對(duì)戰(zhàn)測(cè)試 244.2.3關(guān)于測(cè)試 254.3本章小結(jié) 255系統(tǒng)存在問題及改進(jìn)方法 265.1系統(tǒng)存在的問題 265.2系統(tǒng)改進(jìn)方法 266結(jié)論 27致謝 29參考文獻(xiàn) 30附錄 31前言課題研究背景智能手機(jī),和電腦是一樣的,它不依賴于任何系統(tǒng)而操作,玩家可以自行下載并且安裝軟件或者游戲等應(yīng)用來不斷的擴(kuò)充手機(jī)的功能,其中包括利用運(yùn)營(yíng)商通訊網(wǎng)絡(luò)來接入無(wú)線進(jìn)行網(wǎng)絡(luò)操作。目前,細(xì)數(shù)全球范圍內(nèi)多數(shù)的手機(jī)廠商都在做智能手機(jī),例如具有代表性的蘋果、三星、HTC、小米等。我們分析智能手機(jī)具備以下五大特點(diǎn):1.可以通過無(wú)線技術(shù)接入因特網(wǎng),即要有GSM網(wǎng)絡(luò)支持下的GPRS或者是CDMA網(wǎng)絡(luò)支持下的CDMA1X或3G網(wǎng)絡(luò)。2.比較人性化,可以根據(jù)個(gè)人需求自行更改主題界面等。3.具有開放性,可以根據(jù)不同用戶的需求自行下載安裝特別多的應(yīng)用程序,比如社交軟件或者游戲等,從而可以達(dá)到無(wú)限的擴(kuò)充智能手機(jī)功能的效果。4.具有PDA(掌上電腦)功能,例如有文件的管理、便簽、地圖搜索、網(wǎng)頁(yè)瀏覽、多媒體播放、辦公軟件、應(yīng)用程序管理等。5.具有很強(qiáng)大的功能,可以在很多的地方下載并安裝別的軟件。Android的誕生:準(zhǔn)確的來說是在二零零三年,創(chuàng)始人AndyRubin在Android的傳奇開始之前就說過:“我們有很大的潛力來開發(fā)能夠捕捉用戶地理位置信息以及狀態(tài)的不固定的設(shè)備。如果這些設(shè)計(jì)者很有想法的話,那么在很短的時(shí)間內(nèi)這些東西就會(huì)被應(yīng)用到那些產(chǎn)品中。”現(xiàn)在看,估計(jì)創(chuàng)始人自己都不會(huì)想到他的預(yù)言是這么的準(zhǔn)確。事實(shí)上,我們可以預(yù)見未來在移動(dòng)領(lǐng)域?qū)?huì)有巨大的改變,從而催生出類似于概念機(jī)那樣新穎、獨(dú)特、超前的智能機(jī)。二零零五年的時(shí)候,有很多謠傳說Google通過專注于制造可以捕捉位置服務(wù)的手機(jī)從而進(jìn)軍手機(jī)制領(lǐng)域,但是擺在它面前最大難題就是它并沒有實(shí)現(xiàn)這個(gè)愿望的可搭載的平臺(tái)。Google在二零零五年的七月收購(gòu)了Android,雖然是一次小規(guī)模的收購(gòu)行動(dòng),但大家懷疑這標(biāo)志著Google進(jìn)入了移動(dòng)市場(chǎng),所以還是立刻就引起了業(yè)界的大力關(guān)注。盡管是這樣,在那個(gè)時(shí)候,這個(gè)發(fā)展沒有很壯大的做軟件的公司正是由?AndyRubin、RichMiner、NickSears以及ChrisWhite四個(gè)人共同創(chuàng)建的?,F(xiàn)在看來,他們的疑慮是對(duì)的。差不多就在二零零七年十一月五日的時(shí)候,Google對(duì)公眾開放了Android,這個(gè)不僅僅是一個(gè)基于Linux的全新的移動(dòng)操作系統(tǒng),最重要的是它完全是不保密設(shè)計(jì)代碼的,不用說,這在業(yè)內(nèi)肯定會(huì)使人們震驚,做出很大的改變。這是當(dāng)時(shí)新成立的開放手機(jī)聯(lián)盟整合下的成果,諸如Google、HTC、Intel、Sprint-Nextel、T-Mobile以及NVIDIA都是一個(gè)組織的成員,這個(gè)組織是為了給所有的設(shè)備建造一個(gè)共同的可使用的標(biāo)準(zhǔn)。第一款搭載Android系統(tǒng)的手機(jī)是2008年9月由T-Mobile發(fā)布的G1,它擁有GPS功能,3.1M攝像頭,以及一系列的Google應(yīng)用。G1的面市,正式拉開了一場(chǎng)巨大變革的序幕,不僅僅是Google,更是對(duì)于整個(gè)移動(dòng)業(yè)界。2009年5月發(fā)布了第一個(gè)主要版本Android1.5“Cupcake”。在對(duì)它進(jìn)行升級(jí)之后,用戶界面有了很大的改善,新的版本無(wú)疑給用戶帶來了全新的體驗(yàn),并且它還增加了一些功能。Android1.6“Donut”2009年9月發(fā)布。搭載Android1.6的HTCHero獲得了意想不到的成功。不僅得到了一些從未有過的關(guān)注,讓許多客戶真正對(duì)Android產(chǎn)生興趣,而且更觸動(dòng)了蘋果和微軟兩家競(jìng)爭(zhēng)者的敏感神經(jīng)。Android2.0/2.1:,又有一個(gè)很重要的版本在2009年10月26日完成,這次完成的速度可以說是相當(dāng)快的,無(wú)與倫比。這次,大版本升級(jí)到了Android2.0/2.1“Eclair”。繼2009年12月發(fā)布的Android2.0.1SDK后,是在2010年1月發(fā)布的2.1版本。會(huì)有很多的看客甚至是用戶都會(huì)奇怪,為什么Android的系統(tǒng)版本代號(hào)會(huì)被稱作甜點(diǎn),其實(shí)是在Android1.5發(fā)布出來的時(shí)候開始使用的這個(gè)命名的方法。按照字母的順序,依次是小蛋糕,甜甜圈和松餅,所以每更新一個(gè)版本就可以被想象成是對(duì)它的大小的擴(kuò)充。Android2.2“FroYo”:NexusOne的用戶已經(jīng)開始接受Android2.2“FroYo”的無(wú)線更新,并會(huì)在很快速的時(shí)間內(nèi)使所有使用其他手機(jī)的玩家能夠使用這個(gè)新的版本。這個(gè)系統(tǒng)版本新的升級(jí),讓很多的使用其他手機(jī)的人們很是羨慕,因?yàn)樗泻芎玫慕缑?,還增加了許多新的功能,玩家使用會(huì)有新的感受。有關(guān)的消息眾口一詞聲稱?Android3.0“Gingerbread”,它會(huì)讓用戶有更新穎的更獨(dú)特的體驗(yàn),并且Google估計(jì)會(huì)在今年秋天的時(shí)候?qū)⑺l(fā)布出來??v觀Android的發(fā)展史,在2003年的時(shí)候,出現(xiàn)了特別有遠(yuǎn)見的Andy,他的預(yù)言得到了證實(shí),2005年經(jīng)歷了正式起步以及被Google收購(gòu)。一路以來,系統(tǒng)一直在進(jìn)步,并且新的機(jī)型也一直在快速的發(fā)布。通過這一切,我們有理由相信,Android很有可能會(huì)成為手機(jī)系統(tǒng)同行業(yè)內(nèi)的最優(yōu)秀的,這樣的勢(shì)頭,不容易被改變。Android平板電腦也在今年的夏天開始發(fā)布以及GoogleTV發(fā)布以后(也許還有GoogleMusic),Android有很大的可能讓我們領(lǐng)會(huì)未來手機(jī)的發(fā)展趨勢(shì),讓我們具有不一樣的體驗(yàn)[10]。Android平臺(tái)對(duì)比其他的平臺(tái)有很多的有點(diǎn)。首先分析Symbian,主要是在諾基亞手機(jī)上運(yùn)行,雖然說已經(jīng)發(fā)展的很成熟,但是它在理念上與我們平時(shí)經(jīng)常用的系統(tǒng)還是有很大的差別,整個(gè)感覺上還是偏向于以前舊一點(diǎn)的設(shè)計(jì)。重要的是它對(duì)互聯(lián)網(wǎng)并沒有連接的特別好,不能夠讓用戶體驗(yàn)到特別滿意的聯(lián)網(wǎng)速度,在這樣一個(gè)信息化時(shí)代就顯得沒有競(jìng)爭(zhēng)力。但是Android不同,它最主要最關(guān)注的就是對(duì)于聯(lián)網(wǎng)這一塊兒,不管是軟件還是硬件的設(shè)計(jì),都是在主要突出互聯(lián)網(wǎng)的重要,正好是彌補(bǔ)了Symbian最大的不足。這樣,就會(huì)讓用戶更好更舒適的感受信息化時(shí)代,所以更容易贏得用戶的喜愛,得到廣大用戶的接受與認(rèn)可。還有就是現(xiàn)在比較流行的ios,雖然它有很完整的應(yīng)用,可以給用戶帶來很多很豐富的體驗(yàn),但是它只是相對(duì)于蘋果用戶而言,并不可以針對(duì)多數(shù)的手機(jī)用戶。但是Android同樣不同于ios,它是完全開放的,這樣更多的開發(fā)者可以為其設(shè)計(jì)多種多樣不同的應(yīng)用,繼而迎來越來越多的開發(fā)創(chuàng)意,進(jìn)而豐富其應(yīng)用領(lǐng)域。而且,它具有一定的標(biāo)準(zhǔn),各種不同的平臺(tái)都可以兼容使用,所以完全可以植于好多的手機(jī)品牌上,這樣更有利于它的推廣,讓更多的用戶熟知??偟膩碚f,現(xiàn)在流行的系統(tǒng)中,從不同的方面都可以看出Android系統(tǒng)相比其他系統(tǒng)的優(yōu)勢(shì),可以說它擁有很多手機(jī)用戶的支持者[2]。所以完全可以這樣說,隨著人們對(duì)移動(dòng)設(shè)備的要求變得越來越高,那就必須有能夠逐漸滿足這樣一個(gè)高要求的開發(fā)平臺(tái),那么Android就是在這樣的環(huán)境下應(yīng)運(yùn)而生的。綜合的來講,它完全符合目前的趨勢(shì),可以說是真正意義上的一個(gè)具有開放性的綜合平臺(tái),不論是開發(fā)軟件的公司還是搞研發(fā)的個(gè)人,都可以用它來作為開發(fā)的基礎(chǔ)。在技術(shù)方面,由于它具有很強(qiáng)的可操作性,人們?cè)诰帉懗绦虻臅r(shí)候可以根據(jù)自己的意向來實(shí)現(xiàn),這樣就給開發(fā)者進(jìn)行創(chuàng)新提供了很大的可能。在成本方面,只要擁有編程的技術(shù)就可以在Android平臺(tái)上進(jìn)行功能的實(shí)現(xiàn),是很節(jié)約的,因此它就完全可以降低不少的成本。設(shè)計(jì)者們可以在此基礎(chǔ)上設(shè)計(jì)出具有個(gè)性特色的各類應(yīng)用,所以,綜合用戶的需求,并從軟件這個(gè)很大的市場(chǎng)來說,Android很明顯具有很大的發(fā)展?jié)摿4]。課題研究的意義和目的游戲,作為一種娛樂項(xiàng)目,在我們現(xiàn)在這樣會(huì)面臨很多壓力的生活中,真的是一類不可或缺的活動(dòng)。在我們的生活中,游戲的種類有千種萬(wàn)種,不同的游戲也會(huì)給人帶來不同的放松和娛樂感受,正因?yàn)樗谋夭豢缮傩?,帶?dòng)很大一部分人來研究越來越多的游戲,這不經(jīng)意間就豐盛了手機(jī)游戲行業(yè)。隨著歷史的發(fā)展,游戲也有了很大的發(fā)展和改變,從之前最簡(jiǎn)單的到后來在電視上進(jìn)行的游戲,繼而到pc游戲,再到現(xiàn)在的手機(jī)游戲,其發(fā)展過程也經(jīng)歷了很多樣的技術(shù)革新。隨著我們生活水平的日益發(fā)展和新技術(shù)的偉大變革,手機(jī)逐漸在我們的生活中普及起來,它小巧玲瓏,功能強(qiáng)大,并且方便攜帶,這些特性都讓它最終成為我們生活中的必需品。隨著3g以至4g的開通及應(yīng)用,手機(jī)必然會(huì)迎來一輪更深層次的普及,而可以讓用戶在手機(jī)上玩游戲也就隨著手機(jī)火爆起來,因此這類游戲的研究還是有很大的發(fā)展空間的,必將會(huì)迎來手機(jī)用戶的追捧!五子棋,它可以說是一種棋牌類的游戲,是需要有一定的策略的。棋盤和圍棋是通用的,有黑色和白色棋子兩種,但規(guī)則相對(duì)來說就比較簡(jiǎn)單了,在我國(guó)古代,是比較流行的棋術(shù)之一。兩個(gè)人進(jìn)行游戲,各拿一個(gè)顏色的棋子,一人接一人輪流落子,經(jīng)過主動(dòng)進(jìn)攻或者是防守,直到有一方會(huì)出現(xiàn)五顆或者五顆以上的棋子連成一條線,就判定這一方獲勝,那么游戲?qū)⒔Y(jié)束。由于落子之后棋子不像象棋那些可以隨意的移動(dòng)位置,有時(shí)候也是可以用紙質(zhì)的棋盤和筆來進(jìn)行的。該游戲由于規(guī)則簡(jiǎn)單,很容易就可以上手的,而且老少皆宜,玩起來比較有趣,不僅需要很好的策略,也需要隨時(shí)來處理不同的情況。這樣的游戲簡(jiǎn)單易玩,并且鍛煉思維,更對(duì)于小孩兒來說,可以開發(fā)智力。這些在手機(jī)上開發(fā)的游戲,更是對(duì)方便快捷悠閑的最好體現(xiàn)。五子棋會(huì)有很強(qiáng)大的客戶群,即使是之前完全沒有接觸過該游戲的人也可以輕而易舉的明白具體的玩兒法,并且會(huì)感覺到特別有趣;它是以手機(jī)平板平臺(tái)為主的,只要是裝載它的話就可以隨時(shí)來玩兒,這樣在人們感受特別方便的同時(shí),還可以享受現(xiàn)在這樣的高科技生活下的悠閑;這個(gè)游戲還需要一定的策略,每走一步都會(huì)引起思考,但是卻不會(huì)給人帶來壓迫感,就是這樣略微輕松的思考,鍛煉了思維的同時(shí)也娛樂了身心。所以,綜合上述該游戲的各方面好處,設(shè)計(jì)在手機(jī)上可以進(jìn)行此游戲的應(yīng)用就顯得很重要了。本課題的目的是基于Android平臺(tái),設(shè)計(jì)出一款基于Android平臺(tái)的五子棋游戲,該游戲?qū)⒖梢酝嫒巳藢?duì)戰(zhàn)及人機(jī)對(duì)戰(zhàn)兩類??尚行匝芯窟@個(gè)階段,在對(duì)系統(tǒng)的目標(biāo)進(jìn)行了初步的調(diào)查和分析的基礎(chǔ)上,得出了一個(gè)可行性方案,并對(duì)其進(jìn)行了論證。本文主要從三個(gè)可行性方面進(jìn)行了分析,分別是技術(shù)、經(jīng)濟(jì)和操作。技術(shù)可行性技術(shù)可行性有很多因素要考慮到,比如說目前擁有的技術(shù)條件是否可以滿足使得游戲可以最終達(dá)到計(jì)劃的要求,軟件和硬件的型號(hào)級(jí)別能否跟上完成的節(jié)奏等。本軟件用的是Java語(yǔ)言進(jìn)行的,它的操作相對(duì)來說比較簡(jiǎn)單,現(xiàn)在使用的計(jì)算機(jī)的硬件方面也完全跟得上研發(fā)的節(jié)奏。軟件方面:在不用聯(lián)網(wǎng)的模式已經(jīng)發(fā)展的很強(qiáng)大的前提下,軟件就有了很好的發(fā)展平臺(tái),它們具有很多的優(yōu)勢(shì),比如很快的速度、高的可靠性、低的價(jià)格和大的容量,系統(tǒng)的需求完全能夠得到滿足。所以從技術(shù)層面上講是一定可以的。我們經(jīng)常需要根據(jù)不同的客戶需求來設(shè)計(jì)出好多不同的功能,然后把這些功能嵌入整合到一個(gè)產(chǎn)品中,整合配置到那種大型的計(jì)算機(jī)系統(tǒng)中,這就是所謂的嵌入式系統(tǒng)。隨著時(shí)代一步步的發(fā)展,計(jì)算機(jī)慢慢在和通信技術(shù)融合,慢慢的深入到人們生活中的各個(gè)層面,信息無(wú)處不在,獲取的方式越來越網(wǎng)絡(luò)化,信息化已經(jīng)成為一個(gè)不可避免的大趨勢(shì),所有在這樣一個(gè)大的背景下,嵌入式的發(fā)展也得到了不可估量的前景。目前的嵌入式已經(jīng)深入到我們?nèi)粘I钪械母鱾€(gè)行業(yè),它的使用或許也遠(yuǎn)遠(yuǎn)高過了普通的計(jì)算機(jī)系統(tǒng),包括通訊網(wǎng)絡(luò)等,。其中最典型的一個(gè)代表就是手機(jī)的嵌入式,給我們帶來了很大的便利,為我們的生活增添了很多不一樣的樂趣。經(jīng)濟(jì)可行性我們可以通過去圖書館借閱有關(guān)聯(lián)的圖書或者上網(wǎng)搜索等途徑來獲得開發(fā)該應(yīng)用所需要的有關(guān)聯(lián)的圖書資料,并且其中所需的應(yīng)用相關(guān)方面的軟件和硬件也是很容易找到的,總之所需的成本是比較低的,所以說從經(jīng)濟(jì)層面來看是可以的。操作可行性Eclipse是一個(gè)開放源代碼的研發(fā)平臺(tái),它是基于Java的,是可擴(kuò)展的。Eclipse是利用特殊規(guī)范的代碼來形成一個(gè)可供研發(fā)的程序,但是對(duì)于它自己而言,只是一個(gè)大概的結(jié)構(gòu)和一些可供使用的命令。令人欣慰的是Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(JavaDevelopmentTools,JDT)。它主要由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òu)造并且運(yùn)行了集成軟件開發(fā)工具的基礎(chǔ),提供構(gòu)造塊,并且向用戶提供了一個(gè)通用性的開發(fā)平臺(tái)。EclipsePlatform對(duì)任何一個(gè)工具可以實(shí)現(xiàn)的結(jié)果從什么地方開始或者別的從什么地方結(jié)束是沒有辦法區(qū)分的,因?yàn)樗幌拗乒ぞ叩闹圃煺吲c其他的工具是不需要格式的轉(zhuǎn)換的。EclipseSDK(軟件開發(fā)者包)是EclipsePlatform、JDT和PDE所生產(chǎn)的組件合并,它們是不必要分開下載的。這些組合合并在一起共同組成了一個(gè)超級(jí)豐富并完善的可供開發(fā)的程序,開發(fā)者可以通過它建造一種工具,能夠不受限制不用進(jìn)行轉(zhuǎn)換格式就可以連接到EclipsePlatform。EclipseSDK是由兩部分組成的,一個(gè)是Eclipse項(xiàng)目生產(chǎn)的工具,另外的來自第三方軟件,它們是開放源代碼的。這兩部分的協(xié)議是不一樣的,其中第一部分Eclipse自己產(chǎn)生的軟件通過GPL發(fā)布,而第二部分的第三方軟件是具有自己的許可協(xié)議的[7]。從以上的論述可以看出,本軟件的開發(fā)完全具備技術(shù)、經(jīng)濟(jì)和操作三個(gè)方面的可行性。本章小結(jié)本章主要是從研究的背景、目的和意義三個(gè)方面對(duì)五子棋游戲在Android平臺(tái)上的研發(fā)和完成的情況進(jìn)行了詳細(xì)的介紹,并分析了該設(shè)計(jì)是不是可以運(yùn)行的,分別是技術(shù)、經(jīng)濟(jì)和操作三個(gè)方面。
需求分析與系統(tǒng)設(shè)計(jì)在Android的系統(tǒng)上來研發(fā)五子棋游戲,并讓它順利運(yùn)行,這樣一個(gè)游戲的開發(fā)確保了用戶可以隨時(shí)隨地的進(jìn)行并且通過它來鍛煉自己的大腦。通過本系統(tǒng),用戶只要使用Android手機(jī),并且安裝有本軟件,就可以再無(wú)聊之余一邊進(jìn)行五子棋游戲,一邊來感受這樣的小游戲帶來的清新與悠閑。用戶可以通過五子棋游戲來享受愉悅的游戲氛圍,娛樂自己,放松身心。需求分析與創(chuàng)新意義下面從在Android上來對(duì)五子棋游戲研發(fā)和運(yùn)行的幾個(gè)方面來展現(xiàn)五子棋游戲包含的樂趣,首先是游戲的簡(jiǎn)單需求分析,然后是簡(jiǎn)要的描述該系統(tǒng)的創(chuàng)新點(diǎn)和意義。系統(tǒng)的需求分析本系統(tǒng)的目的就是開發(fā)一個(gè)在Android上進(jìn)行研發(fā)的五子棋游戲,有人人對(duì)戰(zhàn)和人機(jī)對(duì)戰(zhàn)兩個(gè)類別供玩家選擇,這兩種類別的選擇或者切換玩家是可以利用操作不同的按鈕來進(jìn)行的。通過本系統(tǒng),用戶可以選擇人人對(duì)戰(zhàn)與自己的好友一同進(jìn)行游戲,增進(jìn)朋友之前的友誼,也可以選擇人機(jī)對(duì)戰(zhàn),與功能強(qiáng)大的電腦一決高下。主要包括的功能有:人人對(duì)戰(zhàn),人機(jī)對(duì)戰(zhàn),關(guān)于。該系統(tǒng)功能全面,并且具有良好的界面和易用性,可以給用戶帶來全新的游戲體驗(yàn)。系統(tǒng)的創(chuàng)新與意義就目前android軟件市場(chǎng)上來說,已經(jīng)有很多類似的五子棋的游戲,但是大多游戲都只是人機(jī)對(duì)戰(zhàn),沒有實(shí)現(xiàn)人機(jī)對(duì)戰(zhàn)與人人對(duì)戰(zhàn)結(jié)合,本游戲的目的就是為了整合人機(jī)對(duì)戰(zhàn)與人人對(duì)戰(zhàn),將他們結(jié)合到一個(gè)游戲中。而且如果游戲者想要轉(zhuǎn)換或者改變游戲的屬性是可以通過摁游戲設(shè)置那個(gè)按鈕來進(jìn)行的,游戲設(shè)置那個(gè)按鈕設(shè)計(jì)在主界面上。在游戲設(shè)置中,用戶可以修改游戲的難易程度,游戲的趣味洗牌,是否標(biāo)記行和列,是否為反向等等。系統(tǒng)的功能設(shè)計(jì)本系統(tǒng)主要分為三大塊,分別為人機(jī)對(duì)戰(zhàn),人人對(duì)戰(zhàn),關(guān)于。人機(jī)對(duì)戰(zhàn)人機(jī)對(duì)戰(zhàn)就是當(dāng)用戶點(diǎn)擊手機(jī)上的歡樂五子棋圖標(biāo)時(shí),進(jìn)入到主界面之后,可以摁那個(gè)人機(jī)對(duì)戰(zhàn)按鈕來開始。摁那個(gè)人機(jī)對(duì)戰(zhàn)的按鈕,屏幕會(huì)更改所選的界面。人機(jī)對(duì)戰(zhàn)中,默認(rèn)設(shè)置是白色棋子屬于電腦,而黑色棋子屬于玩家,并且在游戲過程中無(wú)論是玩家還是電腦,只要有一方所用的棋子有五顆及以上的棋子連在一起,則系統(tǒng)會(huì)判定該方獲勝,反之則失敗。人人對(duì)戰(zhàn)人人對(duì)戰(zhàn)就是當(dāng)用戶進(jìn)入到游戲最開的那個(gè)界面的時(shí)候,摁那個(gè)人人對(duì)戰(zhàn)按鈕從而開始的游戲。利用將講監(jiān)聽器與空間button綁定一起通過相應(yīng)算法實(shí)現(xiàn)摁那個(gè)人人對(duì)戰(zhàn)按鈕,屏幕將會(huì)更改到人人對(duì)戰(zhàn)棋盤界面,該界面與人機(jī)對(duì)戰(zhàn)界面是一樣的,區(qū)別只是棋子所執(zhí)者不一樣。在該游戲過程中是沒有電腦人工智能計(jì)算機(jī)算法的。而是游戲玩家可以找一個(gè)自己的好朋友一起來玩游戲的。在人人對(duì)戰(zhàn)那個(gè)游戲中兩個(gè)人分別擁有白色和黑色棋子,應(yīng)為五子棋游戲規(guī)則就是黑子先行,所以默認(rèn)第一玩家為黑子,第二玩家為白子,并且在棋子的數(shù)組中儲(chǔ)存兩種顏色的點(diǎn)的圖樣分別是黑子為0白字為1,系統(tǒng)默認(rèn)第一個(gè)落子的玩家為黑子,第二個(gè)落子的玩家為白子。當(dāng)每次落子之后,系統(tǒng)會(huì)判斷一次是否獲勝當(dāng)黑色或者白色的棋子有五顆及以上連在一起的,則系統(tǒng)會(huì)判定該棋子所執(zhí)者獲勝,反之則失敗,并且會(huì)彈出對(duì)話框顯示“黑子獲勝”或者“白字獲勝”。關(guān)于當(dāng)用戶對(duì)此游戲有疑問時(shí),比如該游戲的作者或者是該作者的信息等,可以點(diǎn)擊主界面的關(guān)于按鈕,這是屏幕上會(huì)出現(xiàn)一個(gè)對(duì)話框,上面詳細(xì)介紹所要看的內(nèi)容。系統(tǒng)的組成與實(shí)現(xiàn)原理下面從“歡樂五子棋”游戲的組成部分來闡述程序的設(shè)計(jì)原理。系統(tǒng)組成“歡樂五子棋”游戲主要包括三大功能點(diǎn),通過三大功能點(diǎn)來完成人人對(duì)戰(zhàn),人機(jī)對(duì)戰(zhàn),關(guān)于等功能。(如圖2.1所示)圖2.1系統(tǒng)組成部分系統(tǒng)實(shí)現(xiàn)原理游戲是怎么樣運(yùn)行的,原理有下面幾點(diǎn):玩家用戶進(jìn)入該系統(tǒng)開始游戲后,系統(tǒng)調(diào)用的都是同一張棋盤,不管游戲者選擇的是人人對(duì)戰(zhàn)模式還是人機(jī)對(duì)戰(zhàn)模式,其中的區(qū)別只是在棋盤中所執(zhí)行的方法不同。不管游戲者選擇的人和人玩還是人和機(jī)玩,當(dāng)白子或者黑子,任意一種顏色的棋子五顆及以上連在一起的時(shí)候,系統(tǒng)將判定該顏色棋子所執(zhí)者贏得了游戲(如圖2.2所示)。圖2.2系統(tǒng)實(shí)現(xiàn)原理本章小結(jié)本章內(nèi)容主要是略微介紹了一下“歡樂五子棋”游戲的需求分析,創(chuàng)新與意義,還有三大功能模塊的設(shè)計(jì),同時(shí)對(duì)本系統(tǒng)的組成部分以及系統(tǒng)實(shí)現(xiàn)的原理進(jìn)行了詳細(xì)的分析說明,從而為接下來在編寫程序模塊時(shí)能夠思路清晰。
客戶端系統(tǒng)的實(shí)現(xiàn)在Eclipse中新建一個(gè)命名為MyGobang的Android工程,BuildTarget選擇Android2.2 。在本工程中共有5個(gè)包10個(gè)類(如圖3.1所示)。圖3.1五子棋游戲系統(tǒng)類全圖其中比較重要的類有:在activity包中,MyGobangActivity.java類用來顯示該游戲的主界面。OfAllWarActivity.java類用來顯示人人對(duì)戰(zhàn)的界面。TheWarMachineActivity.java類用來顯示人機(jī)對(duì)戰(zhàn)的界面。在base包中,BaseComputerAi.java類用來存放人機(jī)對(duì)戰(zhàn)的算法,BasePlayer.java類用來存放人人對(duì)戰(zhàn)的算法。在entity包中,Chessboard.java類為棋盤類,改類用于棋盤界面的顯示。Point.java類為每顆棋子所落的點(diǎn)的實(shí)體類。在utils包中,HumanPlayer.java為人類玩家的一個(gè)實(shí)例。在res/layout中,有兩個(gè)文件需要被創(chuàng)建:游戲的原始界面的xml文件是main.xml,play.xml文件為顯示棋盤的主界面。用戶進(jìn)入游戲第一次啟動(dòng)Android拼圖游戲程序會(huì)進(jìn)入到程序的主界面。在游戲的主界面中,用戶可以摁不同的功能選項(xiàng)按鈕來選擇對(duì)應(yīng)功能。例如游戲用戶可以綜合自己的喜好,通過點(diǎn)擊人人對(duì)戰(zhàn)、人機(jī)對(duì)戰(zhàn)或者是關(guān)于按鈕來分別進(jìn)入三類不同模式的界面(如圖3.2所示)。圖3.2游戲主界面主要代碼如下: publicvoidonCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.main); findViews();} privatevoidfindViews() {mHumanBtn=(Button)findViewById(R.id.button1); mComputerBtn=(Button)findViewById(R.id.button2); mAboutBtn=(Button)findViewById(R.id.button3); mHumanBtn.setOnClickListener(this); mComputerBtn.setOnClickListener(this); mAboutBtn.setOnClickListener(this);}依據(jù)自己的喜好不同,用戶可以選擇摁原始面上任何一個(gè)功能按鈕,即可以摁人和人玩的按鈕、人和機(jī)玩的按鈕或者關(guān)于按鈕來分別進(jìn)入人人玩模式、人機(jī)玩模式或者關(guān)于功能,進(jìn)而屏幕上將會(huì)轉(zhuǎn)換出所選擇按鈕對(duì)應(yīng)的框框來展示,每個(gè)Activity之間的轉(zhuǎn)換是通過Intent來實(shí)現(xiàn)的,Intent負(fù)責(zé)對(duì)應(yīng)中一次操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Andorid則根據(jù)此Intent的描述,負(fù)責(zé)找到對(duì)應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并且完成組件的調(diào)用。在本程序中一共有三個(gè)Activity分別是主界面,人人對(duì)戰(zhàn)以及人機(jī)對(duì)戰(zhàn)界面,通過把事件與Button綁定一起,利用Intent意圖功能來實(shí)現(xiàn)Activity的相互調(diào)用,從而達(dá)到我們所預(yù)期的玩家可以在主界面上選擇相應(yīng)模式,并且跳轉(zhuǎn)到相應(yīng)界面功能的效果,其中主體是通過Switch選擇語(yǔ)句實(shí)現(xiàn)的。主要代碼如下: publicvoidonClick(Viewv) { intent=newIntent(); switch(v.getId()) {caseR.id.button1: intent.setClass(this,OfAllWarActivity.class); startActivity(intent); break; caseR.id.button2: intent.setClass(this,TheWarMachineActivity.class); startActivity(intent); break; caseR.id.button3: newAlertDialog.Builder(this).setTitle("作者:麻博超").setMessage("學(xué)號(hào):09060118").setPositiveButton("確定", newDialogInterface.OnClickListener() { publicvoidonClick(DialogInterfacedialog,intwhich) { dialog.cancel();} }).show(); break;} }
人人對(duì)戰(zhàn)當(dāng)用戶玩家想要跳轉(zhuǎn)到人和人玩的界面,可以在主界面摁人人玩的按鈕來運(yùn)行。進(jìn)入該界面后,玩家自己可以扮演兩個(gè)角色,或者用戶可以邀請(qǐng)一位好友,與好友一同切磋棋藝,(如圖3.3所示)。圖3.3人人對(duì)戰(zhàn)界面主要代碼如下: protectedvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.play); gameView=(Chessboard)findViewById(R.id.myBang); gameView.player2=Chessboard.human; }我們?cè)谶@里可以看到控制界面的Activity的setContentView()方法中的view為play.xml。Play.xml文件的代碼如下:<com.mbc.entity.Chessboardandroid:id="@+id/myBang"android:layout_width="fill_parent"android:layout_height="fill_parent"></com.mbc.entity.Chessboard>這里的布局文件中的元素引用的是entity包中的ChessBoard.java類,這個(gè)類繼承的是view,作用是用于顯示棋盤。主要代碼如下:(1)這里把代表不同顏色的許多點(diǎn)分別存入數(shù)組 Resourcesr=this.getContext().getResources(); fillPointArrays(BLACK,r.getDrawable(R.drawable.black)); fillPointArrays(WHITE,r.getDrawable(R.drawable.white));(2)設(shè)置畫線時(shí)用的顏色 paint.setColor(Color.LTGRAY);}(3)初始化好倆種顏色的點(diǎn) publicvoidfillPointArrays(intcolor,Drawabledrawable){Bitmapbitmap=Bitmap.createBitmap(pointSize,pointSize, Bitmap.Config.ARGB_8888); Canvascanvas=newCanvas(bitmap); drawable.setBounds(0,0,pointSize,pointSize); drawable.draw(canvas); pointArray[color]=bitmap;}(4)以上代碼為初始化棋盤上的可以落子的點(diǎn),和初始化兩種顏色的棋子,但是棋盤上還要有橫豎相間的線,主要代碼如下: protectedvoidonSizeChanged(intw,inth,intoldw,intoldh) {maxX=(int)Math.floor(w/pointSize); maxY=(int)Math.floor(h/pointSize); xOffset=((w-(pointSize*maxX))/2); yOffset=((h-(pointSize*maxY))/2); createLines(); restart(); }(5)產(chǎn)生棋盤上所有的線 privatevoidcreateLines() {for(inti=0;i<=maxX;i++) {lines.add(newLine(xOffset+i*pointSize-pointSize/2,yOffset,xOffset+i*pointSize-pointSize/2,yOffset+maxY*pointSize));} for(inti=0;i<=maxY;i++) {lines.add(newLine(xOffset,yOffset+i*pointSize-pointSize/2,xOffset+maxX*pointSize,yOffset+i*pointSize-pointSize/2));}}(6)畫出棋盤 privateList<Line>lines=newArrayList<Line>(); privatevoiddrawChessboardLines(Canvascanvas) {for(Lineline:lines) {canvas.drawLine(line.xStart,line.yStart,line.xStop,line.yStop,paint);}}(7)當(dāng)加載完棋盤之后,第一個(gè)玩家觸摸屏幕中的任意一個(gè)點(diǎn),將獲取到觸摸點(diǎn)的位置,主要代碼如下: privatePointnewPoint(Floatx,Floaty) {Pointp=newPoint(0,0); for(inti=0;i<maxX;i++) {if((i*pointSize+xOffset)<=x &&x<((i+1)*pointSize+xOffset)){p.setX(i);}} for(inti=0;i<maxY;i++) {if((i*pointSize+yOffset)<=y &&y<((i+1)*pointSize+yOffset)) {p.setY(i);}}returnp;}當(dāng)?shù)谝粋€(gè)用戶點(diǎn)擊某一個(gè)點(diǎn)之后,將黑子放到該點(diǎn)上,第二個(gè)用戶點(diǎn)擊其他的點(diǎn),然后在這個(gè)點(diǎn)上放上白色的棋子,依次類推(如圖3.4所示)。圖3.4人人對(duì)戰(zhàn)主要代碼如下: privatevoidplayer1Run(MotionEventevent) {Pointpoint=newPoint(event.getX(),event.getY()); if(allFreePoints.contains(point)) {setOnProcessing(); player1.run(player2.getMyPoints(),point); refressCanvas(); if(!player1.hasWin()) { if(player2==computer) {refreshHputerRunAfter(10); }else{setPlayer2Run();}}else{setMode(PLAYER_TWO_LOST);}}} privatevoidplayer2Run(MotionEventevent) {Pointpoint=newPoint(event.getX(),event.getY()); if(allFreePoints.contains(point)) { setOnProcessing(); player2.run(player1.getMyPoints(),point); refressCanvas();if(!player2.hasWin()) {setPlayer1Run(); }else{setMode(PLAYER_ONE_LOST);}}}當(dāng)有任何一種顏色的五顆及以上棋子出現(xiàn)連在一條線的情況,系統(tǒng)會(huì)判定該顏色棋子的所執(zhí)者取得勝利,反之另一方則失敗。并且一旦出現(xiàn)勝負(fù)的情況,玩家將不可以繼續(xù)下棋,即游戲結(jié)束(如圖3.5所示)。圖3.5勝利狀態(tài)判斷橫向縱向是否有五顆棋子連成一條直線的代碼如下: publicfinalbooleanhasWin() {if(myPoints.size()<5) returnfalse; Pointpoint=myPoints.get(myPoints.size()-1); intcount=1;intx=point.getX(),y=point.getY(); temp.setX(x).setY(y);橫向:判斷在所落子點(diǎn)的X軸負(fù)方向與正方向分別存在子數(shù) while(myPoints.contains(temp.setX(temp.getX()-1)) &&temp.getX()>=0&&count<5) {count++;} if(count>=5)returntrue;temp.setX(x).setY(y); while(myPoints.contains(temp.setX(temp.getX()+1)) &&temp.getX()<maxX&&count<5) {count++;} if(count>=5) returntrue;縱向:判斷在所落子點(diǎn)的Y軸負(fù)方向與正方向分別存在子數(shù) count=1;temp.setX(x).setY(y); while(myPoints.contains(temp.setY(temp.getY()-1)) &&temp.getY()>=0) {count++;}if(count>=5)returntrue; temp.setX(x).setY(y); while(myPoints.contains(temp.setY(temp.getY()+1)) &&temp.getY()<maxY&&count<5) {count++;} if(count>=5)returntrue;判斷斜向是否有五顆棋子練成一條直線的代碼如下:正斜:判斷X軸負(fù)方向Y軸正方向以及X軸正方向Y軸負(fù)方向落子數(shù)。 count=1;temp.setX(x).setY(y); while(myPoints.contains(temp.setX(temp.getX()-1).setY(temp.getY()+1)) &&temp.getX()>=0&&temp.getY()<maxY) {count++;}if(count>=5)returntrue; temp.setX(x).setY(y); while(myPoints.contains(temp.setX(temp.getX()+1).setY(temp.getY()-1)) &&temp.getX()<maxX&&temp.getY()>=0&&count<6) {count++;}if(count>=5)returntrue;反斜:判斷X軸負(fù)方向Y軸負(fù)方向以及X軸正方向Y軸正方向落子數(shù) count=1;temp.setX(x).setY(y); while(myPoints.contains(temp.setX(temp.getX()-1).setY(temp.getY()-1)) &&temp.getX()>=0&&temp.getY()>=0) {count++;}if(count>=5)returntrue; temp.setX(x).setY(y); while(myPoints.contains(temp.setX(temp.getX()+1).setY(temp.getY()+1)) &&temp.getX()<maxX&&temp.getY()<maxY&&count<5) {count++;}if(count>=5)returntrue;returnfalse;}當(dāng)有五顆棋子無(wú)論橫向縱向或者斜向練成一條直線之后,將提示改顏色棋子獲勝。(如圖3.6所示)。
圖3.6獲勝提示主要代碼如下: publicvoidsetMode(intnewMode) {currentMode=newMode; if(currentMode==PLAYER_TWO_LOST) {Toast.makeText(getContext(),"黑子贏了",3000).show(); currentMode=STOP;}elseif(currentMode==PLAYER_ONE_LOST) { Toast.makeText(getContext(),"白子贏了",3000).show(); currentMode=STOP;}}人機(jī)對(duì)戰(zhàn)游戲用戶可以在界面上摁那個(gè)人機(jī)玩按鈕從而轉(zhuǎn)換到人和機(jī)玩的那個(gè)界面(如圖3.7所示)。圖3.7人機(jī)對(duì)戰(zhàn)界面 主要代碼如下: protectedvoidonCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.play); gameView=(Chessboard)findViewById(R.id.myBang); gameView.player2=Cputer;}人機(jī)對(duì)戰(zhàn)的界面樣式與人人對(duì)戰(zhàn)的樣式是一樣的,對(duì)于棋盤的畫法也是一樣的,兩者的區(qū)別就是,在人機(jī)對(duì)戰(zhàn)的模式中,程序的設(shè)置增添了人機(jī)對(duì)戰(zhàn)的算法。當(dāng)開始人和機(jī)玩的游戲后,系統(tǒng)會(huì)默認(rèn)人這一方第一個(gè)落子,即玩家所執(zhí)的是黑色棋子。當(dāng)玩家成功落子后,計(jì)算機(jī)將會(huì)根據(jù)玩家落子點(diǎn)的位置根據(jù)對(duì)應(yīng)的解題步驟處理,然后落第二個(gè)子,電腦執(zhí)黑子。電腦的算法步驟如下:第一步:首先分析當(dāng)前的棋盤局勢(shì),并設(shè)想在某個(gè)范圍內(nèi)和對(duì)方繼續(xù)游戲,循環(huán)設(shè)定雙方棋子落地之后,分析在這個(gè)范圍內(nèi)雙方的局勢(shì)變化,比如說會(huì)不會(huì)四子連在一起,或者雙方會(huì)不會(huì)出現(xiàn)雙3等。第二步:根據(jù)第一步的分析,將上述設(shè)想的每一步棋子落地后的結(jié)果都整合起來,其中有游戲兩方接下來會(huì)形成的全部的可能性即每個(gè)試探點(diǎn)存在的棋子活3半活4活2等情況的個(gè)數(shù)。第三步:根據(jù)五子棋游戲的規(guī)則將第二步所有的結(jié)果綜合排序,并選擇最適當(dāng)?shù)哪且环N情況落子(有主動(dòng)形、被動(dòng)形兩種)。人機(jī)對(duì)戰(zhàn)主要代碼與講解請(qǐng)見附錄【1】。當(dāng)在人機(jī)對(duì)戰(zhàn)的過程中,我們不管哪種顏色的棋子五顆及以上連成了一條直線,則程序?qū)⑴卸ㄔ摲将@勝(如圖3.8所示)。 圖3.8獲勝顯示該模式的主要代碼在判斷獲勝一方是與人人對(duì)戰(zhàn)模式一致的。關(guān)于當(dāng)玩家想要查看關(guān)于選項(xiàng)里面的信息時(shí),可以在主界面上點(diǎn)擊關(guān)于按鈕,然后會(huì)有一個(gè)對(duì)話框,上面會(huì)介紹該游戲的作者的相關(guān)信息,如果想讓對(duì)話框消失,摁那個(gè)確定按鈕就可以了(如圖3.9所示)。圖3.9關(guān)于主要代碼如下:newAlertDialog.Builder(this).setTitle("作者:麻博超").setMessage( "學(xué)號(hào):09060118").setPositiveButton("確定", newDialogInterface.OnClickListener() { publicvoidonClick(DialogInterfacedialog,intwhich) { dialog.cancel(); } }).show(); break;本章小結(jié)本章節(jié)主要就是介紹了“歡樂五子棋”包含的游戲功能,它是一款基于Android平臺(tái)的游戲,我們要想實(shí)現(xiàn)游戲的操作,可以通過點(diǎn)擊手機(jī)程序圖標(biāo)進(jìn)入到游戲主界面,然后再根據(jù)不同的游戲玩家的興趣來轉(zhuǎn)換不同的界面,這個(gè)可以摁不同的按鈕來完成操作。
系統(tǒng)的測(cè)試系統(tǒng)的測(cè)試環(huán)境接下來要對(duì)“歡樂五子棋”游戲的系統(tǒng)的幾個(gè)方面進(jìn)行簡(jiǎn)要的說明,包括開發(fā)、運(yùn)行和網(wǎng)絡(luò)環(huán)境。本系統(tǒng)測(cè)試時(shí),必須支持以下的環(huán)境配置,否則無(wú)法保證系統(tǒng)的可運(yùn)行性。系統(tǒng)的開發(fā)環(huán)境操作系統(tǒng):WindowsXP、Android2.3.1開發(fā)環(huán)境:Eclipse3.5.0開發(fā)工具:AndroidSDK開發(fā)語(yǔ)言:Java硬件設(shè)備:戴爾本電腦華為Android智能手機(jī)NetcoreNW336150MUSB無(wú)線網(wǎng)卡系統(tǒng)運(yùn)行環(huán)境服務(wù)器端程序目前只能運(yùn)行Windows系列的操作系統(tǒng),日后也許會(huì)支持跨平臺(tái)的應(yīng)用。服務(wù)端程序是由java語(yǔ)言實(shí)現(xiàn)的,因此不需要預(yù)裝任何軟件,可以直接運(yùn)行。手機(jī)客戶端方面操作系統(tǒng)必須是Android1.6以上版本,推薦使用Android2.1以上版本。系統(tǒng)功能測(cè)試接下來主要進(jìn)行的是測(cè)試“歡樂五子棋”游戲的一些基本功能。人人對(duì)戰(zhàn)測(cè)試功能實(shí)現(xiàn):可以進(jìn)入人和人玩的方式。測(cè)試目的:可以實(shí)現(xiàn)人人對(duì)戰(zhàn)游戲,游戲中的玩家將一人分飾兩角,玩家一和玩家二。測(cè)試結(jié)果:當(dāng)玩家一或玩家二有一方的五顆棋子連成一條線,將判定該方獲勝。(如圖4.1所示)圖4.1人人對(duì)戰(zhàn)測(cè)試人機(jī)對(duì)戰(zhàn)測(cè)試功能實(shí)現(xiàn):可以進(jìn)入人和電腦玩的方式。測(cè)試目的:可以進(jìn)行人機(jī)對(duì)戰(zhàn),并且電腦算法準(zhǔn)確,難度比較大。測(cè)試結(jié)果:實(shí)現(xiàn)人機(jī)對(duì)戰(zhàn)。(如圖4.2所示)圖4.2人機(jī)對(duì)戰(zhàn)測(cè)試關(guān)于測(cè)試功能實(shí)現(xiàn):會(huì)轉(zhuǎn)化出一個(gè)關(guān)于的框框來提示。測(cè)試目的:是否可以通過摁主界面上的關(guān)于按鈕來轉(zhuǎn)換出框框提示。測(cè)試結(jié)果:屏幕上轉(zhuǎn)換出了關(guān)于對(duì)話框來提示。(如圖4.3所示)。圖4.3關(guān)于測(cè)試本章小結(jié)本章主要介紹了“歡樂五子棋”游戲的最終功能測(cè)試,通過對(duì)開人人對(duì)戰(zhàn),人機(jī)對(duì)戰(zhàn),關(guān)于等功能進(jìn)行測(cè)試測(cè)試,并且最后都測(cè)試通過,整個(gè)項(xiàng)目功能已經(jīng)順利完成。
系統(tǒng)存在問題及改進(jìn)方法系統(tǒng)存在的問題此系統(tǒng)基本實(shí)現(xiàn)了基于Android系統(tǒng)的五子棋游戲,但是由于時(shí)間較緊,還有一些沒有實(shí)現(xiàn)的功能。首先玩家在進(jìn)行游戲之前應(yīng)該選擇自己喜歡的棋子顏色,如白色或黑色。其次,程序中沒有響應(yīng)的成績(jī)存儲(chǔ)功能。再次,游戲再過程中沒有音效,這讓玩家在玩游戲的過程中感覺有些枯燥乏味。最后,此款游戲的界面,也就是Android客戶端的界面,還存在一定的不足,并沒有特別好看的視覺感覺。系統(tǒng)改進(jìn)方法針對(duì)提出的一些不足之處,我們分析出有以下幾種辦法來彌補(bǔ):陣營(yíng)選擇:如果想要設(shè)計(jì)的更貼近用戶,那么在開始游戲之前加入提示玩家是否要對(duì)棋子的顏色來進(jìn)行選擇,或是紅色或是黑色,又玩家自己決定。存儲(chǔ)成績(jī)與排名:如果要使得該游戲更人性化,可以加入對(duì)各個(gè)玩家游戲的成績(jī)的儲(chǔ)存以及和其他各玩家相比的排名,根據(jù)前面介紹的存儲(chǔ)技術(shù)來對(duì)成績(jī)進(jìn)行存儲(chǔ),這樣使得游戲具備的功能全面。背景音樂:該游戲若能加上落子的音效,更加能夠提升游戲的可玩性。
結(jié)論Android可以說是目前最受歡迎的手機(jī)系統(tǒng)了,而對(duì)于手機(jī)來說多點(diǎn)觸控則是屬于當(dāng)前的熱點(diǎn)。多點(diǎn)觸控系統(tǒng)摒棄了傳統(tǒng)的手機(jī)按鍵式操作方式,用戶只需用手指輕觸手機(jī)屏幕就可以方便的完成打開界面、轉(zhuǎn)換畫面、信息查詢、拖動(dòng)控制等功能。在Android平臺(tái)上開發(fā)一款功能強(qiáng)大的系統(tǒng),可以上讓用戶使用手機(jī)更加的方便,靈活。本游戲是在Eclipse上面設(shè)計(jì)出來的,運(yùn)用的Java語(yǔ)言,基于JAVA來運(yùn)行服務(wù)功能的,對(duì)于手機(jī)客戶來說,需要使用的操作系統(tǒng)為Android1.6以上的版本,并且主要運(yùn)行成功了以下幾個(gè)的功能:人和人玩、人和電腦玩,關(guān)于。1.人人對(duì)戰(zhàn):人人對(duì)戰(zhàn)就是當(dāng)用戶進(jìn)入到主界面之后,摁人人對(duì)戰(zhàn)按鈕從而開始的游戲。如果摁人和人玩的那個(gè)按鈕,那么屏幕會(huì)進(jìn)入人和人玩的方式,其棋盤界面與人機(jī)對(duì)戰(zhàn)模式的界面是一樣的。在該游戲過程中是沒有計(jì)算機(jī)算法的。游戲玩家可以找一個(gè)自己的朋友來一起玩這個(gè)人和人的方式,或者自己擔(dān)任兩個(gè)角色。在該游戲過程中,兩種顏色的棋子分別被參與游戲的雙方玩家執(zhí)有,而且游戲規(guī)定先落子的一方默認(rèn)使用的是黑色的棋子,另一方則為白色棋子,系統(tǒng)默認(rèn)當(dāng)游戲雙方有任意一方出現(xiàn)五顆及以上的棋子連在一起時(shí),則判定該游戲玩家勝利,反之另一方則失敗。2.人機(jī)對(duì)戰(zhàn):用戶在使用手機(jī)客戶端的時(shí)候,先打開該游戲的應(yīng)用程序,然后在主界面上摁人和機(jī)玩的那個(gè)按鈕,這樣就可以開始這個(gè)方式的游戲,此時(shí),手機(jī)屏幕會(huì)跳轉(zhuǎn)到人機(jī)對(duì)戰(zhàn)的界面。在此模式中,系統(tǒng)默認(rèn)游戲玩家執(zhí)有黑色的棋子,那么白色棋子歸電腦所有。玩家或者電腦雙方只要有一方棋子有五顆及以上連在一起時(shí),則該方將贏得勝利。3.關(guān)于:當(dāng)用戶在主界面摁那個(gè)關(guān)于按鈕時(shí),將轉(zhuǎn)換到關(guān)于那個(gè)框框,出現(xiàn)的將是次游戲的作者的資料。通過這段時(shí)間對(duì)Android編程的學(xué)習(xí),不僅讓我學(xué)習(xí)到了以前沒有深入學(xué)到的知識(shí),同時(shí)讓我對(duì)手機(jī)開發(fā)產(chǎn)生了一定的興趣。每一次發(fā)現(xiàn)問題,解決問題都讓我印象深刻,每一次實(shí)現(xiàn)一個(gè)功能,都會(huì)對(duì)本系統(tǒng)有更深的理解。以前沒有學(xué)習(xí)到Android中手勢(shì)識(shí)別和方向傳感器的知識(shí),通過本次畢業(yè)設(shè)計(jì)的考驗(yàn),讓我學(xué)習(xí)到了手機(jī)經(jīng)常用到的,比較新意的東西,而對(duì)Java語(yǔ)言和Eclipse開發(fā)平臺(tái)也有了進(jìn)一步的熟悉。雖然如此,我所學(xué)到的還是很有限的,需要在今后更一步的深入學(xué)習(xí)。
致謝本次畢業(yè)設(shè)計(jì)在我的指導(dǎo)老師于桂玲老師的精心指導(dǎo)下,前前后后歷經(jīng)三個(gè)多月的忙碌,終于可以說就要完成了。雖然中間有很多的艱辛與不易,但現(xiàn)在終見成效,喜悅的心情難以言表。首先我很感謝我的指導(dǎo)老師,她的平易近人與悉心教導(dǎo),讓我領(lǐng)悟很多,不僅僅是該論文的寫作,更是她的人格魅力,讓我感悟到做人應(yīng)有的對(duì)學(xué)業(yè)以及生活的嚴(yán)謹(jǐn)與認(rèn)真的態(tài)度,這對(duì)我受益匪淺,也可以說終將會(huì)受益終身。在此,我再次向于桂玲老師表示感謝并致以祝福!同時(shí),我還要對(duì)我的母校說聲感謝,感謝她四年來的照顧,感謝她給我?guī)淼淖院栏?,以及母校所有的師生們。因?yàn)槟銈儫o(wú)私的奉獻(xiàn)與關(guān)懷,不僅使我順利完成了學(xué)業(yè),還教會(huì)我很多很多。四年的大學(xué)生活使我們真正成長(zhǎng)為一個(gè)有理想,有追求,有知識(shí)的當(dāng)代青年。在此我還想感謝論文中涉及到的參考文獻(xiàn)的學(xué)者們。你們就像行路上的明燈,有你們的辛苦鉆研與考究,才有那么多可以稱得上經(jīng)典的參考文獻(xiàn),給我完成論文帶來了很多靈感的啟發(fā)。我作為一個(gè)本科生,對(duì)文章中涉及到的知識(shí)的掌握還不是特別的深刻,所以難免會(huì)存在一些不足之處,在此,也懇請(qǐng)各位老師能夠諒解并且指正,讓我能夠?qū)W習(xí)的更好!最后,我要感謝陪伴了我生命中很重要的大學(xué)時(shí)光的同學(xué)們,尤其是幫助我在畢業(yè)設(shè)計(jì)中解決問題與難點(diǎn)的師姐。大學(xué)四年,與同學(xué)們一起互相幫助,共同進(jìn)步,不斷充實(shí)自己。我發(fā)自心底地感謝你們對(duì)我的幫助和支持!
參考文獻(xiàn)[1]林城.Android2.3應(yīng)用開發(fā)實(shí)戰(zhàn)[M].第一版.機(jī)械工業(yè)出版社,2011:17-321.[2]韓超.Android經(jīng)典應(yīng)用程序開發(fā)[M].第二版.人力資源出版社,2011:5-18.[3](美)CayS.Horstmann,CornellG.Java核心技術(shù)[M].第一版.機(jī)械工業(yè)出版社,2008:5-18.[4]劉衛(wèi)國(guó),姚昱禹.Android與J2ME平臺(tái)間即時(shí)通信的研究與實(shí)現(xiàn)[J].Android工程師,2008(11):118-120.[5]劉平.Android手機(jī)訪問服務(wù)器的一種數(shù)據(jù)交互方法[J].西安財(cái)經(jīng)學(xué)院網(wǎng)絡(luò)與現(xiàn)在教育技術(shù),2010(6):96-102.[6]劉玉平.Java輸入輸出流及在網(wǎng)站開發(fā)中的應(yīng)用探討[J].科技實(shí)況,2009(18):35-49.[7]趙亮,張維.基于Android技術(shù)的界面設(shè)計(jì)與研究[D].徐州:徐州建筑職業(yè)技術(shù)學(xué)院,2001.[8]陳璟,陳平華,李文亮.Android內(nèi)核分析[J].Android程序員,2009(4):112-115.[9]劉衛(wèi)國(guó),姚昱禹.Android的架構(gòu)與應(yīng)用開發(fā)研究[J].Android程序員,2009(7):110-112.[10]FriesenJ.LearnJavaforAndroidDevelopment[M].NewYork:Apress,2010:19-142.[11]AblesonF,CollinsC,SenR.UnlockingAndroid:ADeveloper’sGuide[M].NewYork:ManningPublications,2009:75-186.
附錄【1】人機(jī)對(duì)戰(zhàn)主要代碼:privatevoidinitRange(List<Point>comuters,List<Point>humans) { currentRange.xStart=humans.get(0).getX()-RANGE_STEP; currentRange.yStart=humans.get(0).getY()-RANGE_STEP; currentRange.xStop=humans.get(0).getX()+RANGE_STEP; currentRange.yStop=humans.get(0).getY()+RANGE_STEP; for(Pointpoint:humans) { if(point.getX()-RANGE_STEP<currentRange.xStart) { currentRange.xStart=point.getX()-RANGE_STEP; }elseif(point.getX()+RANGE_STEP>currentRange.xStop) { currentRange.xStop=point.getX()+RANGE_STEP; } if(point.getY()-RANGE_STEP<currentRange.yStart) { currentRange.yStart=point.getY()-RANGE_STEP; }elseif(point.getY()+RANGE_STEP>currentRange.yStop) {currentRange.yStop=point.getY()+RANGE_STEP;}} for(Pointpoint:comuters) { if(point.getX()-RANGE_STEP<currentRange.xStart) { currentRange.xStart=point.getX()-RANGE_STEP; }elseif(point.getX()+RANGE_STEP>currentRange.xStop) { currentRange.xStop=point.getX()+RANGE_STEP; } if(point.getY()-RANGE_STEP<currentRange.yStart) { currentRange.yStart=point.getY()-RANGE_STEP; }elseif(point.getY()+RANGE_STEP>currentRange.yStop) { currentRange.yStop=point.getY()+RANGE_STEP; }//如果棋盤被擴(kuò)充之后多于之前的,那么選之前的棋盤大小 } currentRange.xStart=currentRange.xStart<0?0:currentRange.xStart; currentRange.yStart=currentRange.yStart<0?0:currentRange.yStart; currentRange.xStop=currentRange.xStop>=maxX?maxX-1 :currentRange.xStop; currentRange.yStop=currentRange.yStop>=maxY?maxY-1 :currentRange.yStop; }首先先判定計(jì)算機(jī)算法的計(jì)算范圍,然后將分析現(xiàn)有棋盤的形式。主要代碼如下: privatePointdoAnalysis(List<Point>comuters,List<Point>humans) {//我們來對(duì)屬于現(xiàn)行的入口方式進(jìn)行研究,可以分三個(gè)步驟,其中第三步驟的難度控制可由子類干預(yù) if(humans.size()==1) {//第一步 returngetFirstPoint(humans); } //初始化計(jì)算范圍 initRange(comuters,humans); //清除以前的結(jié)果 initAnalysisResults(); //開始分析后,我們通過對(duì)所有沒有棋子的點(diǎn)來得出第一次分析結(jié)果 PointbestPoint=doFirstAnalysis(comuters,humans); if(bestPoint!=null) { //System.out.println("這步就必須這么走了,是非常需要的"); returnbestPoint; } //我們通過第一次的結(jié)果來判斷哪個(gè)點(diǎn)最適合自己 bestPoint=doComputerSencondAnalysis(computerFirstResults, computerSencodResults); if(bestPoint!=null) {//System.out.println("馬上就贏了,必須走這步"); returnbestPoint; } computerFirstResults.clear(); System.gc(); //我們利用第一次的結(jié)果來選出敵人最重要的那個(gè)的點(diǎn) bestPoint=doHumanSencondAnalysis(humanFirstResults, humanSencodResults); if(bestPoint!=null) { //System.out.println("再不下這個(gè)棋子就輸了"); returnbestPoint; } humanFirstResults.clear(); System.gc(); //沒有找到一招致命的點(diǎn),第三次結(jié)果分析 returndoThirdAnalysis(); } //根據(jù)人和人玩的時(shí)候分析首先要進(jìn)行的落子步驟來進(jìn)行,這個(gè)過程的計(jì)算過程很簡(jiǎn)單 privatePointgetFirstPoint(List<Point>humans) { Pointpoint=humans.get(0); if(point.getX()==0||point.getY()==0||point.getX()==maxX &&point.getY()==maxY) returnnewPoint(maxX/2,maxY/2); else { returnnewPoint(point.getX()-1,point.getY()); } }當(dāng)?shù)谝徊酵瓿芍?,?jì)算機(jī)開始分析,掃描所有空白的點(diǎn),形成第一次分析結(jié)果,主要代碼如下: privatePointdoFirstAnalysis(List<Point>comuters,List<Point>humans) {//我們通過觀察所有沒有棋子的空格來分析得出第一次結(jié)果 intsize=allFreePoints.size(); PointcomputerPoint=null; PointhumanPoint=null; intx,y; FirstAnalysisResultfirstAnalysisResult; for(inti=0;i<size;i++) { computerPoint=allFreePoints.get(i); //為了防止在分析的時(shí)候會(huì)將原來的對(duì)象改變,我們需要把坐標(biāo)記下 x=computerPoint.getX(); y=computerPoint.getY(); if(x<currentRange.xStart||x>currentRange.xStop ||y<currentRange.yStart||y>currentRange.yStop) { continue; } //我們?cè)谶@個(gè)位子落子,并分析落子后在橫向上的狀態(tài),如活4,活3,半活4,活2等所有狀態(tài) firstAnalysisResult=tryAndCountResult(comuters,humans, computerPoint,HENG); computerPoint.setX(x).setY(y);//為了下一次分析撤銷此步 if(firstAnalysisResult!=null) {//如果沒有結(jié)果,那么這個(gè)情況下不能分勝負(fù) if(firstAnalysisResult.count==5)//如果等于5,那表明有一種顏色的棋子已經(jīng)出現(xiàn)五個(gè)及以上在一起的情況,勝負(fù)已定 returncomputerPoint; //記錄第一次分析結(jié)果 addToFirstAnalysisResult(firstAnalysisResult, computerFirstResults); } //在“縱向”對(duì)上面的步驟再走一次 firstAnalysisResult=tryAndCountResult(comuters,humans, computerPoint,ZHONG); computerPoint.setX(x).setY(y); if(firstAnalysisResult!=null) {//死棋,不下 if(firstAnalysisResult.count==5) returncomputerPoint; addToFirstAnalysisResult(firstAnalysisResult, computerFirstResults); } //正斜向 firstAnalysisResult=tryAndCountResult(comuters,humans, computerPoint,ZHENG_XIE); computerPoint.setX(x).setY(y); if(firstAnalysisResult!=null) { if(firstAnalysisResult.count==5) returncomputerPoint; addToFirstAnalysisResult(firstAnalysisResult, computerFirstResults); } firstAnalysisResult=tryAndCountResult(comuters,humans, computerPoint,FAN_XIE); computerPoint.setX(x).setY(y); if(firstAnalysisResult!=null) { if(firstAnalysisResult.count==5) returncomputerPoint; addToFirstAnalysisResult(firstAnalysisResult, computerFirstResults); } //分析在橫向上對(duì)方棋子的狀態(tài)是怎樣的,如敵方的活3、半活4等 firstAnalysisResult=tryAndCountResult(humans,comuters, computerPoint,HENG); computerPoint.setX(x).setY(y); if(firstAnalysisResult!=null) { if(firstAnalysisResult.count==5) humanPoint=computerPoint; addToFirstAnalysisResult(firstAnalysisResult,humanFirstResults); } firstAnalysisResult=tryAndCountResult(humans,comuters, computerPoint,ZHONG); computerPoint.setX(x).setY(y); if(firstAnalysisResult!=null) { if(firstAnalysisResult.count==5) humanPoint=computerPoint; addToFirstAnalysisResult(firstAnalysisResult,humanFirstResults); } firstAnalysisResult=tryAndCountResult(humans,comuters, computerPoint,ZHENG_XIE); computerPoint.setX(x).setY(y); if(firstAnalysisResult!=null) { if(firstAnalysisResult.count==5) humanPoint=computerPoint; addToFirstAnalysisResult(firstAnalysisResult,humanFirstResults); } firstAnalysisResult=tryAndCountResult(humans,comuters, computerPoint,FAN_XIE); computerPoint.setX(x).setY(y); if(firstAnalysisResult!=null) { if(firstAnalysisResult.count==5)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)除塵設(shè)備產(chǎn)業(yè)運(yùn)營(yíng)狀況與發(fā)展?jié)摿Ψ治鰣?bào)告
- 2025-2030年中國(guó)鉛白市場(chǎng)發(fā)展現(xiàn)狀及前景趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)鎢鐵行業(yè)發(fā)展現(xiàn)狀及前景趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)轎車懸架彈簧轎行業(yè)發(fā)展?fàn)顩r及前景趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)葡萄糖酸鈣市場(chǎng)競(jìng)爭(zhēng)狀況及投資趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)色選機(jī)市場(chǎng)競(jìng)爭(zhēng)格局及發(fā)展趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)紡織品直噴墨水行業(yè)發(fā)展趨勢(shì)與十三五規(guī)劃研究報(bào)告
- 2025-2030年中國(guó)立磨市場(chǎng)運(yùn)行態(tài)勢(shì)及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)硫磺回收市場(chǎng)運(yùn)行狀況及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2025-2030年中國(guó)石蠟行業(yè)市場(chǎng)運(yùn)行狀況及發(fā)展策略分析報(bào)告
- T-CHAS 20-2-11-2022 醫(yī)療機(jī)構(gòu)藥事管理與藥學(xué)服務(wù) 第2-11部分:臨床藥學(xué)服務(wù) 治療藥物監(jiān)測(cè)
- 質(zhì)量部架構(gòu)圖
- 結(jié)構(gòu)化學(xué)-第1章講義課件
- 粉塵防爆安全管理臺(tái)賬-全套
- 廣州退休申請(qǐng)表范本
- 管道完整性管理方法及應(yīng)用
- 傳媒侵權(quán)法介紹
- 麥茬花生高產(chǎn)栽培技術(shù)
- 玉米制種技術(shù)
- 中國(guó)旅游資源概述
- 高一下分科文科班第一次主題班會(huì)
評(píng)論
0/150
提交評(píng)論