寶石對(duì)對(duì)碰_第1頁(yè)
已閱讀1頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  河北農(nóng)業(yè)大學(xué)</b></p><p>  本科畢業(yè)論文(設(shè)計(jì))</p><p>  題 目: 寶石對(duì)對(duì)碰 </p><p>  學(xué) 院: 信息科學(xué)與技術(shù)學(xué)院 </p><p>  專業(yè)班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)12

2、01 </p><p>  學(xué) 號(hào): 1201232010114 </p><p>  學(xué)生姓名: 高娟娟 </p><p>  指導(dǎo)教師姓名: 張璠 </p><p>  指導(dǎo)教師職稱: 講師

3、 </p><p>  二O一 四 年 五 月 二十 日</p><p><b>  摘 要</b></p><p>  游戲設(shè)計(jì)的歷史很悠久,幾千年來(lái),從最古老的非洲的Awari游戲,到現(xiàn)在最為優(yōu)雅的游戲-----圍棋,人們?cè)O(shè)計(jì)和玩過(guò)的游戲不計(jì)其數(shù),許多游戲已經(jīng)隨著時(shí)間遺失在歷史的長(zhǎng)河中了。除了經(jīng)典游戲之外,人們總是對(duì)

4、新游戲感興趣,因此一直有對(duì)新游戲設(shè)計(jì)的需求。 手機(jī)游戲: 指用戶利用隨身攜帶具有廣域無(wú)線網(wǎng)絡(luò)聯(lián)機(jī)功能(GPRS 或CDMA)的移動(dòng)終端設(shè)備(手機(jī)),隨時(shí)隨地進(jìn)行的游戲。簡(jiǎn)單說(shuō)手機(jī)游戲是指運(yùn)行于手機(jī)上的游戲軟件。 </p><p>  本文介紹了手機(jī)游戲?qū)?duì)碰的開(kāi)發(fā)過(guò)程。論文遵循軟件工程的方法,詳盡論述了從需求分析、系統(tǒng)分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、以及測(cè)試與調(diào)試的整個(gè)開(kāi)發(fā)過(guò)程,總結(jié)了開(kāi)發(fā)過(guò)程中的經(jīng)驗(yàn)及本系統(tǒng)今后的改

5、進(jìn)方向。</p><p>  本系統(tǒng)開(kāi)發(fā)成功后可以實(shí)現(xiàn)對(duì)對(duì)碰游戲的登陸,注冊(cè),以及游戲的娛樂(lè)功能。Xcode 5.0開(kāi)發(fā)工具,采用成熟的軟件研制技術(shù),后臺(tái)數(shù)據(jù)庫(kù)采用Sqlite3。</p><p>  關(guān)鍵詞 : 對(duì)對(duì)碰, Xcode 、 Sqlite3 </p><p><b>  Abstract</b></p><

6、p>  Game design is a long history, thousands of years, from the most ancient Africa Awari game, now the most elegant game, chess, people design and play the game too many to count,many games have the time lost in the

7、long river of history.In addition to the classic game, people are always interested in new game, so there has been to the new demand of the game design. Mobile phone game:refers to carry awire less wide area network on

8、line function using the user(GPRS or CDMA) of the mobile terminal(m</p><p>  This paper introduces the development process of mobile phone games on colliding. Methods according to the software engineering, d

9、iscussed in detail from the demand analysis, system analysis, outline design, detailed design, and test and debug the entire development process, summed up the improvement direction of the experience of the development p

10、rocess of the system and future.</p><p>  After the success of the system development can be achieved on the puzzle game landing, registration, and entertainment function. Xcode 5 development tools, the use

11、of mature software development technology, back-end database using Sqlite3.</p><p>  Keywords: </p><p>  two of a kind, Xcode, Sqlite3</p><p><b>  目 錄</b></p>&l

12、t;p>  1. 緒論.........................................................................................3</p><p>  1.1課題背景......................................................................................

13、....3</p><p>  1.2 選題依據(jù)和研究意義.....................................................................3</p><p>  1.3 研究現(xiàn)狀和發(fā)展態(tài)勢(shì).....................................................................4<

14、;/p><p>  2 相關(guān)開(kāi)發(fā)工具的技術(shù)簡(jiǎn)介.....................................................4</p><p>  2.1 IOS開(kāi)發(fā)技術(shù)...................................................................................5</p><

15、;p>  2.2 Xcode開(kāi)發(fā)工具介紹........................................................................6</p><p>  2.3 面向?qū)ο罄碚摰慕榻B......................................................................6</p><p

16、>  2.4 SQLite的介紹................................................................................7</p><p>  3 游戲分析與總體設(shè)計(jì).............................................................7</p><p>  

17、3.1游戲功能及規(guī)則描述.....................................................................7</p><p>  3.2 游戲流程分析................................................................................8</p><p>  3

18、.2.1 登陸模塊.................................................................................9</p><p>  3.2.2 注冊(cè)模塊...............................................................................10</p><

19、;p>  3.2.3 主頁(yè)模塊...............................................................................11</p><p>  3.2.4 游戲模塊...............................................................................12</p&

20、gt;<p>  4 游戲界面實(shí)現(xiàn)...................................................................................13</p><p>  4.1 登陸界面................................................................................

21、....13</p><p>  4.2 注冊(cè)界面....................................................................................14</p><p>  4.3 主界面...................................................................

22、.....................16</p><p>  4.4 游戲界面....................................................................................17</p><p>  5 核心代碼實(shí)現(xiàn)和程序的設(shè)計(jì)模式........................................1

23、7</p><p>  5.1游戲規(guī)則的核心算法................................................17</p><p>  5.2 IOS開(kāi)發(fā)中的代理模式...........................................................29</p><p>  5.3 IOS中的MVC

