基于Android系統(tǒng)的五子棋游戲開發(fā)與實現(xiàn)_第1頁
基于Android系統(tǒng)的五子棋游戲開發(fā)與實現(xiàn)_第2頁
基于Android系統(tǒng)的五子棋游戲開發(fā)與實現(xiàn)_第3頁
基于Android系統(tǒng)的五子棋游戲開發(fā)與實現(xiàn)_第4頁
基于Android系統(tǒng)的五子棋游戲開發(fā)與實現(xiàn)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

題目基于Android系統(tǒng)的五子棋游戲開發(fā)與實現(xiàn)學(xué)生姓名學(xué)號所在系(院)計算機(jī)科學(xué)與技術(shù)專業(yè)名稱年級指導(dǎo)教師于桂玲職稱講師2013年6月10日北京郵電大學(xué)畢業(yè)設(shè)計(論文)誠信聲明本人聲明所呈交的畢業(yè)設(shè)計(論文),題目《基于Android平臺的五子棋游戲開發(fā)與實現(xiàn)》是本人在指導(dǎo)教師的指導(dǎo)下,獨(dú)立進(jìn)行研究工作所取得的成果,除了文中特別加以標(biāo)注和致謝中所羅列的內(nèi)容以外,畢業(yè)設(shè)計(論文)中不包含其他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得北京郵電大學(xué)或其他教育機(jī)構(gòu)的學(xué)位或證書而使用過的材料。申請學(xué)位論文與資料若有不實之處,本人承擔(dān)一切相關(guān)責(zé)任。本人簽名:日期:畢業(yè)設(shè)計(論文)使用權(quán)的說明本人完全了解北京郵電大學(xué)有關(guān)保管、使用論文的規(guī)定,其中包括:①學(xué)校有權(quán)保管、并向有關(guān)部門送交學(xué)位論文的原件與復(fù)印件;②學(xué)??梢圆捎糜坝?、縮印或其它復(fù)制手段復(fù)制并保存論文;③學(xué)??稍试S論文被查閱或借閱;④學(xué)校可以學(xué)術(shù)交流為目的,復(fù)制贈送和交換學(xué)位論文;⑤學(xué)??梢怨紝W(xué)位論文的全部或部分內(nèi)容。本人簽名:日期:指導(dǎo)教師簽名:日期:北京郵電大學(xué)畢業(yè)設(shè)計(論文)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è)計 82.1需求分析與創(chuàng)新意義 82.1.1系統(tǒng)的需求分析 82.1.2系統(tǒng)的創(chuàng)新與意義 82.2系統(tǒng)的功能設(shè)計 92.2.1人機(jī)對戰(zhàn) 92.2.2人人對戰(zhàn) 92.2.3關(guān)于 102.3系統(tǒng)的組成與實現(xiàn)原理 102.3.1系統(tǒng)組成 102.3.2系統(tǒng)實現(xiàn)原理 102.4本章小結(jié) 113客戶端系統(tǒng)的實現(xiàn) 123.1用戶進(jìn)入游戲 133.2人人對戰(zhàn) 153.3人機(jī)對戰(zhàn) 203.4關(guān)于 223.5本章小結(jié) 224系統(tǒng)的測試 234.1系統(tǒng)的測試環(huán)境 234.1.1系統(tǒng)的開發(fā)環(huán)境 234.1.2系統(tǒng)運(yùn)行環(huán)境 234.2系統(tǒng)功能測試 234.2.1人人對戰(zhàn)測試 244.2.2人機(jī)對戰(zhàn)測試 244.2.3關(guān)于測試 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)營商通訊網(wǎng)絡(luò)來接入無線進(jìn)行網(wǎng)絡(luò)操作。目前,細(xì)數(shù)全球范圍內(nèi)多數(shù)的手機(jī)廠商都在做智能手機(jī),例如具有代表性的蘋果、三星、HTC、小米等。我們分析智能手機(jī)具備以下五大特點(diǎn):1.可以通過無線技術(shù)接入因特網(wǎng),即要有GSM網(wǎng)絡(luò)支持下的GPRS或者是CDMA網(wǎng)絡(luò)支持下的CDMA1X或3G網(wǎng)絡(luò)。2.比較人性化,可以根據(jù)個人需求自行更改主題界面等。3.具有開放性,可以根據(jù)不同用戶的需求自行下載安裝特別多的應(yīng)用程序,比如社交軟件或者游戲等,從而可以達(dá)到無限的擴(kuò)充智能手機(jī)功能的效果。4.具有PDA(掌上電腦)功能,例如有文件的管理、便簽、地圖搜索、網(wǎng)頁瀏覽、多媒體播放、辦公軟件、應(yīng)用程序管理等。5.具有很強(qiáng)大的功能,可以在很多的地方下載并安裝別的軟件。Android的誕生:準(zhǔn)確的來說是在二零零三年,創(chuàng)始人AndyRubin在Android的傳奇開始之前就說過:“我們有很大的潛力來開發(fā)能夠捕捉用戶地理位置信息以及狀態(tài)的不固定的設(shè)備。如果這些設(shè)計者很有想法的話,那么在很短的時間內(nèi)這些東西就會被應(yīng)用到那些產(chǎn)品中?!爆F(xiàn)在看,估計創(chuàng)始人自己都不會想到他的預(yù)言是這么的準(zhǔn)確。事實上,我們可以預(yù)見未來在移動領(lǐng)域?qū)芯薮蟮母淖?,從而催生出類似于概念機(jī)那樣新穎、獨(dú)特、超前的智能機(jī)。二零零五年的時候,有很多謠傳說Google通過專注于制造可以捕捉位置服務(wù)的手機(jī)從而進(jìn)軍手機(jī)制領(lǐng)域,但是擺在它面前最大難題就是它并沒有實現(xiàn)這個愿望的可搭載的平臺。Google在二零零五年的七月收購了Android,雖然是一次小規(guī)模的收購行動,但大家懷疑這標(biāo)志著Google進(jìn)入了移動市場,所以還是立刻就引起了業(yè)界的大力關(guān)注。盡管是這樣,在那個時候,這個發(fā)展沒有很壯大的做軟件的公司正是由?AndyRubin、RichMiner、NickSears以及ChrisWhite四個人共同創(chuàng)建的?,F(xiàn)在看來,他們的疑慮是對的。差不多就在二零零七年十一月五日的時候,Google對公眾開放了Android,這個不僅僅是一個基于Linux的全新的移動操作系統(tǒng),最重要的是它完全是不保密設(shè)計代碼的,不用說,這在業(yè)內(nèi)肯定會使人們震驚,做出很大的改變。這是當(dāng)時新成立的開放手機(jī)聯(lián)盟整合下的成果,諸如Google、HTC、Intel、Sprint-Nextel、T-Mobile以及NVIDIA都是一個組織的成員,這個組織是為了給所有的設(shè)備建造一個共同的可使用的標(biāo)準(zhǔn)。第一款搭載Android系統(tǒng)的手機(jī)是2008年9月由T-Mobile發(fā)布的G1,它擁有GPS功能,3.1M攝像頭,以及一系列的Google應(yīng)用。G1的面市,正式拉開了一場巨大變革的序幕,不僅僅是Google,更是對于整個移動業(yè)界。2009年5月發(fā)布了第一個主要版本Android1.5“Cupcake”。在對它進(jìn)行升級之后,用戶界面有了很大的改善,新的版本無疑給用戶帶來了全新的體驗,并且它還增加了一些功能。Android1.6“Donut”2009年9月發(fā)布。搭載Android1.6的HTCHero獲得了意想不到的成功。不僅得到了一些從未有過的關(guān)注,讓許多客戶真正對Android產(chǎn)生興趣,而且更觸動了蘋果和微軟兩家競爭者的敏感神經(jīng)。Android2.0/2.1:,又有一個很重要的版本在2009年10月26日完成,這次完成的速度可以說是相當(dāng)快的,無與倫比。這次,大版本升級到了Android2.0/2.1“Eclair”。繼2009年12月發(fā)布的Android2.0.1SDK后,是在2010年1月發(fā)布的2.1版本。會有很多的看客甚至是用戶都會奇怪,為什么Android的系統(tǒng)版本代號會被稱作甜點(diǎn),其實是在Android1.5發(fā)布出來的時候開始使用的這個命名的方法。按照字母的順序,依次是小蛋糕,甜甜圈和松餅,所以每更新一個版本就可以被想象成是對它的大小的擴(kuò)充。Android2.2“FroYo”:NexusOne的用戶已經(jīng)開始接受Android2.2“FroYo”的無線更新,并會在很快速的時間內(nèi)使所有使用其他手機(jī)的玩家能夠使用這個新的版本。這個系統(tǒng)版本新的升級,讓很多的使用其他手機(jī)的人們很是羨慕,因為它有很好的界面,還增加了許多新的功能,玩家使用會有新的感受。有關(guān)的消息眾口一詞聲稱?Android3.0“Gingerbread”,它會讓用戶有更新穎的更獨(dú)特的體驗,并且Google估計會在今年秋天的時候?qū)⑺l(fā)布出來??v觀Android的發(fā)展史,在2003年的時候,出現(xiàn)了特別有遠(yuǎn)見的Andy,他的預(yù)言得到了證實,2005年經(jīng)歷了正式起步以及被Google收購。一路以來,系統(tǒng)一直在進(jìn)步,并且新的機(jī)型也一直在快速的發(fā)布。通過這一切,我們有理由相信,Android很有可能會成為手機(jī)系統(tǒng)同行業(yè)內(nèi)的最優(yōu)秀的,這樣的勢頭,不容易被改變。Android平板電腦也在今年的夏天開始發(fā)布以及GoogleTV發(fā)布以后(也許還有GoogleMusic),Android有很大的可能讓我們領(lǐng)會未來手機(jī)的發(fā)展趨勢,讓我們具有不一樣的體驗[10]。Android平臺對比其他的平臺有很多的有點(diǎn)。首先分析Symbian,主要是在諾基亞手機(jī)上運(yùn)行,雖然說已經(jīng)發(fā)展的很成熟,但是它在理念上與我們平時經(jīng)常用的系統(tǒng)還是有很大的差別,整個感覺上還是偏向于以前舊一點(diǎn)的設(shè)計。重要的是它對互聯(lián)網(wǎng)并沒有連接的特別好,不能夠讓用戶體驗到特別滿意的聯(lián)網(wǎng)速度,在這樣一個信息化時代就顯得沒有競爭力。但是Android不同,它最主要最關(guān)注的就是對于聯(lián)網(wǎng)這一塊兒,不管是軟件還是硬件的設(shè)計,都是在主要突出互聯(lián)網(wǎng)的重要,正好是彌補(bǔ)了Symbian最大的不足。這樣,就會讓用戶更好更舒適的感受信息化時代,所以更容易贏得用戶的喜愛,得到廣大用戶的接受與認(rèn)可。還有就是現(xiàn)在比較流行的ios,雖然它有很完整的應(yīng)用,可以給用戶帶來很多很豐富的體驗,但是它只是相對于蘋果用戶而言,并不可以針對多數(shù)的手機(jī)用戶。但是Android同樣不同于ios,它是完全開放的,這樣更多的開發(fā)者可以為其設(shè)計多種多樣不同的應(yīng)用,繼而迎來越來越多的開發(fā)創(chuàng)意,進(jìn)而豐富其應(yīng)用領(lǐng)域。而且,它具有一定的標(biāo)準(zhǔn),各種不同的平臺都可以兼容使用,所以完全可以植于好多的手機(jī)品牌上,這樣更有利于它的推廣,讓更多的用戶熟知??偟膩碚f,現(xiàn)在流行的系統(tǒng)中,從不同的方面都可以看出Android系統(tǒng)相比其他系統(tǒng)的優(yōu)勢,可以說它擁有很多手機(jī)用戶的支持者[2]。所以完全可以這樣說,隨著人們對移動設(shè)備的要求變得越來越高,那就必須有能夠逐漸滿足這樣一個高要求的開發(fā)平臺,那么Android就是在這樣的環(huán)境下應(yīng)運(yùn)而生的。綜合的來講,它完全符合目前的趨勢,可以說是真正意義上的一個具有開放性的綜合平臺,不論是開發(fā)軟件的公司還是搞研發(fā)的個人,都可以用它來作為開發(fā)的基礎(chǔ)。在技術(shù)方面,由于它具有很強(qiáng)的可操作性,人們在編寫程序的時候可以根據(jù)自己的意向來實現(xiàn),這樣就給開發(fā)者進(jìn)行創(chuàng)新提供了很大的可能。在成本方面,只要擁有編程的技術(shù)就可以在Android平臺上進(jìn)行功能的實現(xiàn),是很節(jié)約的,因此它就完全可以降低不少的成本。設(shè)計者們可以在此基礎(chǔ)上設(shè)計出具有個性特色的各類應(yīng)用,所以,綜合用戶的需求,并從軟件這個很大的市場來說,Android很明顯具有很大的發(fā)展?jié)摿4]。課題研究的意義和目的游戲,作為一種娛樂項目,在我們現(xiàn)在這樣會面臨很多壓力的生活中,真的是一類不可或缺的活動。在我們的生活中,游戲的種類有千種萬種,不同的游戲也會給人帶來不同的放松和娛樂感受,正因為它的必不可少性,帶動很大一部分人來研究越來越多的游戲,這不經(jīng)意間就豐盛了手機(jī)游戲行業(yè)。隨著歷史的發(fā)展,游戲也有了很大的發(fā)展和改變,從之前最簡單的到后來在電視上進(jìn)行的游戲,繼而到pc游戲,再到現(xiàn)在的手機(jī)游戲,其發(fā)展過程也經(jīng)歷了很多樣的技術(shù)革新。隨著我們生活水平的日益發(fā)展和新技術(shù)的偉大變革,手機(jī)逐漸在我們的生活中普及起來,它小巧玲瓏,功能強(qiáng)大,并且方便攜帶,這些特性都讓它最終成為我們生活中的必需品。隨著3g以至4g的開通及應(yīng)用,手機(jī)必然會迎來一輪更深層次的普及,而可以讓用戶在手機(jī)上玩游戲也就隨著手機(jī)火爆起來,因此這類游戲的研究還是有很大的發(fā)展空間的,必將會迎來手機(jī)用戶的追捧!五子棋,它可以說是一種棋牌類的游戲,是需要有一定的策略的。棋盤和圍棋是通用的,有黑色和白色棋子兩種,但規(guī)則相對來說就比較簡單了,在我國古代,是比較流行的棋術(shù)之一。兩個人進(jìn)行游戲,各拿一個顏色的棋子,一人接一人輪流落子,經(jīng)過主動進(jìn)攻或者是防守,直到有一方會出現(xiàn)五顆或者五顆以上的棋子連成一條線,就判定這一方獲勝,那么游戲?qū)⒔Y(jié)束。由于落子之后棋子不像象棋那些可以隨意的移動位置,有時候也是可以用紙質(zhì)的棋盤和筆來進(jìn)行的。該游戲由于規(guī)則簡單,很容易就可以上手的,而且老少皆宜,玩起來比較有趣,不僅需要很好的策略,也需要隨時來處理不同的情況。這樣的游戲簡單易玩,并且鍛煉思維,更對于小孩兒來說,可以開發(fā)智力。這些在手機(jī)上開發(fā)的游戲,更是對方便快捷悠閑的最好體現(xiàn)。五子棋會有很強(qiáng)大的客戶群,即使是之前完全沒有接觸過該游戲的人也可以輕而易舉的明白具體的玩兒法,并且會感覺到特別有趣;它是以手機(jī)平板平臺為主的,只要是裝載它的話就可以隨時來玩兒,這樣在人們感受特別方便的同時,還可以享受現(xiàn)在這樣的高科技生活下的悠閑;這個游戲還需要一定的策略,每走一步都會引起思考,但是卻不會給人帶來壓迫感,就是這樣略微輕松的思考,鍛煉了思維的同時也娛樂了身心。所以,綜合上述該游戲的各方面好處,設(shè)計在手機(jī)上可以進(jìn)行此游戲的應(yīng)用就顯得很重要了。本課題的目的是基于Android平臺,設(shè)計出一款基于Android平臺的五子棋游戲,該游戲?qū)⒖梢酝嫒巳藢?zhàn)及人機(jī)對戰(zhàn)兩類??尚行匝芯窟@個階段,在對系統(tǒng)的目標(biāo)進(jìn)行了初步的調(diào)查和分析的基礎(chǔ)上,得出了一個可行性方案,并對其進(jìn)行了論證。本文主要從三個可行性方面進(jìn)行了分析,分別是技術(shù)、經(jīng)濟(jì)和操作。技術(shù)可行性技術(shù)可行性有很多因素要考慮到,比如說目前擁有的技術(shù)條件是否可以滿足使得游戲可以最終達(dá)到計劃的要求,軟件和硬件的型號級別能否跟上完成的節(jié)奏等。本軟件用的是Java語言進(jìn)行的,它的操作相對來說比較簡單,現(xiàn)在使用的計算機(jī)的硬件方面也完全跟得上研發(fā)的節(jié)奏。軟件方面:在不用聯(lián)網(wǎng)的模式已經(jīng)發(fā)展的很強(qiáng)大的前提下,軟件就有了很好的發(fā)展平臺,它們具有很多的優(yōu)勢,比如很快的速度、高的可靠性、低的價格和大的容量,系統(tǒng)的需求完全能夠得到滿足。所以從技術(shù)層面上講是一定可以的。我們經(jīng)常需要根據(jù)不同的客戶需求來設(shè)計出好多不同的功能,然后把這些功能嵌入整合到一個產(chǎn)品中,整合配置到那種大型的計算機(jī)系統(tǒng)中,這就是所謂的嵌入式系統(tǒng)。隨著時代一步步的發(fā)展,計算機(jī)慢慢在和通信技術(shù)融合,慢慢的深入到人們生活中的各個層面,信息無處不在,獲取的方式越來越網(wǎng)絡(luò)化,信息化已經(jīng)成為一個不可避免的大趨勢,所有在這樣一個大的背景下,嵌入式的發(fā)展也得到了不可估量的前景。目前的嵌入式已經(jīng)深入到我們?nèi)粘I钪械母鱾€行業(yè),它的使用或許也遠(yuǎn)遠(yuǎn)高過了普通的計算機(jī)系統(tǒng),包括通訊網(wǎng)絡(luò)等,。其中最典型的一個代表就是手機(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是一個開放源代碼的研發(fā)平臺,它是基于Java的,是可擴(kuò)展的。Eclipse是利用特殊規(guī)范的代碼來形成一個可供研發(fā)的程序,但是對于它自己而言,只是一個大概的結(jié)構(gòu)和一些可供使用的命令。令人欣慰的是Eclipse附帶了一個標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(JavaDevelopmentTools,JDT)。它主要由Eclipse項目、Eclipse工具項目和Eclipse技術(shù)項目三個項目組成,具體包括四個部分組成——EclipsePlatform、JDT、CDT和PDE。JDT支持Java開發(fā)、CDT支持C開發(fā)、PDE用來支持插件開發(fā),EclipsePlatform則是一個開放的可擴(kuò)展IDE,它構(gòu)造并且運(yùn)行了集成軟件開發(fā)工具的基礎(chǔ),提供構(gòu)造塊,并且向用戶提供了一個通用性的開發(fā)平臺。EclipsePlatform對任何一個工具可以實現(xiàn)的結(jié)果從什么地方開始或者別的從什么地方結(jié)束是沒有辦法區(qū)分的,因為它不限制工具的制造者與其他的工具是不需要格式的轉(zhuǎn)換的。EclipseSDK(軟件開發(fā)者包)是EclipsePlatform、JDT和PDE所生產(chǎn)的組件合并,它們是不必要分開下載的。這些組合合并在一起共同組成了一個超級豐富并完善的可供開發(fā)的程序,開發(fā)者可以通過它建造一種工具,能夠不受限制不用進(jìn)行轉(zhuǎn)換格式就可以連接到EclipsePlatform。EclipseSDK是由兩部分組成的,一個是Eclipse項目生產(chǎn)的工具,另外的來自第三方軟件,它們是開放源代碼的。這兩部分的協(xié)議是不一樣的,其中第一部分Eclipse自己產(chǎn)生的軟件通過GPL發(fā)布,而第二部分的第三方軟件是具有自己的許可協(xié)議的[7]。從以上的論述可以看出,本軟件的開發(fā)完全具備技術(shù)、經(jīng)濟(jì)和操作三個方面的可行性。本章小結(jié)本章主要是從研究的背景、目的和意義三個方面對五子棋游戲在Android平臺上的研發(fā)和完成的情況進(jìn)行了詳細(xì)的介紹,并分析了該設(shè)計是不是可以運(yùn)行的,分別是技術(shù)、經(jīng)濟(jì)和操作三個方面。

需求分析與系統(tǒng)設(shè)計在Android的系統(tǒng)上來研發(fā)五子棋游戲,并讓它順利運(yùn)行,這樣一個游戲的開發(fā)確保了用戶可以隨時隨地的進(jìn)行并且通過它來鍛煉自己的大腦。通過本系統(tǒng),用戶只要使用Android手機(jī),并且安裝有本軟件,就可以再無聊之余一邊進(jìn)行五子棋游戲,一邊來感受這樣的小游戲帶來的清新與悠閑。用戶可以通過五子棋游戲來享受愉悅的游戲氛圍,娛樂自己,放松身心。需求分析與創(chuàng)新意義下面從在Android上來對五子棋游戲研發(fā)和運(yùn)行的幾個方面來展現(xiàn)五子棋游戲包含的樂趣,首先是游戲的簡單需求分析,然后是簡要的描述該系統(tǒng)的創(chuàng)新點(diǎn)和意義。系統(tǒng)的需求分析本系統(tǒng)的目的就是開發(fā)一個在Android上進(jìn)行研發(fā)的五子棋游戲,有人人對戰(zhàn)和人機(jī)對戰(zhàn)兩個類別供玩家選擇,這兩種類別的選擇或者切換玩家是可以利用操作不同的按鈕來進(jìn)行的。通過本系統(tǒng),用戶可以選擇人人對戰(zhàn)與自己的好友一同進(jìn)行游戲,增進(jìn)朋友之前的友誼,也可以選擇人機(jī)對戰(zhàn),與功能強(qiáng)大的電腦一決高下。主要包括的功能有:人人對戰(zhàn),人機(jī)對戰(zhàn),關(guān)于。該系統(tǒng)功能全面,并且具有良好的界面和易用性,可以給用戶帶來全新的游戲體驗。系統(tǒng)的創(chuàng)新與意義就目前android軟件市場上來說,已經(jīng)有很多類似的五子棋的游戲,但是大多游戲都只是人機(jī)對戰(zhàn),沒有實現(xiàn)人機(jī)對戰(zhàn)與人人對戰(zhàn)結(jié)合,本游戲的目的就是為了整合人機(jī)對戰(zhàn)與人人對戰(zhàn),將他們結(jié)合到一個游戲中。而且如果游戲者想要轉(zhuǎn)換或者改變游戲的屬性是可以通過摁游戲設(shè)置那個按鈕來進(jìn)行的,游戲設(shè)置那個按鈕設(shè)計在主界面上。在游戲設(shè)置中,用戶可以修改游戲的難易程度,游戲的趣味洗牌,是否標(biāo)記行和列,是否為反向等等。系統(tǒng)的功能設(shè)計本系統(tǒng)主要分為三大塊,分別為人機(jī)對戰(zhàn),人人對戰(zhàn),關(guān)于。人機(jī)對戰(zhàn)人機(jī)對戰(zhàn)就是當(dāng)用戶點(diǎn)擊手機(jī)上的歡樂五子棋圖標(biāo)時,進(jìn)入到主界面之后,可以摁那個人機(jī)對戰(zhàn)按鈕來開始。摁那個人機(jī)對戰(zhàn)的按鈕,屏幕會更改所選的界面。人機(jī)對戰(zhàn)中,默認(rèn)設(shè)置是白色棋子屬于電腦,而黑色棋子屬于玩家,并且在游戲過程中無論是玩家還是電腦,只要有一方所用的棋子有五顆及以上的棋子連在一起,則系統(tǒng)會判定該方獲勝,反之則失敗。人人對戰(zhàn)人人對戰(zhàn)就是當(dāng)用戶進(jìn)入到游戲最開的那個界面的時候,摁那個人人對戰(zhàn)按鈕從而開始的游戲。利用將講監(jiān)聽器與空間button綁定一起通過相應(yīng)算法實現(xiàn)摁那個人人對戰(zhàn)按鈕,屏幕將會更改到人人對戰(zhàn)棋盤界面,該界面與人機(jī)對戰(zhàn)界面是一樣的,區(qū)別只是棋子所執(zhí)者不一樣。在該游戲過程中是沒有電腦人工智能計算機(jī)算法的。而是游戲玩家可以找一個自己的好朋友一起來玩游戲的。在人人對戰(zhàn)那個游戲中兩個人分別擁有白色和黑色棋子,應(yīng)為五子棋游戲規(guī)則就是黑子先行,所以默認(rèn)第一玩家為黑子,第二玩家為白子,并且在棋子的數(shù)組中儲存兩種顏色的點(diǎn)的圖樣分別是黑子為0白字為1,系統(tǒng)默認(rèn)第一個落子的玩家為黑子,第二個落子的玩家為白子。當(dāng)每次落子之后,系統(tǒng)會判斷一次是否獲勝當(dāng)黑色或者白色的棋子有五顆及以上連在一起的,則系統(tǒng)會判定該棋子所執(zhí)者獲勝,反之則失敗,并且會彈出對話框顯示“黑子獲勝”或者“白字獲勝”。關(guān)于當(dāng)用戶對此游戲有疑問時,比如該游戲的作者或者是該作者的信息等,可以點(diǎn)擊主界面的關(guān)于按鈕,這是屏幕上會出現(xiàn)一個對話框,上面詳細(xì)介紹所要看的內(nèi)容。系統(tǒng)的組成與實現(xiàn)原理下面從“歡樂五子棋”游戲的組成部分來闡述程序的設(shè)計原理。系統(tǒng)組成“歡樂五子棋”游戲主要包括三大功能點(diǎn),通過三大功能點(diǎn)來完成人人對戰(zhàn),人機(jī)對戰(zhàn),關(guān)于等功能。(如圖2.1所示)圖2.1系統(tǒng)組成部分系統(tǒng)實現(xiàn)原理游戲是怎么樣運(yùn)行的,原理有下面幾點(diǎn):玩家用戶進(jìn)入該系統(tǒng)開始游戲后,系統(tǒng)調(diào)用的都是同一張棋盤,不管游戲者選擇的是人人對戰(zhàn)模式還是人機(jī)對戰(zhàn)模式,其中的區(qū)別只是在棋盤中所執(zhí)行的方法不同。不管游戲者選擇的人和人玩還是人和機(jī)玩,當(dāng)白子或者黑子,任意一種顏色的棋子五顆及以上連在一起的時候,系統(tǒng)將判定該顏色棋子所執(zhí)者贏得了游戲(如圖2.2所示)。圖2.2系統(tǒng)實現(xiàn)原理本章小結(jié)本章內(nèi)容主要是略微介紹了一下“歡樂五子棋”游戲的需求分析,創(chuàng)新與意義,還有三大功能模塊的設(shè)計,同時對本系統(tǒng)的組成部分以及系統(tǒng)實現(xiàn)的原理進(jìn)行了詳細(xì)的分析說明,從而為接下來在編寫程序模塊時能夠思路清晰。

客戶端系統(tǒng)的實現(xiàn)在Eclipse中新建一個命名為MyGobang的Android工程,BuildTarget選擇Android2.2 。在本工程中共有5個包10個類(如圖3.1所示)。圖3.1五子棋游戲系統(tǒng)類全圖其中比較重要的類有:在activity包中,MyGobangActivity.java類用來顯示該游戲的主界面。OfAllWarActivity.java類用來顯示人人對戰(zhàn)的界面。TheWarMachineActivity.java類用來顯示人機(jī)對戰(zhàn)的界面。在base包中,BaseComputerAi.java類用來存放人機(jī)對戰(zhàn)的算法,BasePlayer.java類用來存放人人對戰(zhàn)的算法。在entity包中,Chessboard.java類為棋盤類,改類用于棋盤界面的顯示。Point.java類為每顆棋子所落的點(diǎn)的實體類。在utils包中,HumanPlayer.java為人類玩家的一個實例。在res/layout中,有兩個文件需要被創(chuàng)建:游戲的原始界面的xml文件是main.xml,play.xml文件為顯示棋盤的主界面。用戶進(jìn)入游戲第一次啟動Android拼圖游戲程序會進(jìn)入到程序的主界面。在游戲的主界面中,用戶可以摁不同的功能選項按鈕來選擇對應(yīng)功能。例如游戲用戶可以綜合自己的喜好,通過點(diǎn)擊人人對戰(zhàn)、人機(jī)對戰(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ù)自己的喜好不同,用戶可以選擇摁原始面上任何一個功能按鈕,即可以摁人和人玩的按鈕、人和機(jī)玩的按鈕或者關(guān)于按鈕來分別進(jìn)入人人玩模式、人機(jī)玩模式或者關(guān)于功能,進(jìn)而屏幕上將會轉(zhuǎn)換出所選擇按鈕對應(yīng)的框框來展示,每個Activity之間的轉(zhuǎn)換是通過Intent來實現(xiàn)的,Intent負(fù)責(zé)對應(yīng)中一次操作的動作、動作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Andorid則根據(jù)此Intent的描述,負(fù)責(zé)找到對應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并且完成組件的調(diào)用。在本程序中一共有三個Activity分別是主界面,人人對戰(zhàn)以及人機(jī)對戰(zhàn)界面,通過把事件與Button綁定一起,利用Intent意圖功能來實現(xiàn)Activity的相互調(diào)用,從而達(dá)到我們所預(yù)期的玩家可以在主界面上選擇相應(yīng)模式,并且跳轉(zhuǎn)到相應(yīng)界面功能的效果,其中主體是通過Switch選擇語句實現(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é)號:09060118").setPositiveButton("確定", newDialogInterface.OnClickListener() { publicvoidonClick(DialogInterfacedialog,intwhich) { dialog.cancel();} }).show(); break;} }

人人對戰(zhàn)當(dāng)用戶玩家想要跳轉(zhuǎn)到人和人玩的界面,可以在主界面摁人人玩的按鈕來運(yùn)行。進(jìn)入該界面后,玩家自己可以扮演兩個角色,或者用戶可以邀請一位好友,與好友一同切磋棋藝,(如圖3.3所示)。圖3.3人人對戰(zhàn)界面主要代碼如下: protectedvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.play); gameView=(Chessboard)findViewById(R.id.myBang); gameView.player2=Chessboard.human; }我們在這里可以看到控制界面的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類,這個類繼承的是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è)置畫線時用的顏色 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)加載完棋盤之后,第一個玩家觸摸屏幕中的任意一個點(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ù)谝粋€用戶點(diǎn)擊某一個點(diǎn)之后,將黑子放到該點(diǎn)上,第二個用戶點(diǎn)擊其他的點(diǎn),然后在這個點(diǎn)上放上白色的棋子,依次類推(如圖3.4所示)。圖3.4人人對戰(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)會判定該顏色棋子的所執(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)有五顆棋子無論橫向縱向或者斜向練成一條直線之后,將提示改顏色棋子獲勝。(如圖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ī)對戰(zhàn)游戲用戶可以在界面上摁那個人機(jī)玩按鈕從而轉(zhuǎn)換到人和機(jī)玩的那個界面(如圖3.7所示)。圖3.7人機(jī)對戰(zhàn)界面 主要代碼如下: protectedvoidonCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.play); gameView=(Chessboard)findViewById(R.id.myBang); gameView.player2=Cputer;}人機(jī)對戰(zhàn)的界面樣式與人人對戰(zhàn)的樣式是一樣的,對于棋盤的畫法也是一樣的,兩者的區(qū)別就是,在人機(jī)對戰(zhàn)的模式中,程序的設(shè)置增添了人機(jī)對戰(zhàn)的算法。當(dāng)開始人和機(jī)玩的游戲后,系統(tǒng)會默認(rèn)人這一方第一個落子,即玩家所執(zhí)的是黑色棋子。當(dāng)玩家成功落子后,計算機(jī)將會根據(jù)玩家落子點(diǎn)的位置根據(jù)對應(yīng)的解題步驟處理,然后落第二個子,電腦執(zhí)黑子。電腦的算法步驟如下:第一步:首先分析當(dāng)前的棋盤局勢,并設(shè)想在某個范圍內(nèi)和對方繼續(xù)游戲,循環(huán)設(shè)定雙方棋子落地之后,分析在這個范圍內(nèi)雙方的局勢變化,比如說會不會四子連在一起,或者雙方會不會出現(xiàn)雙3等。第二步:根據(jù)第一步的分析,將上述設(shè)想的每一步棋子落地后的結(jié)果都整合起來,其中有游戲兩方接下來會形成的全部的可能性即每個試探點(diǎn)存在的棋子活3半活4活2等情況的個數(shù)。第三步:根據(jù)五子棋游戲的規(guī)則將第二步所有的結(jié)果綜合排序,并選擇最適當(dāng)?shù)哪且环N情況落子(有主動形、被動形兩種)。人機(jī)對戰(zhàn)主要代碼與講解請見附錄【1】。當(dāng)在人機(jī)對戰(zhàn)的過程中,我們不管哪種顏色的棋子五顆及以上連成了一條直線,則程序?qū)⑴卸ㄔ摲将@勝(如圖3.8所示)。 圖3.8獲勝顯示該模式的主要代碼在判斷獲勝一方是與人人對戰(zhàn)模式一致的。關(guān)于當(dāng)玩家想要查看關(guān)于選項里面的信息時,可以在主界面上點(diǎn)擊關(guān)于按鈕,然后會有一個對話框,上面會介紹該游戲的作者的相關(guān)信息,如果想讓對話框消失,摁那個確定按鈕就可以了(如圖3.9所示)。圖3.9關(guān)于主要代碼如下:newAlertDialog.Builder(this).setTitle("作者:麻博超").setMessage( "學(xué)號:09060118").setPositiveButton("確定", newDialogInterface.OnClickListener() { publicvoidonClick(DialogInterfacedialog,intwhich) { dialog.cancel(); } }).show(); break;本章小結(jié)本章節(jié)主要就是介紹了“歡樂五子棋”包含的游戲功能,它是一款基于Android平臺的游戲,我們要想實現(xiàn)游戲的操作,可以通過點(diǎn)擊手機(jī)程序圖標(biāo)進(jìn)入到游戲主界面,然后再根據(jù)不同的游戲玩家的興趣來轉(zhuǎn)換不同的界面,這個可以摁不同的按鈕來完成操作。

