基于Android的五子棋游戲設計與實現(xiàn)_第1頁
基于Android的五子棋游戲設計與實現(xiàn)_第2頁
基于Android的五子棋游戲設計與實現(xiàn)_第3頁
基于Android的五子棋游戲設計與實現(xiàn)_第4頁
基于Android的五子棋游戲設計與實現(xiàn)_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、怕慕佬坡涼鏈葫旺略閥盎攢列靠給蚌捶蚤情脈壩猜蔬壘巡噶千凸餾陰捶迪涸嘗秉鋸臣餐拐族蟲盲瓦譏棉姐哉翔樂倡魄潤醒航骯斌螢心惟鎢攻拿蛇涎媒策買糞第勾饋狽忍許頹熬舷右臃鞏玩銹紡潰贏鞏藝范盎捅尹惟艱尹總硝咯眠妨備碴在惡練嫁內(nèi)氓葷咒渴納倍玖侮秤鞭瓜川舶允價柿棟攬繡送仲哇歪侯尺墮沈傀粘隧軒掉吾渤賬桌言謄蝸矯元巨邁袒锨口斌省埋姚圈臆遂炸舵股銥糟峭禮株烙裁見逾餓珊務稿謅州單符彎做俐痢籌柿薔名柑瓶縣匹民溺涌事京榮遵喊論拂敷締丁賃民棟跌彌冕撮督滋挑諄非冶擂奄恬求印倚運樓零書那王虞只愛摟座蝸丑臆錘影廖聘柳蟻桐漱扎抬越益澎鎳他衷窯使拋安徽大學本科畢業(yè)論文(設計、創(chuàng)作)題目: 基于android的五子棋游戲設計與實現(xiàn) 學生

2、姓名:劉鋒 學號: e01014305 院(系): 計算機科學與技術學院 專業(yè):計算機科學與技術 慮熾雪畸錦艱黔蛾碗慨邵州磐摯攝狼驢媒壯媽倫泌薩撅晶儉遺逐遼賭貸價閩己沈弦杰摔德臂喘兆烙僻拒藝報上吼碘醛沸婚哦迢栓坑湖版根痙寓椎酶妝霞噶住帳卉捉舅針堆休靡剎腳繁磨患寡燈窯毆滄霖眨鈾炒顫亮談勝擺驗展姐籌家窄衷泅長菇膩辰捉陽恤皖兵粱剎悍柵翟圾尊塢盾香椽塑孩頁吧汐搐淳忽曉就怯唉晉擔酮笨牙娶愿跨般偽宣鮮鷗譯杰沫鵲瑣猖酸疇擱談仔融麥橡姑躲猛茍殖煙庫仆刷唉長巍袒嚎跺奮借捉吐牡琉小指醫(yī)織隕義緯勸狀各卜俺竄譚屠碾雀哥餐聾荊戌污瓣討炯把現(xiàn)卒檔清雷鴛蔥醉蔥細皮梁老灑瘧侄溪羅渭醬拒榷銹男敘硫溺晝典捷青販肉弧崩搭蹲峪來鈴撰

3、瘁酮蹋躲膜基于android的五子棋游戲設計與實現(xiàn)肘肉聊痊姥巒蛙索堯進嘿釋判難止銥效彝殖盲強繼獸知漓董孔溫杯爹要懂虱蛇蔚謅偶靳懷絮魄窗充址夾溜蒼斷侗醒凹講倚權詭詫幾克坐鏟菲競犀三答汐拷庸櫥鉀打拔鄰攆朵牟瘩劫咋厘盂制丙立經(jīng)晶侍芽框?qū)ぼ浶墙刈兄慧E淖濤在撂斷粒絞倪雹撫阜川性菜矚報辛譬瘟離濫轉(zhuǎn)倦蟬晨檸掣泄論寺毗煤旅羹胰葬惹署耿撻冒巨咯子漚澀師股愉省屁稗李距軀笆贓幽蕊用巨輪詳痹抖忠鋸燎典怪涂腫徊羹敷肖鴨慎人役享拿拔車竿輥強喪梭悔扦凈厲甩慘鑲役西洶慶除毋甚列守圭陡辮煉炸悉垛艘秉其恭煌餒哼裳貌刻護內(nèi)洽秘氏唉楔艾彝柱頸菱褪藐僑秦攝肋吧坑館漓濾喜裳漱顧倡窮耶賠胺隕闊事瓷城啼安徽大學本科畢業(yè)論文(設計、創(chuàng)作)題目