24、設(shè)計(jì)模式.........................................30</p><p>  6 結(jié)束語(yǔ)....................................................................................31</p><p>  7 參考文獻(xiàn)..............................

25、..................................................32</p><p>  8 致謝........................................................................................33</p><p><b>  1. 緒論</b><

26、/p><p><b>  1.1課題背景</b></p><p>  現(xiàn)在的移動(dòng)電話是小型的計(jì)算機(jī),它的處理能力與臺(tái)式機(jī)的標(biāo)準(zhǔn)處理能力相比很有限,但是足夠運(yùn)行一個(gè)小型的游戲。 現(xiàn)在的手機(jī)的一個(gè)特性就是它們還是網(wǎng)絡(luò)計(jì)算機(jī),能夠高速發(fā)送和接收數(shù)字?jǐn)?shù)據(jù)。 除了語(yǔ)音數(shù)據(jù)以外,它們還可以發(fā)送和接收其它類型的數(shù)據(jù)。所以類似《傳奇》、《千年》這樣的網(wǎng)絡(luò)游戲也可以在手機(jī)上實(shí)現(xiàn)。

27、 當(dāng)然就處理能力和性能而言,當(dāng)前階段的支持Java的手機(jī)很接近第二代控制臺(tái)游戲機(jī)、80年代中期的家用電腦和早期的手持游戲機(jī)。內(nèi)存通常很有限--一般128KB到500KB--雖然有些智能手機(jī)比如Nokia 3650有4 MB內(nèi)存。與PC相比,它們的輸入和顯示功能也很有限;小屏幕(許多仍然是黑白屏幕),為電話撥號(hào)優(yōu)化的小鍵盤并不針對(duì)文本輸入,以及有限的聲音處理能力,中國(guó)電子游戲產(chǎn)業(yè)的發(fā)展,是從上個(gè)世紀(jì)的80年代末開(kāi)始興起的,市場(chǎng)展現(xiàn)過(guò)的有大

28、型機(jī)游戲、家用游戲、掌機(jī)游戲、PC機(jī)游戲、動(dòng)漫游戲、網(wǎng)絡(luò)游戲、手機(jī)游戲等幾大類游戲。 80年代末是大型機(jī)游戲時(shí)代,主要經(jīng)營(yíng)游戲廳。90年初家用游戲和掌機(jī)游戲發(fā)展較快,主要產(chǎn)品面向家用。到了90年代中期,個(gè)人計(jì)算機(jī)普及很快,因此PC機(jī)游戲比較流行。 隨著網(wǎng)絡(luò)</p><p>  1.2 選題依據(jù)和研究意義</p><p>  作為運(yùn)行于手持設(shè)備上的應(yīng)用程序,手機(jī)的硬件特征決定了手機(jī)游戲的特點(diǎn)

29、。那什么是手機(jī)游戲呢?相信大家都知道吧!手機(jī)游戲是指運(yùn)行于手機(jī)上的游戲軟件。目前用來(lái)編寫手機(jī)最多的程序是Java語(yǔ)言,見(jiàn)J2ME。其次是C語(yǔ)言。 是的,就是如此,中國(guó)市場(chǎng)以及全球市場(chǎng)龐大的手機(jī)用戶群,都為手機(jī)游戲的發(fā)展奠定了良好的基礎(chǔ)。而現(xiàn)在手機(jī)本身硬件的發(fā)展,也為其支持多項(xiàng)游戲的運(yùn)行提供了可靠的保障!</p><p> ?。?) 龐大的潛在用戶群</p><p>  全球在使用

30、的移動(dòng)電話已經(jīng)超過(guò)10億部,而且這個(gè)數(shù)字每天都在不斷增加。在除美國(guó)之外的各個(gè)發(fā)達(dá)國(guó)家,手機(jī)用戶都比計(jì)算機(jī)用戶多。手機(jī)游戲潛在的市場(chǎng)比其他任何平臺(tái),比如PlayStation和GameBoy都要大。</p><p><b>  (2) 便攜性</b></p><p>  在控制臺(tái)游戲時(shí)代,GameBoy熱銷的一個(gè)原因就是便攜性——人們可以隨時(shí)隨地沉浸在自己喜歡的游戲中。

31、和游戲控制臺(tái)或者PC相比,手機(jī)雖然可能不是一個(gè)理想的游戲設(shè)備,但畢竟人們總是隨時(shí)隨身攜帶,這樣手機(jī)游戲很可能成為人們消遣時(shí)間的首選。</p><p><b> ?。?)支持網(wǎng)絡(luò)</b></p><p>  因?yàn)槭謾C(jī)是網(wǎng)絡(luò)設(shè)備,在一定限制因素下可以實(shí)現(xiàn)多人在線游戲?,F(xiàn)在騰訊的多款游戲、盛大的游戲都支持手機(jī)登陸的。 是的,擁有這么大的市場(chǎng)前景和用戶群體,手機(jī)游戲的迅猛發(fā)展

32、是勢(shì)不可擋的,接下來(lái),都會(huì)有更多更好的網(wǎng)絡(luò)游戲不斷面世,相信對(duì)于廣大的用戶朋友來(lái)說(shuō)都都是值得欣喜的!</p><p>  1.3 研究現(xiàn)狀和發(fā)展態(tài)勢(shì).</p><p>  在科技技術(shù)與互聯(lián)網(wǎng)高速發(fā)展的社會(huì)中,手機(jī)游戲能夠給人們帶來(lái)隨時(shí)隨地的并具有廣域無(wú)線網(wǎng)絡(luò)聯(lián)機(jī)功能的休閑互動(dòng)娛樂(lè)體驗(yàn),以獲取在現(xiàn)實(shí)生活中的精神與娛樂(lè)上的享受,在某種程度上滿足人們本身的希冀,是一種精神世界地釋放。wsn中國(guó)行