系統(tǒng)的測試系統(tǒng)的測試環(huán)境接下來要對“歡樂五子棋”游戲的系統(tǒng)的幾個方面進(jìn)行簡要的說明,包括開發(fā)、運(yùn)行和網(wǎng)絡(luò)環(huán)境。本系統(tǒng)測試時,必須支持以下的環(huán)境配置,否則無法保證系統(tǒng)的可運(yùn)行性。系統(tǒng)的開發(fā)環(huán)境操作系統(tǒng):WindowsXP、Android2.3.1開發(fā)環(huán)境:Eclipse3.5.0開發(fā)工具:AndroidSDK開發(fā)語言:Java硬件設(shè)備:戴爾本電腦華為Android智能手機(jī)NetcoreNW336150MUSB無線網(wǎng)卡系統(tǒng)運(yùn)行環(huán)境服務(wù)器端程序目前只能運(yùn)行Windows系列的操作系統(tǒng),日后也許會支持跨平臺的應(yīng)用。服務(wù)端程序是由java語言實現(xiàn)的,因此不需要預(yù)裝任何軟件,可以直接運(yùn)行。手機(jī)客戶端方面操作系統(tǒng)必須是Android1.6以上版本,推薦使用Android2.1以上版本。系統(tǒng)功能測試接下來主要進(jìn)行的是測試“歡樂五子棋”游戲的一些基本功能。人人對戰(zhàn)測試功能實現(xiàn):可以進(jìn)入人和人玩的方式。測試目的:可以實現(xiàn)人人對戰(zhàn)游戲,游戲中的玩家將一人分飾兩角,玩家一和玩家二。測試結(jié)果:當(dāng)玩家一或玩家二有一方的五顆棋子連成一條線,將判定該方獲勝。(如圖4.1所示)圖4.1人人對戰(zhàn)測試人機(jī)對戰(zhàn)測試功能實現(xiàn):可以進(jìn)入人和電腦玩的方式。測試目的:可以進(jìn)行人機(jī)對戰(zhàn),并且電腦算法準(zhǔn)確,難度比較大。測試結(jié)果:實現(xiàn)人機(jī)對戰(zhàn)。(如圖4.2所示)圖4.2人機(jī)對戰(zhàn)測試關(guān)于測試功能實現(xiàn):會轉(zhuǎn)化出一個關(guān)于的框框來提示。測試目的:是否可以通過摁主界面上的關(guān)于按鈕來轉(zhuǎn)換出框框提示。測試結(jié)果:屏幕上轉(zhuǎn)換出了關(guān)于對話框來提示。(如圖4.3所示)。圖4.3關(guān)于測試本章小結(jié)本章主要介紹了“歡樂五子棋”游戲的最終功能測試,通過對開人人對戰(zhàn),人機(jī)對戰(zhàn),關(guān)于等功能進(jìn)行測試測試,并且最后都測試通過,整個項目功能已經(jīng)順利完成。