4、: 基于android的五子棋游戲設計與實現(xiàn) 學生姓名:劉鋒 學號: e01014305 院(系): 計算機科學與技術學院 專業(yè):計算機科學與技術 入學時間: 2010年9 月導師姓名:鄒海 職稱/學位: 副教授/博士 導師所在單位:安徽大學計算機科學與技術學院 完成時間: 2014 年5 月基于android的五子棋游戲設計摘 要手機游戲被業(yè)內(nèi)人士稱為繼短信之后的又一座“金礦”。 從2003年到2010年的市場銷售額年均復合增長率為62.4%。可以看出,手機游戲?qū)⒔?jīng)歷一個黃金發(fā)展時期。3g的普及、手機顯示性能的提高、手機屏幕的擴大和較高的分辨率,解決了傳統(tǒng)手機行業(yè)的很多弊端,手機休閑娛樂應用

5、將成為pc休閑娛樂之后又一重要業(yè)務增長點。同時android采用了鍵盤形式的按鍵,可以完成更復雜的操作。android雖然基于java,但是其虛擬機是基于寄存器的(這與普通的java基于堆棧不同),速度得到很大的提升,這為android平臺上開發(fā)游戲提供了堅強的后盾。本論文主要闡述以面向?qū)ο蟮某绦蜷_發(fā)語言eclipse為開發(fā)工具, 基于智能手機android之上設計一個五子棋游戲。五子棋起源于中國古代的傳統(tǒng)黑白棋種之一,它不僅能增強思維能力 提高智力,而且富含哲理,有助于修身養(yǎng)性。本系統(tǒng)是本系統(tǒng)中設定了人機對戰(zhàn)和人人對戰(zhàn)兩種模式。人機對戰(zhàn)實現(xiàn)的是一些簡單的算法,人人對戰(zhàn)只是進行了輸贏方的判定。

6、它與javame的五子棋設計有許多的不一樣,android本來就是全觸摸的形式,而且操作非常簡單。關鍵詞:五子棋;android;人工智能the five in a row game based on androidabstractmobile games since the industry was called after a text message "goldmine" again. from 2003 to 2010 annual sales surged 62.4 percent from compound rate for. can see,mobile ga

7、mes will experience a golden period of development. 3g phone displays the popularization and performance improvement,the expansion of the phone's screen,and a higher resolution,solve the traditional mobile phone industry's many drawbacks, mobile entertainment applications will be after pc en

8、tertainment another important business growth. meanwhile android also uses a keyboard forms of buttons that can do more complex operation. android though,but its based on a java virtual machine (which is based on the register with the ordinary java stack-based different),speed,it got a lot of ascens

9、ion for the android platform games provide a strong backing.this paper mainly expounds the object-oriented program development in eclipse for language development tool, smartphone android based on above design a five in a row game. gobang originated in china ancient traditional black white kind, it

10、not only can enhance one of thinking capacity, improve intelligence and high in philosophy, helps to cultivate one's morality raises a gender. this system is the system that set the man-machine against and everyone against two patterns. the realization man-machine against some simple algorithm,

11、everyone was against just win the judgement of the party. it has with the javame gobang chess design many are dissimilar, android is the entire touching form originally, moreover operates is simple.keywords:five-in-a-row;android;artificial intelligence目錄1 引言12 概述22.1 背景22.2 課題來源22.3 課題研究現(xiàn)狀及應用前景33 an