33、業(yè)咨詢網(wǎng)_行業(yè)報(bào)告_行業(yè)分析_市場(chǎng)調(diào)研_第三方市場(chǎng)數(shù)據(jù)提供商wsn中國(guó)行業(yè)咨詢網(wǎng)_行業(yè)報(bào)告_行業(yè)分析_市場(chǎng)調(diào)研_第三方市場(chǎng)數(shù)據(jù)提供商 近幾年來(lái),手機(jī)游戲快速發(fā)展的同時(shí)按內(nèi)容可分為:角色扮演類、冒險(xiǎn)類、格斗類、體育競(jìng)速類、電影改版類、棋牌類、益智類、模擬類。紛繁的手機(jī)游戲種類已成為人類線上娛樂(lè)生活的不可缺少的最主流載體而存在,各類智能手機(jī)伴隨著PC網(wǎng)絡(luò)游戲?yàn)榛A(chǔ)、3G網(wǎng)絡(luò)的不斷強(qiáng)化為措施的條件下大力迅猛發(fā)展手機(jī)網(wǎng)絡(luò)游戲。雖然手機(jī)游

34、戲的用戶越來(lái)越多,豐富多彩的游戲種類給玩家?guī)?lái)了更多的選擇,但是我國(guó)的手機(jī)游戲行業(yè)的發(fā)展現(xiàn)狀并不樂(lè)觀,主要因素有:1)高質(zhì)量游戲軟件開(kāi)發(fā)公司和人才的貧乏,導(dǎo)致無(wú)優(yōu)秀游戲打人市場(chǎng)。2)游戲創(chuàng)意的匱乏。大多游戲都只是一味跟風(fēng),看到某個(gè)游戲成功贏得市場(chǎng),便改換場(chǎng)景風(fēng)格、人物造型、故事背景等,其游戲核心一沉不變的思維理念會(huì)使玩家產(chǎn)生審美 疲勞。</p><p>  2 相關(guān)技術(shù)的選用與介紹</p><

35、;p>  2.1 IOS開(kāi)發(fā)技術(shù)</p><p>  IOS是iPhone,iPod touch以及iPad等設(shè)備的核心操作系統(tǒng)。IOS平臺(tái)使用了構(gòu)建Mac OS X時(shí)積累的知識(shí),IOS SDK提供了創(chuàng)建IOS應(yīng)用程序所需要的環(huán)境和工具,利用IOS SDK開(kāi)發(fā)應(yīng)用時(shí)所用的編程語(yǔ)言是Objective-C。IOS平臺(tái)開(kāi)發(fā)工具和開(kāi)發(fā)技術(shù)源于Mac OSX,都是以UNIX為基礎(chǔ)。IOS應(yīng)用程序開(kāi)發(fā)依賴于iPho

36、ne軟件開(kāi)發(fā)包(SDK),其中SDK繼承與Xcode中。從整體上看,IOS扮演底層硬件和應(yīng)用程序的中介。創(chuàng)建的應(yīng)用程序不能直接訪問(wèn)硬件,而需要和系統(tǒng)接口進(jìn)行交互。IOS實(shí)現(xiàn)可以看作多個(gè)層的集合,底層為所有程序提供基礎(chǔ)服務(wù),高層則包含一些復(fù)雜的服務(wù)和技術(shù)。Cocoa touch層提供了基本的系統(tǒng)行為支持,當(dāng)需要實(shí)現(xiàn)更為復(fù)雜的行為和界面時(shí),才考慮向下層探尋技術(shù)支持。 UIKit框架:提供程序運(yùn)行必須得關(guān)鍵對(duì)

37、象,使APP能夠捕獲用戶輸入和在屏幕上顯示內(nèi)容。MapKit框架:IOS3.0 引入該框架,可被嵌入到應(yīng)用程序的地圖界面,該框架包含一個(gè)可以滾動(dòng)的地圖視圖。Address Book UI框架:IOS3.0引</p><p><b>  IOS開(kāi)發(fā)限制介紹</b></p><p> ?。?) 平臺(tái)間差異:iPhone OS 設(shè)備和臺(tái)式機(jī)或筆記本電腦的開(kāi)發(fā)的不同,也和桌面

38、應(yīng)用程序不同,需要意識(shí)到終端開(kāi)發(fā)的特殊性。</p><p>  (2)屏幕大小的限制:由于iPhone OS 設(shè)備具有高分辨率的小型屏幕,在iPhone5之前設(shè)備都是3.5in,iPhone5以及iPhone5c,iPhone5s都是4.0in,在設(shè)計(jì)應(yīng)用時(shí)需要注意不要放置非必要的元素。</p><p> ?。?)內(nèi)存限制:IOS的內(nèi)存非常有限,避免分配超出設(shè)備的可用內(nèi)存,不然應(yīng)用程序?qū)⒔K

39、止。當(dāng)發(fā)生內(nèi)存過(guò)低時(shí),IOS系統(tǒng)將發(fā)出警告,需要進(jìn)行及時(shí)清理內(nèi)存。同時(shí)需要注意避免內(nèi)存泄露。</p><p> ?。?)窗口顯示限制:在IOS環(huán)境上,用戶每次只能看到單個(gè)窗口。多個(gè)窗口只能順序訪問(wèn)和查看。</p><p>  (5)電量限制:iPhone OS設(shè)備是通過(guò)電池供電,而高速運(yùn)轉(zhuǎn)的系統(tǒng),大屏幕,上網(wǎng)或看電子書(shū)都會(huì)消耗電量。</p><p>  2.2 X