系統(tǒng)存在問題及改進(jìn)方法系統(tǒng)存在的問題此系統(tǒng)基本實現(xiàn)了基于Android系統(tǒng)的五子棋游戲,但是由于時間較緊,還有一些沒有實現(xiàn)的功能。首先玩家在進(jìn)行游戲之前應(yīng)該選擇自己喜歡的棋子顏色,如白色或黑色。其次,程序中沒有響應(yīng)的成績存儲功能。再次,游戲再過程中沒有音效,這讓玩家在玩游戲的過程中感覺有些枯燥乏味。最后,此款游戲的界面,也就是Android客戶端的界面,還存在一定的不足,并沒有特別好看的視覺感覺。系統(tǒng)改進(jìn)方法針對提出的一些不足之處,我們分析出有以下幾種辦法來彌補(bǔ):陣營選擇:如果想要設(shè)計的更貼近用戶,那么在開始游戲之前加入提示玩家是否要對棋子的顏色來進(jìn)行選擇,或是紅色或是黑色,又玩家自己決定。存儲成績與排名:如果要使得該游戲更人性化,可以加入對各個玩家游戲的成績的儲存以及和其他各玩家相比的排名,根據(jù)前面介紹的存儲技術(shù)來對成績進(jìn)行存儲,這樣使得游戲具備的功能全面。背景音樂:該游戲若能加上落子的音效,更加能夠提升游戲的可玩性。