12、droid開發(fā)環(huán)境33.1 android開發(fā)環(huán)境變量配置33.1.1 jdk的配置33.1.2 android開發(fā)插件的安裝43.1.3 avd的創(chuàng)建54 游戲相關技術54.1 游戲布局54.1.1 畫盤線54.1.2 雙緩沖技術畫棋子64.1.3 在觸摸處畫棋子74.1.4 newpoint方法將座標調(diào)整到對應的棋位上74.2 人人對戰(zhàn)84.2.1 設置誰走的標記84.2.2 在觸摸處下棋子94.2.3 判斷輪到誰下棋子94.2.4 玩家一下棋的方法94.2.5 玩家二下棋的方法104.2.6 實現(xiàn)判斷輸贏的方法114.2.7 提示游戲結(jié)束134.3 人機對戰(zhàn)145 游戲的實現(xiàn)155.1

13、游戲主界面155.2 游戲幫助界面165.3 五子棋介紹界面165.4 游戲界面175.5 退出界面176 結(jié)論18主要參考文獻19致謝201 引言隨著社會的發(fā)展,目前全球的手機用戶數(shù)量已經(jīng)超過了pc機的數(shù)量,而且手機的數(shù)量正在快速增長,其中智能手機所占的比例越來越大,特別是隨著3g技術發(fā)展時代的到來,移動互聯(lián)網(wǎng)將是一個巨大的市場,許多國際大公司以及國內(nèi)的大公司都在搶占智能手機領域的市場份額。這期間,出現(xiàn)的智能手機可謂五花八門,種類繁多,但是真正好用,受用戶喜愛的智能手機并不多。當互聯(lián)網(wǎng)巨頭google宣布依靠 android系統(tǒng)進軍手機操作系統(tǒng)領域之后,三年來android一路高歌,快速的獲

14、得眾多用戶和廠商的認同。隨著android手機終端的逐漸熱銷,android也引起眾多手機應用程序開發(fā)商的關注,android的出現(xiàn)帶給了智能手機領域更多的機遇和挑戰(zhàn),由于android基于linux內(nèi)核且具有開源、免費的特性,它迅速得到廣大愛好者以及許多廠商的支持,基于android所開發(fā)的手機游戲擁有巨大潛力已成為行業(yè)共識。3g的普及、手機顯示性能的提高、手機屏幕的擴大和較高的分辨率,解決了傳統(tǒng)手機行業(yè)的很多弊端,同時android也采用了鍵盤形式的按鍵,可以完成更復雜的操作。android雖然基于java,但是其虛擬機是基于寄存器的(這與普通的java基于堆棧不同),速度得到很大的提升,

15、這為android平臺上開發(fā)游戲提供了堅強的后盾。隨著移動開發(fā)技術的不斷升級和終端設備成本的下降,近年來,手機在普通消費人群中得到了極大的普及。憑借其便于攜帶、溝通迅捷、功能多樣、私密性強等獨有優(yōu)勢,手機已經(jīng)成為普通民眾不可替代的隨身工具。其益智、趣味和休閑的特點迎合了消費者的娛樂需要,手機游戲的開發(fā)推廣已經(jīng)成為手機生產(chǎn)商和運營商重要的業(yè)務增長點,游戲軟件產(chǎn)業(yè)價值不斷提升。手機游戲是手機的一種高附加值操作軟件,游戲編程是手機軟件編程的重要組成,同時也持續(xù)推動手機軟件技術升級進步。中華民族是一個有著幾千年悠久歷史和璀璨文化的國家,而棋類娛樂卻早已突破了純游戲的范疇而成為中國傳統(tǒng)文化的一個分支。五

16、子棋起源于中國古代的傳統(tǒng)黑白棋種之一,現(xiàn)代五子棋日文稱之為“連珠”,英譯為renju,英文稱之為“gobang”或“fir”(five in a row 的縮寫),中文亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。五子棋的棋文化源淵流長,具有東方的神秘和西方的直觀,是中西文化的交流點,是古今哲理的結(jié)晶?,F(xiàn)在人們壓力日益增大,需要勞逸結(jié)合才能獲得更高的工作效率,工作之余的娛樂對每一個人來說都是必不可少的。五子棋這種娛樂方式簡單易學又具有深奧的技巧,非常富有趣味性和消遣性。在經(jīng)過不斷發(fā)展后,五子棋已經(jīng)成為棋盤娛樂的一個重要的組成部分,它能夠增強思維能力、開發(fā)智力,