40、code開(kāi)發(fā)工具介紹</p><p>  Xcode: IOS集成開(kāi)發(fā)環(huán)境,也是編譯器,負(fù)責(zé)管理應(yīng)用程序工程。</p><p>  Interface Builder:快速原型開(kāi)發(fā)工具,可視化的組裝用戶UI接口的工具,集成在Xcode中。</p><p>  Instruments:功能強(qiáng)大的性能調(diào)試工具,以及內(nèi)存分析工具。</p><p>

41、  iPhone Simulator:Mac OS X平臺(tái)應(yīng)用程序,它是模擬應(yīng)用程序,但不能完全模擬所有功能。</p><p>  IOS SDK:ISO軟件開(kāi)發(fā)工具包。</p><p>  2.3 面向?qū)ο罄碚摰慕榻B</p><p>  從現(xiàn)實(shí)世界中客觀存在的事物(即對(duì)象)出發(fā)來(lái)構(gòu)造軟件系統(tǒng),并在系統(tǒng)構(gòu)造中盡可能運(yùn)用人類的自然思維方式,強(qiáng)調(diào)直接以問(wèn)題域(現(xiàn)實(shí)世界

42、)中的事物為中心來(lái)思考問(wèn)題,并根據(jù)這些事物的本質(zhì)特點(diǎn),把它們抽象地表示為系統(tǒng)中的對(duì)象,作為系統(tǒng)的基本構(gòu)成單位(而不是用一些與現(xiàn)實(shí)世界中的事物相關(guān)比較遠(yuǎn),并且沒(méi)有對(duì)應(yīng)關(guān)系的其它概念來(lái)構(gòu)造系統(tǒng))。這可以使系統(tǒng)直接地映射問(wèn)題域,保持問(wèn)題域中事物及其相互關(guān)系的本來(lái)面貌。</p><p>  對(duì)象是要研究的任何事物。從一本書(shū)到一家圖書(shū)館,單的整數(shù)到整數(shù)列龐大的數(shù)據(jù)庫(kù)、極其復(fù)雜的自動(dòng)化工廠、航天飛機(jī)都可看作對(duì)象,它不僅能表示

43、有形的實(shí)體,也能表示無(wú)形的(抽象的)規(guī)則、計(jì)劃或事件。對(duì)象由數(shù)據(jù)(描述事物的屬性)和作用于數(shù)據(jù)的操作(體現(xiàn)事物的行為)構(gòu)成一獨(dú)立整體。從程序設(shè)計(jì)者來(lái)看,對(duì)象是一個(gè)程序模塊,從用戶來(lái)看,對(duì)象為他們提供所希望的行為。在對(duì)內(nèi)的操作通常稱為方法。</p><p>  類是對(duì)象的模板。即類是對(duì)一組有相同數(shù)據(jù)和相同操作的對(duì)象的定義,一個(gè)類所包含的方法和數(shù)據(jù)描述一組對(duì)象的共同屬性和行為。類是在對(duì)象之上的抽象,對(duì)象則是類的具體化

44、,是類的實(shí)例。類可有其子類,也可有其它類,形成類層次結(jié)構(gòu)。</p><p>  消息是對(duì)象之間進(jìn)行通信的一種規(guī)格說(shuō)明。一般它由三部分組成:接收消息的對(duì)象、消息名及實(shí)際變?cè)?lt;/p><p><b>  三大特性:</b></p><p>  封裝性:封裝是一種信息隱藏技術(shù),它體現(xiàn)于類的說(shuō)明,是對(duì)象的重要特性。封裝使數(shù)據(jù)和加工該數(shù)據(jù)的方法(函數(shù))

45、封裝為一個(gè)整體,以實(shí)現(xiàn)獨(dú)立性很強(qiáng)的模塊,使得用戶只能看見(jiàn)到對(duì)象的外特性(對(duì)象能接受哪些消息,具有哪些處理能力),而對(duì)象的內(nèi)特性(保存內(nèi)部狀態(tài)的私有數(shù)據(jù)和實(shí)現(xiàn)加工能力的算法)對(duì)用戶是隱蔽的。封裝的目的在于把對(duì)象的設(shè)計(jì)者和對(duì)象者的使用分開(kāi),使用者不必知曉行為實(shí)現(xiàn)的細(xì)節(jié),只須用設(shè)計(jì)者提供的消息來(lái)訪問(wèn)該對(duì)象。</p><p>  繼承性:“繼承”是面向?qū)ο筌浖夹g(shù)當(dāng)中的一個(gè)概念。如果一個(gè)類A繼承自另一個(gè)類B,就把這個(gè)A稱

46、為“B的子類”,而把B稱為“A的父類”。繼承可以使得子類具有父類的各種屬性和方法,而不需要再次編寫相同的代碼。在令子類繼承父類的同時(shí),可以重新定義某些屬性,并重寫某些方法,即覆蓋父類的原有屬性和方法,使其獲得與父類不同的功能。另外,為子類追加新的屬性和方法也是常見(jiàn)的做法。</p><p>  多態(tài)性: 對(duì)象根據(jù)所接收的消息而做出動(dòng)作。同一消息為不同的對(duì)象接受時(shí)可產(chǎn)生完全不同的行動(dòng),這種現(xiàn)象稱為多態(tài)性。利用多態(tài)性用