結(jié)論Android可以說是目前最受歡迎的手機(jī)系統(tǒng)了,而對于手機(jī)來說多點(diǎn)觸控則是屬于當(dāng)前的熱點(diǎn)。多點(diǎn)觸控系統(tǒng)摒棄了傳統(tǒng)的手機(jī)按鍵式操作方式,用戶只需用手指輕觸手機(jī)屏幕就可以方便的完成打開界面、轉(zhuǎn)換畫面、信息查詢、拖動控制等功能。在Android平臺上開發(fā)一款功能強(qiáng)大的系統(tǒng),可以上讓用戶使用手機(jī)更加的方便,靈活。本游戲是在Eclipse上面設(shè)計出來的,運(yùn)用的Java語言,基于JAVA來運(yùn)行服務(wù)功能的,對于手機(jī)客戶來說,需要使用的操作系統(tǒng)為Android1.6以上的版本,并且主要運(yùn)行成功了以下幾個的功能:人和人玩、人和電腦玩,關(guān)于。1.人人對戰(zhàn):人人對戰(zhàn)就是當(dāng)用戶進(jìn)入到主界面之后,摁人人對戰(zhàn)按鈕從而開始的游戲。如果摁人和人玩的那個按鈕,那么屏幕會進(jìn)入人和人玩的方式,其棋盤界面與人機(jī)對戰(zhàn)模式的界面是一樣的。在該游戲過程中是沒有計算機(jī)算法的。游戲玩家可以找一個自己的朋友來一起玩這個人和人的方式,或者自己擔(dān)任兩個角色。在該游戲過程中,兩種顏色的棋子分別被參與游戲的雙方玩家執(zhí)有,而且游戲規(guī)定先落子的一方默認(rèn)使用的是黑色的棋子,另一方則為白色棋子,系統(tǒng)默認(rèn)當(dāng)游戲雙方有任意一方出現(xiàn)五顆及以上的棋子連在一起時,則判定該游戲玩家勝利,反之另一方則失敗。2.人機(jī)對戰(zhàn):用戶在使用手機(jī)客戶端的時候,先打開該游戲的應(yīng)用程序,然后在主界面上摁人和機(jī)玩的那個按鈕,這樣就可以開始這個方式的游戲,此時,手機(jī)屏幕會跳轉(zhuǎn)到人機(jī)對戰(zhàn)的界面。在此模式中,系統(tǒng)默認(rèn)游戲玩家執(zhí)有黑色的棋子,那么白色棋子歸電腦所有。玩家或者電腦雙方只要有一方棋子有五顆及以上連在一起時,則該方將贏得勝利。3.關(guān)于:當(dāng)用戶在主界面摁那個關(guān)于按鈕時,將轉(zhuǎn)換到關(guān)于那個框框,出現(xiàn)的將是次游戲的作者的資料。通過這段時間對Android編程的學(xué)習(xí),不僅讓我學(xué)習(xí)到了以前沒有深入學(xué)到的知識,同時讓我對手機(jī)開發(fā)產(chǎn)生了一定的興趣。每一次發(fā)現(xiàn)問題,解決問題都讓我印象深刻,每一次實現(xiàn)一個功能,都會對本系統(tǒng)有更深的理解。以前沒有學(xué)習(xí)到Android中手勢識別和方向傳感器的知識,通過本次畢業(yè)設(shè)計的考驗,讓我學(xué)習(xí)到了手機(jī)經(jīng)常用到的,比較新意的東西,而對Java語言和Eclipse開發(fā)平臺也有了進(jìn)一步的熟悉。雖然如此,我所學(xué)到的還是很有限的,需要在今后更一步的深入學(xué)習(xí)。