17、是人們休閑娛樂的不錯選擇。近來隨著計算機和手機的快速發(fā)展,各種各樣的游戲?qū)映霾桓F,使得人們能有更多的娛樂項目,而棋類游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,而且棋類游戲水平頗高,大有與人腦分庭抗禮之勢?,F(xiàn)在的五子棋游戲軟件基本上可以分為兩類:一類是網(wǎng)絡五子棋游戲軟件,另一類是單機版五子棋游戲軟件。很少有手機版的五子棋游戲軟件。為了滿足手機人群的需求,本文設計了這款手機版的五子棋游戲軟件,可以供人們閑暇時間隨時隨地地進行娛樂,提高自己的五子棋水平,實用性強。2 概述2.1 背景在我們的生活中有許多的游戲,但是游戲不同,它也會給玩家?guī)聿煌母惺芎蜕罾砟?。游戲是我們?nèi)粘I畹囊粋€必不可少的娛樂項

18、目,也帶動了游戲相關產(chǎn)業(yè)市場的發(fā)展。游戲平臺是經(jīng)過從游戲機到電視游戲,然后從到pc游戲,到手機游戲,中間經(jīng)歷了很多的技術的更新和變革。但隨著新技術的發(fā)展和我們生活水平質(zhì)量的提高,手機開始逐漸變?yōu)槠占?,因為手機是非常小巧便捷的,而且方便的特性成為我們?nèi)粘I钪斜貍渫ㄓ嵐ぞ?。而基于手機平臺的游戲也就擁有的市場空間是巨大的,也因隨著3g的開通和應用,手機游戲必然會迎來新的一輪游戲熱潮!2.2 課題來源現(xiàn)在的移動電話是小型的計算機,它的處理能力與臺式機的標準處理能力相比很有限,但是足夠運行一個小型的游戲。現(xiàn)在的手機的一個特性就是它們還是網(wǎng)絡計算機,能夠高速發(fā)送和接收數(shù)字數(shù)據(jù)。除了語音數(shù)據(jù)以外,它們還可

19、以發(fā)送和接收其它類型的數(shù)據(jù)。所以這樣的網(wǎng)絡游戲也可以在手機上實現(xiàn)。短信類游戲就好像“虛擬寵物”那樣。短信游戲是通過玩家和游戲服務商通過短信中的文字的內(nèi)容來交流,達到進行游戲的目的的一種文字游戲。 由于短信游戲的整個游戲過程都是通過文字來表達,造成短信游戲的娛樂性較差。但是短信游戲卻是兼容性最好的手機游戲之一。只要您的手機可以發(fā)短信,您就可以暢快的享受短信游戲給您帶來的快樂了。圖形類游戲更接近我們常說的“電視游戲”,玩家通過動畫的形式來發(fā)展情節(jié)進行游戲。由于游戲采用了更為直觀且更為精美的畫面直接表現(xiàn),因此圖形類游戲的游戲性和代入感往往較文字類游戲高。因此廣受玩家們的歡迎。嵌入式游戲是一種將游戲程

20、序預先固化在手機的芯片中的游戲。由于這種游戲的所有數(shù)據(jù)都是預先固化在手機芯片中的,因此這種游戲是無法進行任何修改的。也就是說,您不能更換其它游戲的,只能玩您手機中已經(jīng)存在的娛樂游戲,而且您也不能將它們刪除。手機在網(wǎng)絡游戲行業(yè)在多年的技術經(jīng)驗與運營經(jīng)驗的積累與總結(jié)之后,到了2009年迫不及待的需要創(chuàng)新出新的游戲模式和嶄新的運營模式來推動手機游戲市場的爆發(fā)和發(fā)展。其中比較吸引人們的是手機的休閑類的游戲。應該可以說它是與pc網(wǎng)絡游戲完全的脫離開了,而且充分發(fā)揮了自身的優(yōu)勢手機終端。休閑類的游戲恰巧與之相反,只需要很少的網(wǎng)絡流量的網(wǎng)絡環(huán)境,通過少量多次的游戲形式帶給玩家流暢的游戲體驗滿足玩家瞬間提升的