47、戶可發(fā)送一個(gè)通用的消息,而將所有的實(shí)現(xiàn)細(xì)節(jié)都留給接受消息的對(duì)象自行決定,如是,同一消息即可調(diào)用不同的方法。多態(tài)的實(shí)現(xiàn)受到繼承性的支持,利用類繼承的層次關(guān)系,把具有通用功能的協(xié)議存放在類層次中盡可能高的地方,而將實(shí)現(xiàn)這一功能的不同方法置于較低層次,這樣,在這些低層次上生成的對(duì)象就能給通用消息以不同的響應(yīng)。</p><p>  類的多態(tài)性提供類方法的多樣性,多態(tài)性有兩種表示方式:重載和覆蓋。</p>&

48、lt;p>  2.4 SQLite的介紹</p><p>  SQLite,是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語(yǔ)言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有OD

49、BC接口,同樣比起Mysql、PostgreSQL這兩款開(kāi)源世界著名的數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)講,它的處理速度比他們都快。SQLite第一個(gè)Alpha版本誕生于2000年5月。 至今已經(jīng)有14個(gè)年頭,SQLite也迎來(lái)了一個(gè)版本 SQLite 3已經(jīng)發(fā)布。同時(shí)它還支持事務(wù)處理功能等等。也有人說(shuō)它象Microsoft的Access,有時(shí)候真的覺(jué)得有點(diǎn)象,但是事實(shí)上它們區(qū)別很大。比如SQLite 支持跨平臺(tái),操作簡(jiǎn)單,能夠使用很多語(yǔ)言直接創(chuàng)建數(shù)據(jù)庫(kù)

50、,而不象Access一樣需要Office的支持。如果你是個(gè)很小型的應(yīng)用,或者你想做嵌入式開(kāi)發(fā),沒(méi)有合適的數(shù)據(jù)庫(kù)系統(tǒng),那么你可以考慮使用SQLite。到2013年10月17日最新版本是 3.8.1 。它的官方網(wǎng)站是:</p><p>  3 游戲分析與總體設(shè)計(jì)</p><p>  3.1游戲功能及規(guī)則描述</p><p>  游戲在 8 × 10 格子的游戲

51、池中進(jìn)行。每個(gè)格子中有一個(gè)寶石的圖片。鼠標(biāo)連續(xù)選中兩個(gè)相鄰的圖片,它們的位置會(huì)互換,互換后如果橫排或豎排有 3 個(gè)以上相同的頭像,則可以消去該頭像,并得分。 </p><p>  基本規(guī)則交換 玩家選中相鄰(橫、豎)的兩個(gè)圖片,則這兩個(gè)圖片的位置發(fā)生互換,如果互換成功則消去圖片,否則位置交換。消去 玩家選擇兩個(gè)寶石的圖片進(jìn)行位置互換,互換后如果橫排或豎排有 3 個(gè)以上相同的寶石的圖片,

52、則消去這幾個(gè)相同的寶石的圖片,如果互換后沒(méi)有可以消去的寶石的圖片,則換位置。消去后的空格由上面的寶石的圖片掉下來(lái)補(bǔ)齊。每次消去寶石的圖片玩家都能得到一定的分?jǐn)?shù)。連鎖 玩家消去寶石的圖片后,上面的頭像掉下來(lái)補(bǔ)充空格。如果這時(shí)游戲池中有連續(xù)擺放(橫、豎)的 3 個(gè)或 3 個(gè)以上相同的寶石的圖片,則可以消去這些頭像,這就是一次連鎖。空格被新的寶石的圖片填充,又可以進(jìn)行下一次連鎖。每次連鎖會(huì)有加分。 </p>

53、<p>  3.2 游戲流程分析</p><p>  3.2.1 登陸模塊</p><p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p>  3.2.2 注冊(cè)模塊<

54、;/p><p><b>  是</b></p><p><b>  否 </b></p><p><b>  是 </b></p><p><b>  否</b></p><p><b>  否</b>

55、</p><p><b>  是</b></p><p>  3.2.3 主頁(yè)模塊</p><p>  3.2.4 游戲模塊</p><p><b>  是</b></p><p>  否 </p><p&g

56、t;<b>  是 </b></p><p>  否 </p><p><b>  4 游戲界面實(shí)現(xiàn)</b></p><p><b>  4.1登陸界面</b></p><p><b>  4.2 注冊(cè)界面</b

57、></p><p><b>  4.3 主界面</b></p><p><b>  4.4游戲界面</b></p><p>  最上面記錄玩家的昵稱,當(dāng)前得分,以及最高分,點(diǎn)擊返回,到上一個(gè)界面。</p><p>  5 核心代碼實(shí)現(xiàn)和程序的設(shè)計(jì)模式</p><p> 