致謝本次畢業(yè)設(shè)計在我的指導(dǎo)老師于桂玲老師的精心指導(dǎo)下,前前后后歷經(jīng)三個多月的忙碌,終于可以說就要完成了。雖然中間有很多的艱辛與不易,但現(xiàn)在終見成效,喜悅的心情難以言表。首先我很感謝我的指導(dǎo)老師,她的平易近人與悉心教導(dǎo),讓我領(lǐng)悟很多,不僅僅是該論文的寫作,更是她的人格魅力,讓我感悟到做人應(yīng)有的對學(xué)業(yè)以及生活的嚴(yán)謹(jǐn)與認(rèn)真的態(tài)度,這對我受益匪淺,也可以說終將會受益終身。在此,我再次向于桂玲老師表示感謝并致以祝福!同時,我還要對我的母校說聲感謝,感謝她四年來的照顧,感謝她給我?guī)淼淖院栏?,以及母校所有的師生們。因為你們無私的奉獻(xiàn)與關(guān)懷,不僅使我順利完成了學(xué)業(yè),還教會我很多很多。四年的大學(xué)生活使我們真正成長為一個有理想,有追求,有知識的當(dāng)代青年。在此我還想感謝論文中涉及到的參考文獻(xiàn)的學(xué)者們。你們就像行路上的明燈,有你們的辛苦鉆研與考究,才有那么多可以稱得上經(jīng)典的參考文獻(xiàn),給我完成論文帶來了很多靈感的啟發(fā)。我作為一個本科生,對文章中涉及到的知識的掌握還不是特別的深刻,所以難免會存在一些不足之處,在此,也懇請各位老師能夠諒解并且指正,讓我能夠?qū)W習(xí)的更好!最后,我要感謝陪伴了我生命中很重要的大學(xué)時光的同學(xué)們,尤其是幫助我在畢業(yè)設(shè)計中解決問題與難點(diǎn)的師姐。大學(xué)四年,與同學(xué)們一起互相幫助,共同進(jìn)步,不斷充實自己。我發(fā)自心底地感謝你們對我的幫助和支持!