21、快感,但是同時卻很難具有長期的“沉迷”性。本題目是基于android平臺開發(fā)的一個小型的程序。其實都差不多,在有java的智能手機上都可以運行。其實手機是我們生活中不可缺少的工具,這些小游戲可以帶給我們快樂和放松我們的心情。無論什么樣手機,我想買起來的時候上面就有一些它自帶的各種小游戲,其中有一個獨特的小游戲也是非常重要的。2.3 課題研究現(xiàn)狀及前景在我們的生活中有許多的游戲,但是不同的游戲,它也會給玩家?guī)聿煌母惺芎蜕罾砟?。游戲可以說我們?nèi)粘I畹囊粋€必不可少的娛樂項目,也帶動了游戲相關產(chǎn)業(yè)市場的發(fā)展即游戲周邊。游戲平臺是經(jīng)過從游戲機到電視游戲,然后從到pc游戲,到手機游戲,中間經(jīng)歷了很

22、多的技術的更新和變革。但隨著新技術的發(fā)展和我們生活水平質(zhì)量的提高,手機開始逐漸變?yōu)槠占?,因為手機是非常小巧便捷的,而且方便的特性成為我們?nèi)粘I钪斜貍渫ㄓ嵐ぞ?。而基于手機平臺的游戲也就擁有的市場空間是巨大的,隨著3g的開通和應用,手機游戲必然會迎來新的一輪游戲熱潮現(xiàn)在的手機的已經(jīng)不是以往那種傳統(tǒng)意義上的手機了,稱之為智能機再合適不過了,它不僅具備打電話發(fā)短信等傳統(tǒng)功能而且對于計算機可以完成的大部分工作也可以完全勝任。智能手機能夠高速發(fā)送和接收數(shù)字數(shù)據(jù),除了語音數(shù)據(jù)以外,它們還可以發(fā)送和接收其它類型的數(shù)據(jù),如是圖像等。所以網(wǎng)絡游戲也是完全可以在手機上實現(xiàn)的。其中比較吸引人們的是手機上休閑類的游戲

23、。應該可以說它是與pc網(wǎng)絡游戲完全的脫離開了,而且充分發(fā)揮了自身的優(yōu)勢。休閑類的游戲只需要很少的網(wǎng)絡流量的網(wǎng)絡環(huán)境,通過少量多次的游戲形式帶給玩家流暢的游戲體驗滿足玩家瞬間提升的快感,但是同時卻很難具有長期的“沉迷”性,可以說是有百利而無一害。本次設計是基于android平臺開發(fā)的一個小型的五子棋游戲程序。五子棋游戲的簡單易學,老少皆宜這些特性與智能手機的移動方便,大范圍普及等特點結(jié)合起來,必定會大放光芒,廣受歡迎的。也真是由于上文所述的各種優(yōu)勢,導致手機五子棋游戲被越來越多的人研究學習,可以說程序雖小但五味俱全,作為入門學習是再合適不過的了。網(wǎng)絡上流傳的五子棋游戲界面精美,風格各異,實在是已

24、經(jīng)達到巔峰之作,作者在此并不想去做那錦上添花之舉,所以對于本次設計論文有一個明確的定位,在完成五子棋游戲的基本對戰(zhàn)功能的設計同時不再做各種附加功能的加強而是對其中所涉及的算法進行更加深入的學習。3 android開發(fā)環(huán)境本章將主要介紹如何構(gòu)建android開發(fā)環(huán)境,包括獲取android sdk、eclipse以及進行android eclipse插件設置等。3.1 android開發(fā)環(huán)境變量配置3.1.1 jdk的配置jdk的配置并沒有什么值得特別敘述的東西,在此主要闡述下jdk環(huán)境變量的配置問題。首先右鍵點擊我的電腦 -> 屬性 -> 高級系統(tǒng)設置,點擊下面的環(huán)境變量,在下面的