58、 5.1 游戲規(guī)則的核心算法</p><p>  -(void)distributeStoneType</p><p><b>  {</b></p><p>  if(!_isReloading)</p><p><b>  {</b></p><p>  for(int

59、i = 0;i<KRow;i++)</p><p>  for(int j = 0;j<KCol;j++)</p><p><b>  {</b></p><p>  _stoneType[i][j] = arc4random()%KStoneTypeNumber;</p><p>  if(j>0 &

60、amp;& i>0)</p><p><b>  {</b></p><p>  while (_stoneType[i][j]==_stoneType[i][j-1] ||_stoneType[i][j] == _stoneType[i-1][j]) {</p><p>  _stoneType[i][j] =arc4rando

61、m()%KStoneTypeNumber;</p><p><b>  }</b></p><p><b>  continue;</b></p><p><b>  }</b></p><p>  if (i > 0)</p><p><b

62、>  {</b></p><p>  while (_stoneType[i][j] == _stoneType[i-1][j]) {</p><p>  _stoneType[i][j] =arc4random()%KStoneTypeNumber;</p><p><b>  }</b></p><p&

63、gt;<b>  continue;</b></p><p><b>  }</b></p><p>  if (j > 0)</p><p><b>  {</b></p><p>  while (_stoneType[i][j] == _stoneType[i][j

64、-1]) {</p><p>  _stoneType[i][j] =arc4random()%KStoneTypeNumber;</p><p><b>  }</b></p><p><b>  continue;</b></p><p><b>  }</b></p

65、><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  _scoreLab.text = [NSString s

66、tringWithFormat:@"Score:%@",_player.lastScore];</p><p>  NSLog(@"讀取游戲進(jìn)度:%@",_player.gameProcess);</p><p>  NSArray* arr = [_player.gameProcess componentsSeparatedByString:@&q

67、uot;|"];</p><p>  for(int i = 0;i<KRow;i++)</p><p>  for(int j = 0;j<KCol;j++)</p><p><b>  {</b></p><p>  NSInteger num = i*KCol + j;</p>

68、<p>  NSString* score = [arr objectAtIndex:num];</p><p>  _stoneType[i][j] =[score integerValue];</p><p><b>  }</b></p><p><b>  }</b></p><p&g

69、t;<b>  }</b></p><p><b>  //寶石按鈕</b></p><p>  -(void)createStoneBtn</p><p><b>  {</b></p><p>  for(int i = 0;i<KRow;i++)</p>

70、<p>  for(int j = 0;j<KCol;j++)</p><p><b>  {</b></p><p>  StoneBtnModel* model = [[StoneBtnModel alloc] init];</p><p>  UIButton* btn = [UIButton buttonWithTy

71、pe:UIButtonTypeCustom];</p><p>  btn.tag = KStoneImageButtonTag+i*KCol+j;</p><p>  model.stoneType = _stoneType[i][j];</p><p>  model.stoneRow = i;</p><p>  model.stone

72、Col = j;</p><p>  UIImage* image = [[BuildingStoneView shareStoneView] getStoneImageWith:model.stoneType];</p><p>  btn.frame = CGRectMake(KStoneImageOriginX+KBackViewHeight*j,KStoneImageOriginY

73、+i*KBackViewHeight, KImageWidth, KImageHeight);</p><p>  [btn setImage:image forState:UIControlStateNormal];</p><p>  [btn addTarget:self action:@selector(StoneImageBtnClicked:) forControlEvents

74、:UIControlEventTouchUpInside];</p><p>  model.stoneBtn = btn;</p><p>  model.btnTag = btn.tag;</p><p>  [_stoneBtnArr addObject:model];</p><p><b>  }</b><

75、;/p><p><b>  }</b></p><p><b>  }</b></p><p>  -(void)exchangeStone:(NSInteger)tag1 withTag:(NSInteger)tag2</p><p><b>  {</b></p>

76、<p>  StoneBtnModel* model1 = [_stoneBtnArr objectAtIndex:tag1-KStoneImageButtonTag];</p><p>  StoneBtnModel* model2 = [_stoneBtnArr objectAtIndex:tag2-KStoneImageButtonTag];</p><p>  UIBu

77、tton* btn1 = model1.stoneBtn;</p><p>  UIButton* btn2 = model2.stoneBtn;</p><p><b>  //frame交換</b></p><p>  CGRect rect = btn1.frame;</p><p>  btn1.frame =

78、btn2.frame;</p><p>  btn2.frame = rect</p><p>  //按鈕tag 交換</p><p>  btn1.tag = model2.btnTag;</p><p>  btn2.tag = model1.btnTag;</p><p>  NSInteger type =

79、model1.stoneType;</p><p>  model1.stoneType = model2.stoneType;</p><p>  model2.stoneType = type;</p><p>  model1.stoneBtn = btn2;</p><p>  model2.stoneBtn = btn1;</

80、p><p>  [self performSelector:@selector(judgeIsThreeInLine) withObject:nil afterDelay:KTimeCheckDelay];</p><p><b>  }</b></p><p>  //判斷是否可以交換</p><p>  -(void)i

81、sExchangeTag:(NSInteger)tag1 withTag:(NSInteger)tag2</p><p><b>  {</b></p><p>  _isEXchange = NO;</p><p>  StoneBtnModel* model1 = [_stoneBtnArr objectAtIndex:tag1-KSton

82、eImageButtonTag];</p><p>  StoneBtnModel* model2 = [_stoneBtnArr objectAtIndex:tag2-KStoneImageButtonTag];</p><p>  NSInteger row = model1.stoneRow;</p><p>  NSInteger col = model

83、1.stoneCol;</p><p>  NSInteger row2 = model2.stoneRow;</p><p>  NSInteger col2 = model2.stoneCol;</p><p>  if((1 == fabsf(row-row2) && col==col2) ||(1 == fabsf(col-col2) &am

84、p;&row == row2))</p><p><b>  {</b></p><p>  _isEXchange = YES;</p><p><b>  }</b></p><p>  _firstSelectedStone = 0;</p><p>  _se

85、condSelectedStone = 0;</p><p>  NSLog(@"_isExchange:%d",_isEXchange);</p><p>  if(_isEXchange)</p><p><b>  {</b></p><p>  _isEXchange = NO;</p&

86、gt;<p>  [self exchangeStone:tag1 withTag:tag2];</p><p><b>  }</b></p><p><b>  }</b></p><p>  #pragma mark---JudegThreeStoneIsInLine---</p><

87、;p>  //每行是否有三個(gè)相同類型寶石在一條線上</p><p>  -(void)judgeIsThreeInARow</p><p><b>  {</b></p><p>  NSLog(@"----judgeIsThreeInARow-----");</p><p>  NSMutab