參考文獻(xiàn)[1]林城.Android2.3應(yīng)用開發(fā)實戰(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)國,姚昱禹.Android與J2ME平臺間即時通信的研究與實現(xiàn)[J].Android工程師,2008(11):118-120.[5]劉平.Android手機(jī)訪問服務(wù)器的一種數(shù)據(jù)交互方法[J].西安財經(jīng)學(xué)院網(wǎng)絡(luò)與現(xiàn)在教育技術(shù),2010(6):96-102.[6]劉玉平.Java輸入輸出流及在網(wǎng)站開發(fā)中的應(yīng)用探討[J].科技實況,2009(18):35-49.[7]趙亮,張維.基于Android技術(shù)的界面設(shè)計與研究[D].徐州:徐州建筑職業(yè)技術(shù)學(xué)院,2001.[8]陳璟,陳平華,李文亮.Android內(nèi)核分析[J].Android程序員,2009(4):112-115.[9]劉衛(wèi)國,姚昱禹.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ī)對戰(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ī)算法的計算范圍,然后將分析現(xiàn)有棋盤的形式。主要代碼如下: privatePointdoAnalysis(List<Point>comuters,List<Point>humans) {//我們來對屬于現(xiàn)行的入口方式進(jìn)行研究,可以分三個步驟,其中第三步驟的難度控制可由子類干預(yù) if(humans.size()==1) {//第一步 returngetFirstPoint(humans); } //初始化計算范圍 initRange(comuters,humans); //清除以前的結(jié)果 initAnalysisResults(); //開始分析后,我們通過對所有沒有棋子的點(diǎn)來得出第一次分析結(jié)果 PointbestPoint=doFirstAnalysis(comuters,humans); if(bestPoint!=null) { //System.out.println("這步就必須這么走了,是非常需要的"); returnbestPoint; } //我們通過第一次的結(jié)果來判斷哪個點(diǎn)最適合自己 bestPoint=doComputerSencondAnalysis(computerFirstResults, computerSencodResults); if(bestPoint!=null) {//System.out.println("馬上就贏了,必須走這步"); returnbestPoint; } computerFirstResults.clear(); System.gc(); //我們利用第一次的結(jié)果來選出敵人最重要的那個的點(diǎn) bestPoint=doHumanSencondAnalysis(humanFirstResults, humanSencodResults); if(bestPoint!=null) { //System.out.println("再不下這個棋子就輸了"); returnbestPoint; } humanFirstResults.clear(); System.gc(); //沒有找到一招致命的點(diǎn),第三次結(jié)果分析 returndoThirdAnalysis(); } //根據(jù)人和人玩的時候分析首先要進(jìn)行的落子步驟來進(jì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ù)谝徊酵瓿芍螅嬎銠C(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); //為了防止在分析的時候會將原來的對象改變,我們需要把坐標(biāo)記下 x=computerPoint.getX(); y=computerPoint.getY(); if(x<currentRange.xStart||x>currentRange.xStop ||y<currentRange.yStart||y>currentRange.yStop) { continue; } //我們在這個位子落子,并分析落子后在橫向上的狀態(tài),如活4,活3,半活4,活2等所有狀態(tài) firstAnalysisResult=tryAndCountResult(comuters,humans, computerPoint,HENG); computerPoint.setX(x).setY(y);//為了下一次分析撤銷此步 if(firstAnalysisResult!=null) {//如果沒有結(jié)果,那么這個情況下不能分勝負(fù) if(firstAnalysisResult.count==5)//如果等于5,那表明有一種顏色的棋子已經(jīng)出現(xiàn)五個及以上在一起的情況,勝負(fù)已定 returncomputerPoint; //記錄第一次分析結(jié)果 addToFirstAnalysisResult(firstAnalysisResult, computerFirstResults); } //在“縱向”對上面的步驟再走一次 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); } //分析在橫向上對方棋子的狀態(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論