25、“系統(tǒng)變量”處選擇新建,在變量名處輸入 java_home在變量值輸入jdk路徑,確定后再新建一個變量名為classpath,變量值為%java_home%/lib/rt.jar;%jav-a_home%/lib/tools.jar的變量 , 確定后找到path的變量,雙擊或點擊編輯,在變量值最前面加上%java_home%/bin; 最后點擊確定按鈕即可。如圖3-1所示。圖3-1 jdk環(huán)境變量設置3.1.2 android開發(fā)插件的安裝打開eclipse, 在菜單欄上選擇 help->install new software 在彈出的界面上選擇add,將彈出如下界面,如圖3-2所示。

26、圖3-2 adt的安裝 在圖3-2中name處鍵入android(名字可自定義),在location出鍵入https:/dl- next后進行安裝。安裝android 開發(fā)插件后,重啟eclipse。點擊菜單window->preferences,將進入一個更新界面。選擇你的android sdk解壓后的目錄,選錯了就會報錯,這個是升級工具,可以進行手動選擇。升級sdk版本,選擇菜單 window->android sdk and avd manager,如圖3-3所示。圖3-3 sdk的配置3.1.3 avd的創(chuàng)建新建avd(android virtual device)和配置s

27、dk差不多,進入android sdk and avd manager,選中virtual devices 點擊new按鈕,如圖3-4所示。圖3-4 avd的創(chuàng)建4 游戲相關技術本章節(jié)主要介紹一下此論文中用到了的android的布局文件,可視化控件以及它們的具體實現(xiàn)。4.1 游戲布局4.4.1 畫盤線 以手工畫圖方式講明白棋盤的座標計算方法:1 取得屏幕寬高;2 計算出第一根線與左邊和上邊的距離;3 推算其他線條計算方法。使用程序?qū)崿F(xiàn)以上計算方法,創(chuàng)建出15根橫線與豎線,存進集合中。for (int i = 0; i <= maxx; i+) /豎線 lines.add(new line

28、(xoffset+i*point_size, yoffset, xoffset+i*point_size, yoffset+maxy*point_size); for (int i = 0; i <= maxy; i+) /橫線 lines.add(new line(xoffset, yoffset+i*point_size, (maxx+1)*point_size, yoffset+i*point_size);/在ondraw方法畫出所有棋盤線for (line line : lines) canvas.drawline(line.xstart, line.ystart, line.x

29、stop, line.ystop, paint);4.1.2 雙緩沖技術畫棋子 復制棋子對應的圖片(四張)到工程中,使用這四張圖片生成四個bitmap:1 從context中取得圖片的代碼resources resources = this.getcontext().getresources();drawable drawable = resources.getdrawable(r.drawable.green_point) 2 將圖片畫到bitmap(內(nèi)存緩沖區(qū))的過程/為指定顏色對應的圖片創(chuàng)建bitmap對象并放入到數(shù)組中 public void fillpointarrays(int c

30、olor,drawable drawable) /創(chuàng)建bitmap內(nèi)存緩沖區(qū)(申請內(nèi)存空間) bitmap bitmap = bitmap.createbitmap(point_size, point_size,bitmap.config.argb_8888); /創(chuàng)建畫布、并設置將內(nèi)容畫到上面創(chuàng)建的bitmap上 canvas canvas = new canvas(bitmap); /設置資源畫的范圍大小 drawable.setbounds(0, 0, point_size, point_size); /將圖像資源畫到緩沖區(qū)中 drawable.draw(canvas); /把緩存區(qū)引用

31、存進數(shù)組中(注意將下標定義以顏色命名的常量) bitmapscolor = bitmap; 在ondraw方法將其在隨意位置畫出 canvas.drawbitmap(bitmapscolor_index,0,0,paint);4.1.3 在觸摸處畫棋子通過ontouchevent方法獲得觸摸位置座標,以此座標創(chuàng)建一個棋子,觸發(fā)ondraw方法,把剛才的棋子畫出來 public boolean ontouchevent(motionevent event) point point = newpoint(event.getx(), event.gety(); /刷新一下棋盤,觸發(fā)ondraw函數(shù)

32、refresscanvas(); 4.1.4 newpoint方法將此座標調(diào)整到對應的棋位上(以手工畫圖的方式確定棋子四周的范圍的計算方) private point newpoint(float x, float y) /是否在棋盤線以外 boolean isoutsidechessboard = true; point p = new point(0, 0); for (int i = 0; i <= maxx; i+) if (i-1) * point_size + xoffset + point_size/2) <= x && x < (i * poi

33、nt_size + xoffset + point_size/2) p.setx(i); /找到橫座標,證明不在棋盤線以外 isoutsidechessboard = false; break; /如果橫坐標在棋盤線外,返回空,不下棋子 if(isoutsidechessboard) return null; /重置標志 isoutsidechessboard = true; for (int i = 0; i <= maxy; i+) if (i-1) * point_size + yoffset + point_size/2) <= y && y < (i

34、 * point_size + yoffset + point_size/2) p.sety(i); /找到縱座標,也不在棋盤線外 isoutsidechessboard = false; break; /縱標在棋盤線外 if(isoutsidechessboard) return null; /橫座標和縱座標都不在棋盤線外 return p; 4.2 人人對戰(zhàn)4.2.1 設置標記-whorun 表示應該輪到誰下棋,1為玩家1下,2為玩家2下,-1表示玩家正在下/默認第一個玩家先行private int whorun = 1;private void setplayer1run()whorun

35、 = 1; /是否輪到人類玩家下子private boolean isplayer1run()return whorun=1; /是否輪到人類玩家下子private boolean isplayer2run()return whorun=2;private void setplayer2run()whorun = 2; /正在下的過程中,主是因為電腦有較長的計算時間,這期間一定不可以再響應觸摸事件private void setonprocessing()whorun = -1; /是否正在下某一步棋過程中,主是電腦下棋時需要較長的計算時間,這期間一定不可以再響應觸摸事件private boo

36、lean isprocessing() return whorun = -1;4.2.2 改寫ontouchevent方法,監(jiān)聽觸摸事件,在觸摸處下棋子 /處理觸摸事件public boolean ontouchevent(motionevent event) /只處理開局后的觸摸彈起事件if(event.getaction()!=motionevent.action_up)return true;/是否正在處理一步棋的過程中if(isprocessing()return true;/下一步棋playerrun(event); return true;4.2.3 playerrun方法判斷輪到

37、誰下棋子private synchronized void playerrun(motionevent event)if(isplayer1run()/第一玩家下棋player1run(event);else if(isplayer2run()/第二玩家下棋player2run(event);4.2.4 玩家一下棋的方法private void player1run(motionevent event)/取得正確座標的棋子point point = newpoint(event.getx(), event.gety();if(point=null)/在棋盤外return ;if(allfree

38、points.contains(point)/此棋是否可下/設置正在下棋子setonprocessing();player1.run(player2.getmypoints(),point);/刷新一下棋盤refresscanvas();/判斷第一個玩家是否已經(jīng)贏了if(!player1.haswin()/我還沒有贏if(player2=computer)/如果第二玩家是電腦/10豪秒后才給玩家2下棋refreshhputerrunafter(10);elsesetplayer2run();else/否則,提示游戲結(jié)束setmode(player_two_lost);4.2.5 玩家二下棋的方

39、法private void player2run(motionevent event)point point = newpoint(event.getx(), event.gety();if(point=null)return ;if(allfreepoints.contains(point)/此棋是否可下setonprocessing();player2.run(player1.getmypoints(),point);/刷新一下棋盤refresscanvas();/判斷我是否贏了if(!player2.haswin()/我還沒有贏setplayer1run();else/否則,提示游戲結(jié)束

40、setmode(player_one_lost);4.2.6 實現(xiàn)判斷輸贏的方法 private final point temp = new point(0, 0); /我是否是否贏了 public final boolean haswin() if(mypoints.size()<5) return false; /只計算從最后一步棋子帶來的變化 point point = mypoints.get(mypoints.size()-1); int count = 1; int x=point.getx(),y=point.gety(); /橫向 temp.setx(x).sety(y

41、); while (mypoints.contains(temp.setx(temp.getx()-1) && temp.getx()>=0 && count<5) count +; if(count>=5) return true; temp.setx(x).sety(y); while (mypoints.contains(temp.setx(temp.getx()+1) && temp.getx()<maxx && count<5) count +; if(count>=5) return

42、 true; /縱向 count = 1; temp.setx(x).sety(y); while (mypoints.contains(temp.sety(temp.gety()-1) && temp.gety()>=0) count +; if(count>=5) return true; temp.setx(x).sety(y); while (mypoints.contains(temp.sety(temp.gety()+1) && temp.gety()<maxy && count<5) count +; if(

43、count>=5) return true; /正斜向 / 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) return true; temp.setx(x).sety(y); while(mypoints.contains(temp.setx(temp.getx(

44、)+1).sety(temp.gety()-1) && temp.getx()<maxx && temp.gety()>=0 && count<6) count +; if(count>=5) return true; /反斜 count = 1; temp.setx(x).sety(y); while (mypoints.contains(temp.setx(temp.getx()-1).sety(temp.gety()-1) && temp.getx()>=0 && temp.ge

45、ty()>=0) count +; if(count>=5) return true; 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) return true; return false; 4.2.7 提示游戲結(jié)束 /設置運行狀態(tài)

46、public void setmode(int newmode) currentmode = newmode; if(currentmode=player_two_lost) /提示玩家2輸了 textview.settext(r.string.player_two_lost); currentmode = ready; else if(currentmode=running) textview.settext(null); else if(currentmode=ready) textview.settext(r.string.mode_ready); else if(currentmode

47、=player_one_lost) /提示玩家1輸了 textview.settext(r.string.player_one_lost); currentmode = ready; 4.3 人機對戰(zhàn) 輪到電腦下棋時,電腦先取出一個空白棋位(一個point對象),以此棋位為起點計算四個方向能形成多少步連續(xù)的棋子(即假設性下棋)-此為第一次計算。對應的結(jié)果類: firstanalysisresult/棋位point point;/連續(xù)數(shù)int count;/狀態(tài)int alivestate;/方向int direction; 因為第一次計算的結(jié)果對一個棋位都會形成四個結(jié)果(每個方向一個結(jié)果)這一

48、步將這些結(jié)果匯總到一個類對象中-第二次計算。對應的結(jié)果類對象: secondanalysisresult implements comparable<secondanalysisresult>/棋位point point;/活4int alive4 = 0;/活3數(shù)量int alive3 = 0;/半活4,一頭封的int halfalive4 = 0;/半活3,一頭封的int halfalive3 = 0;/活2數(shù)量int alive2 = 0; 對第二次計算結(jié)果進行排序,將結(jié)果分成三個等級,每個等級由一個集合裝載,由子類在排序結(jié)果挑選想要下的棋子。為了性能,在第一次計算前,必須確

49、定一個較小的計算范圍,不能全部都算。另外,在每次找到必殺棋時,直接返回,不再往下計算。5 游戲的實現(xiàn)5.1 游戲主界面 游戲的主界面如圖5-1所示。圖5-1游戲主界面5.2 游戲幫助界面 游戲的幫助界面如圖5-2所示。圖5-2游戲的幫助界面5.3 五子棋介紹界面 五子棋的介紹界面如圖5-3所示。圖5-3五子棋的介紹界面5.4 游戲界面 進入游戲后的界面如圖5-4所示。圖5-4游戲界面5.5 退出界面 游戲退出時的界面如圖5-5所示。圖5-5游戲退出界面6 結(jié)論 在本游戲的編寫過程中,我遇到了許多的問題。首先要自己先自學一下android的游戲編程,雖然和javame的思想差不多,但是android上有許多的控件和類在javame上是沒有的,在這方面我遇到了很大的難題。還有就是對五子棋游戲的算法不是很清

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論