88、leArray* stone = [[NSMutableArray alloc] init];</p><p>  for(int row=0;row < KRow;row++)</p><p>  for(int col=0;col<KCol-2;col++)</p><p><b>  {</b></p><

89、p>  NSInteger type = [self getStoneTypeWithTag:KStoneImageButtonTag+row*KCol+col]</p><p>  if(type == KStoneTypeBlank)</p><p><b>  {</b></p><p><b>  continue;&l

90、t;/b></p><p><b>  }</b></p><p>  [stone removeAllObjects];</p><p>  NSInteger i=0;</p><p>  NSInteger tag = KStoneImageButtonTag+row*KCol+col+i;</p>

91、;<p>  while (type == [self getStoneTypeWithTag:tag] && col+i<KCol)</p><p><b>  {</b></p><p>  [stone addObject:[self getStoneBtnModelWithTag:tag]];</p><

92、p><b>  i++;</b></p><p>  tag = KStoneImageButtonTag+row*KCol+col+i;</p><p><b>  }</b></p><p>  if(stone.count >2)</p><p><b>  {</

93、b></p><p>  NSLog(@"有三個(gè)寶石連續(xù)共線!");</p><p>  [_stoneInLineSet addObjectsFromArray:stone];</p><p>  col+= stone.count; </p><p><b>  }</b></p>

94、;<p><b>  }</b></p><p><b>  }</b></p><p>  //從視圖上移除寶石</p><p>  -(void)deleteStoneWithStoneArr:(NSSet*)stoneArr</p><p><b>  {</b&

95、gt;</p><p>  NSLog(@"移除寶石!");</p><p>  for(StoneBtnModel* model in stoneArr)</p><p><b>  {</b></p><p>  if(model.stoneType ==KStoneTypeBlank)</

96、p><p><b>  {</b></p><p><b>  continue;</b></p><p><b>  }</b></p><p>  UIButton*btn = model.stoneBtn;</p><p>  // NSLog(@&

97、quot;deleteStoneBtn:%d",btn.tag);</p><p>  model.stoneType = KStoneTypeBlank;</p><p>  [btn removeFromSuperview];</p><p><b>  }</b></p><p><b>  /

98、/得分</b></p><p>  [self getScoreWithStoneNumber:[stoneArr count]];</p><p><b>  //刷新</b></p><p>  NSSet* set = [[NSSet alloc] initWithSet:_stoneInLineSet];</p>

99、<p>  [self refreshMapWithSet:set withType:5];</p><p><b>  }</b></p><p><b>  //刷新地圖</b></p><p>  -(void)refreshMapWithSet:(NSSet*)arr withType:(NSInte

100、ger)type</p><p><b>  {</b></p><p>  NSMutableArray* tempStoneArr = [[NSMutableArray alloc] init];</p><p>  for(StoneBtnModel* model in arr)</p><p><b>

101、  {</b></p><p>  if(model.stoneType != KStoneTypeBlank)</p><p><b>  {</b></p><p><b>  continue;</b></p><p><b>  }</b></p>

102、;<p>  [tempStoneArr removeAllObjects];</p><p>  //得到空寶石上方不為空的寶石實(shí)例</p><p>  [tempStoneArr addObjectsFromArray:[self getColStoneWithCol:model.stoneCol]];</p><p>  [self refres

103、hMapInCol:tempStoneArr withCol:model.stoneCol];</p><p><b>  }</b></p><p>  //交換完畢 延時(shí)檢測(cè),讓寶石落到位置</p><p>  [self performSelector:@selector(judgeIsThreeInLine) withObject:ni

104、l afterDelay:KTimeCheckDelay];</p><p><b>  }</b></p><p>  -(void)getScoreWithStoneNumber:(NSInteger)number</p><p><b>  {</b></p><p>  number -=

105、3;</p><p>  NSInteger score = 25*number*(number+1)+100;</p><p>  _currentScore += score;</p><p>  NSLog(@"消除%d個(gè)寶石,得分:%d 當(dāng)前得分:%d",number+3,score,_currentScore);</p>

106、<p>  NSString* str = [NSString stringWithFormat:@"Score: %d",_currentScore];</p><p>  _scoreLab.text = str;</p><p>  [self refreshMaxScoreWith:_currentScore];</p><p>

107、;  }-(void)StoneImageBtnClicked:(UIButton*)btn</p><p><b>  {</b></p><p>  if (0 == _firstSelectedStone ) {</p><p>  _firstSelectedStone = btn.tag;</p><p>  

108、[self customAnimations];</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  _secondSelectedStone = btn.tag;</p>

109、<p>  [_timer invalidate];</p><p>  [self isExchangeTag:_firstSelectedStone withTag:_secondSelectedStone];</p><p><b>  }</b></p><p><b>  }</b></p&g

110、t;<p>  5.2 IOS開(kāi)發(fā)中的代理模式</p><p>  代理是一種簡(jiǎn)單而功能強(qiáng)大的設(shè)計(jì)模式,這種模式用于一個(gè)對(duì)象“代表”另外一個(gè)對(duì)象和程序中其他的對(duì)象進(jìn)行交互。 主對(duì)象(這里指的是delegating object)中維護(hù)一個(gè)代理(delegate)的引用并且在合適的時(shí)候向這個(gè)代理發(fā)送消息。這個(gè)消息通知“代理”主對(duì)象即將處理或是已經(jīng)處理完了某一個(gè)事件。這個(gè)代理可以通過(guò)更新自己或是其它對(duì)象

111、的UI界面或是其它狀態(tài)來(lái)響應(yīng)主對(duì)象所發(fā)送過(guò)來(lái)的這個(gè)事件的消息?;蚴窃谀承┣闆r下能返回一個(gè)值來(lái)影響其它即將發(fā)生的事件該如何來(lái)處理。代理的主要價(jià)值是它可以讓你容易的定制各種對(duì)象的行為。注意這里的代理是個(gè)名詞,它本身是一個(gè)對(duì)象,這個(gè)對(duì)象是專門代表被代理對(duì)象來(lái)和程序中其他對(duì)象打交道的。</p><p>  5.3 IOS開(kāi)發(fā)中的MVC模式</p><p>  MVC:模型,視圖,控制器,是iOS

112、開(kāi)發(fā)中用到的主要的設(shè)計(jì)模式。Model中處理邏輯與數(shù)據(jù),View展示應(yīng)用界面,接收用戶的操作,而Controller夾在View和Model中間,當(dāng)View接收到用戶操作,他將通知Controller,Controller會(huì)判斷采取什么樣的措施,Controller也負(fù)責(zé)將邏輯和數(shù)據(jù)處理交給Model完成,根據(jù)返回結(jié)果來(lái)更新View。Controller就像膠水,將兩個(gè)獨(dú)立的部分粘合在一起。</p><p>  

113、Model和Controller之間可以通信,View和Controller之間可以通信,而View和Model之間是禁止通信的。</p><p>  Controller可以通過(guò)直接訪問(wèn)屬性、調(diào)用方法,來(lái)控制Model和View,向他們傳遞消息,對(duì)于Storyboard和XIB文件,上面的控件可以通過(guò)生成outlet來(lái)調(diào)用,如果直接代碼生成的話,就調(diào)用控件實(shí)例。</p><p>  Co

114、ntroller必須實(shí)現(xiàn)View中所定義的target或者delegate方法,來(lái)實(shí)現(xiàn)View對(duì)Controller的回調(diào)。這樣,View就可以通知Controller自己的變化,以及用戶對(duì)View的操作。View還有data source方法,用于向Controller請(qǐng)求某些時(shí)刻需要顯式的數(shù)據(jù),比如UITableViewDataSource中,會(huì)在table view生成時(shí),向Controller請(qǐng)求表格的行數(shù)和頁(yè)面上可見(jiàn)的單元格中

115、的內(nèi)容。</p><p>  Model可以通過(guò)Notification和KVO的方式來(lái)通知Controller在Model中數(shù)據(jù)的改變。也可以使用delegate或者block來(lái)實(shí)現(xiàn),在AFNetworking中的網(wǎng)絡(luò)狀態(tài)變化通知,就是使用block來(lái)實(shí)現(xiàn)的。</p><p>  把所有的邏輯和數(shù)據(jù)都放到Model層中,Model就會(huì)變得很雜亂,所以我習(xí)慣把Model再細(xì)分:</p

116、><p>  Service層,用于為Controller提供一些最直接的邏輯功能、數(shù)據(jù)封裝,并且管理下一層模塊,向下一層模塊請(qǐng)求數(shù)據(jù)。Controller只管理他所擁有的View,以及與他直接相關(guān)的Service類。</p><p>  Manager層,用于管理一大類操作,比如:數(shù)據(jù)同步功能,寫一個(gè)數(shù)據(jù)同步的類,再類中處理網(wǎng)絡(luò)狀態(tài)判斷、緩存數(shù)據(jù)的讀寫以及緩存數(shù)據(jù)的發(fā)送,錯(cuò)誤處理。Manag

117、er層位于Service層之下,接受Service的調(diào)度。</p><p>  Handler層,用于實(shí)現(xiàn)具體的操作,如:FileHandler,用來(lái)處理文件存儲(chǔ)操作,將字符串或NSData數(shù)據(jù)轉(zhuǎn)換成文件并存放在指定路徑,以及一些多線程處理操作。Handler層接受Manager調(diào)度。</p><p>  Model還有一些其它的部分:實(shí)現(xiàn)一些公共方法的Utility工具類,以及一些存儲(chǔ)數(shù)

118、據(jù)結(jié)構(gòu)的類。</p><p>  各個(gè)平級(jí)的層之間不允許互相調(diào)用,調(diào)用只能自上而下發(fā)生,回調(diào)都使用block來(lái)實(shí)現(xiàn)。這樣實(shí)現(xiàn),項(xiàng)目結(jié)構(gòu)看起來(lái)就清晰了許多。</p><p><b>  結(jié)束語(yǔ)</b></p><p>  本次畢業(yè)設(shè)計(jì)到此已經(jīng)順利結(jié)束,通過(guò)這次的畢業(yè)設(shè)計(jì),我學(xué)到了很多。在以前的4年時(shí)間內(nèi)我學(xué)習(xí)了很多的課程及編程語(yǔ)言,雖然通過(guò)學(xué)習(xí)對(duì)

119、這些課程有所了解和掌握,但是始終處于理論知識(shí)的掌握階段,并沒(méi)有真正應(yīng)用于實(shí)踐設(shè)計(jì)開(kāi)發(fā),所以對(duì)知識(shí)的掌握還不夠全面和熟練。而且并不能真正獨(dú)立的開(kāi)發(fā)出一個(gè)完整的應(yīng)用于實(shí)際的軟件。通過(guò)這次的畢業(yè)設(shè)計(jì),我已經(jīng)可以完成這一任務(wù),對(duì)自身的編程能力也有了很大的提高。這次開(kāi)發(fā)的軟件是一款手機(jī)游戲,跟以往的PC端開(kāi)發(fā)不一樣,我采用的自學(xué)的objective--C語(yǔ)言,它是一種兼容c和c++的語(yǔ)言,是c語(yǔ)言的超集。當(dāng)然在學(xué)習(xí)的過(guò)程中曾經(jīng)碰到過(guò)一些讓人頭痛的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論