版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 河北農(nóng)業(yè)大學(xué)</b></p><p> 本科畢業(yè)論文(設(shè)計)</p><p> 題 目: 寶石對對碰 </p><p> 學(xué) 院: 信息科學(xué)與技術(shù)學(xué)院 </p><p> 專業(yè)班級: 計算機(jī)科學(xué)與技術(shù)12
2、01 </p><p> 學(xué) 號: 1201232010114 </p><p> 學(xué)生姓名: 高娟娟 </p><p> 指導(dǎo)教師姓名: 張璠 </p><p> 指導(dǎo)教師職稱: 講師
3、 </p><p> 二O一 四 年 五 月 二十 日</p><p><b> 摘 要</b></p><p> 游戲設(shè)計的歷史很悠久,幾千年來,從最古老的非洲的Awari游戲,到現(xiàn)在最為優(yōu)雅的游戲-----圍棋,人們設(shè)計和玩過的游戲不計其數(shù),許多游戲已經(jīng)隨著時間遺失在歷史的長河中了。除了經(jīng)典游戲之外,人們總是對
4、新游戲感興趣,因此一直有對新游戲設(shè)計的需求。 手機(jī)游戲: 指用戶利用隨身攜帶具有廣域無線網(wǎng)絡(luò)聯(lián)機(jī)功能(GPRS 或CDMA)的移動終端設(shè)備(手機(jī)),隨時隨地進(jìn)行的游戲。簡單說手機(jī)游戲是指運(yùn)行于手機(jī)上的游戲軟件。 </p><p> 本文介紹了手機(jī)游戲?qū)ε龅拈_發(fā)過程。論文遵循軟件工程的方法,詳盡論述了從需求分析、系統(tǒng)分析、概要設(shè)計、詳細(xì)設(shè)計、以及測試與調(diào)試的整個開發(fā)過程,總結(jié)了開發(fā)過程中的經(jīng)驗(yàn)及本系統(tǒng)今后的改
5、進(jìn)方向。</p><p> 本系統(tǒng)開發(fā)成功后可以實(shí)現(xiàn)對對碰游戲的登陸,注冊,以及游戲的娛樂功能。Xcode 5.0開發(fā)工具,采用成熟的軟件研制技術(shù),后臺數(shù)據(jù)庫采用Sqlite3。</p><p> 關(guān)鍵詞 : 對對碰, 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)勢.....................................................................4<
14、;/p><p> 2 相關(guān)開發(fā)工具的技術(shù)簡介.....................................................4</p><p> 2.1 IOS開發(fā)技術(shù)...................................................................................5</p><
15、;p> 2.2 Xcode開發(fā)工具介紹........................................................................6</p><p> 2.3 面向?qū)ο罄碚摰慕榻B......................................................................6</p><p
16、> 2.4 SQLite的介紹................................................................................7</p><p> 3 游戲分析與總體設(shè)計.............................................................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 注冊模塊...............................................................................10</p><
19、;p> 3.2.3 主頁模塊...............................................................................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 注冊界面....................................................................................14</p><p> 4.3 主界面...................................................................
22、.....................16</p><p> 4.4 游戲界面....................................................................................17</p><p> 5 核心代碼實(shí)現(xiàn)和程序的設(shè)計模式........................................1
23、7</p><p> 5.1游戲規(guī)則的核心算法................................................17</p><p> 5.2 IOS開發(fā)中的代理模式...........................................................29</p><p> 5.3 IOS中的MVC
24、設(shè)計模式.........................................30</p><p> 6 結(jié)束語....................................................................................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)在的移動電話是小型的計算機(jī),它的處理能力與臺式機(jī)的標(biāo)準(zhǔn)處理能力相比很有限,但是足夠運(yùn)行一個小型的游戲。 現(xiàn)在的手機(jī)的一個特性就是它們還是網(wǎng)絡(luò)計算機(jī),能夠高速發(fā)送和接收數(shù)字?jǐn)?shù)據(jù)。 除了語音數(shù)據(jù)以外,它們還可以發(fā)送和接收其它類型的數(shù)據(jù)。所以類似《傳奇》、《千年》這樣的網(wǎng)絡(luò)游戲也可以在手機(jī)上實(shí)現(xiàn)。
27、 當(dāng)然就處理能力和性能而言,當(dāng)前階段的支持Java的手機(jī)很接近第二代控制臺游戲機(jī)、80年代中期的家用電腦和早期的手持游戲機(jī)。內(nèi)存通常很有限--一般128KB到500KB--雖然有些智能手機(jī)比如Nokia 3650有4 MB內(nèi)存。與PC相比,它們的輸入和顯示功能也很有限;小屏幕(許多仍然是黑白屏幕),為電話撥號優(yōu)化的小鍵盤并不針對文本輸入,以及有限的聲音處理能力,中國電子游戲產(chǎn)業(yè)的發(fā)展,是從上個世紀(jì)的80年代末開始興起的,市場展現(xiàn)過的有大
28、型機(jī)游戲、家用游戲、掌機(jī)游戲、PC機(jī)游戲、動漫游戲、網(wǎng)絡(luò)游戲、手機(jī)游戲等幾大類游戲。 80年代末是大型機(jī)游戲時代,主要經(jīng)營游戲廳。90年初家用游戲和掌機(jī)游戲發(fā)展較快,主要產(chǎn)品面向家用。到了90年代中期,個人計算機(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ī)上的游戲軟件。目前用來編寫手機(jī)最多的程序是Java語言,見J2ME。其次是C語言。 是的,就是如此,中國市場以及全球市場龐大的手機(jī)用戶群,都為手機(jī)游戲的發(fā)展奠定了良好的基礎(chǔ)。而現(xiàn)在手機(jī)本身硬件的發(fā)展,也為其支持多項(xiàng)游戲的運(yùn)行提供了可靠的保障!</p><p> (1) 龐大的潛在用戶群</p><p> 全球在使用
30、的移動電話已經(jīng)超過10億部,而且這個數(shù)字每天都在不斷增加。在除美國之外的各個發(fā)達(dá)國家,手機(jī)用戶都比計算機(jī)用戶多。手機(jī)游戲潛在的市場比其他任何平臺,比如PlayStation和GameBoy都要大。</p><p><b> ?。?) 便攜性</b></p><p> 在控制臺游戲時代,GameBoy熱銷的一個原因就是便攜性——人們可以隨時隨地沉浸在自己喜歡的游戲中。
31、和游戲控制臺或者PC相比,手機(jī)雖然可能不是一個理想的游戲設(shè)備,但畢竟人們總是隨時隨身攜帶,這樣手機(jī)游戲很可能成為人們消遣時間的首選。</p><p><b> ?。?)支持網(wǎng)絡(luò)</b></p><p> 因?yàn)槭謾C(jī)是網(wǎng)絡(luò)設(shè)備,在一定限制因素下可以實(shí)現(xiàn)多人在線游戲?,F(xiàn)在騰訊的多款游戲、盛大的游戲都支持手機(jī)登陸的。 是的,擁有這么大的市場前景和用戶群體,手機(jī)游戲的迅猛發(fā)展
32、是勢不可擋的,接下來,都會有更多更好的網(wǎng)絡(luò)游戲不斷面世,相信對于廣大的用戶朋友來說都都是值得欣喜的!</p><p> 1.3 研究現(xiàn)狀和發(fā)展態(tài)勢.</p><p> 在科技技術(shù)與互聯(lián)網(wǎng)高速發(fā)展的社會中,手機(jī)游戲能夠給人們帶來隨時隨地的并具有廣域無線網(wǎng)絡(luò)聯(lián)機(jī)功能的休閑互動娛樂體驗(yàn),以獲取在現(xiàn)實(shí)生活中的精神與娛樂上的享受,在某種程度上滿足人們本身的希冀,是一種精神世界地釋放。wsn中國行
33、業(yè)咨詢網(wǎng)_行業(yè)報告_行業(yè)分析_市場調(diào)研_第三方市場數(shù)據(jù)提供商wsn中國行業(yè)咨詢網(wǎng)_行業(yè)報告_行業(yè)分析_市場調(diào)研_第三方市場數(shù)據(jù)提供商 近幾年來,手機(jī)游戲快速發(fā)展的同時按內(nèi)容可分為:角色扮演類、冒險類、格斗類、體育競速類、電影改版類、棋牌類、益智類、模擬類。紛繁的手機(jī)游戲種類已成為人類線上娛樂生活的不可缺少的最主流載體而存在,各類智能手機(jī)伴隨著PC網(wǎng)絡(luò)游戲?yàn)榛A(chǔ)、3G網(wǎng)絡(luò)的不斷強(qiáng)化為措施的條件下大力迅猛發(fā)展手機(jī)網(wǎng)絡(luò)游戲。雖然手機(jī)游
34、戲的用戶越來越多,豐富多彩的游戲種類給玩家?guī)砹烁嗟倪x擇,但是我國的手機(jī)游戲行業(yè)的發(fā)展現(xiàn)狀并不樂觀,主要因素有:1)高質(zhì)量游戲軟件開發(fā)公司和人才的貧乏,導(dǎo)致無優(yōu)秀游戲打人市場。2)游戲創(chuàng)意的匱乏。大多游戲都只是一味跟風(fēng),看到某個游戲成功贏得市場,便改換場景風(fēng)格、人物造型、故事背景等,其游戲核心一沉不變的思維理念會使玩家產(chǎn)生審美 疲勞。</p><p> 2 相關(guān)技術(shù)的選用與介紹</p><
35、;p> 2.1 IOS開發(fā)技術(shù)</p><p> IOS是iPhone,iPod touch以及iPad等設(shè)備的核心操作系統(tǒng)。IOS平臺使用了構(gòu)建Mac OS X時積累的知識,IOS SDK提供了創(chuàng)建IOS應(yīng)用程序所需要的環(huán)境和工具,利用IOS SDK開發(fā)應(yīng)用時所用的編程語言是Objective-C。IOS平臺開發(fā)工具和開發(fā)技術(shù)源于Mac OSX,都是以UNIX為基礎(chǔ)。IOS應(yīng)用程序開發(fā)依賴于iPho
36、ne軟件開發(fā)包(SDK),其中SDK繼承與Xcode中。從整體上看,IOS扮演底層硬件和應(yīng)用程序的中介。創(chuàng)建的應(yīng)用程序不能直接訪問硬件,而需要和系統(tǒng)接口進(jìn)行交互。IOS實(shí)現(xiàn)可以看作多個層的集合,底層為所有程序提供基礎(chǔ)服務(wù),高層則包含一些復(fù)雜的服務(wù)和技術(shù)。Cocoa touch層提供了基本的系統(tǒng)行為支持,當(dāng)需要實(shí)現(xiàn)更為復(fù)雜的行為和界面時,才考慮向下層探尋技術(shù)支持。 UIKit框架:提供程序運(yùn)行必須得關(guān)鍵對
37、象,使APP能夠捕獲用戶輸入和在屏幕上顯示內(nèi)容。MapKit框架:IOS3.0 引入該框架,可被嵌入到應(yīng)用程序的地圖界面,該框架包含一個可以滾動的地圖視圖。Address Book UI框架:IOS3.0引</p><p><b> IOS開發(fā)限制介紹</b></p><p> ?。?) 平臺間差異:iPhone OS 設(shè)備和臺式機(jī)或筆記本電腦的開發(fā)的不同,也和桌面
38、應(yīng)用程序不同,需要意識到終端開發(fā)的特殊性。</p><p> ?。?)屏幕大小的限制:由于iPhone OS 設(shè)備具有高分辨率的小型屏幕,在iPhone5之前設(shè)備都是3.5in,iPhone5以及iPhone5c,iPhone5s都是4.0in,在設(shè)計應(yīng)用時需要注意不要放置非必要的元素。</p><p> ?。?)內(nèi)存限制:IOS的內(nèi)存非常有限,避免分配超出設(shè)備的可用內(nèi)存,不然應(yīng)用程序?qū)⒔K
39、止。當(dāng)發(fā)生內(nèi)存過低時,IOS系統(tǒng)將發(fā)出警告,需要進(jìn)行及時清理內(nèi)存。同時需要注意避免內(nèi)存泄露。</p><p> (4)窗口顯示限制:在IOS環(huán)境上,用戶每次只能看到單個窗口。多個窗口只能順序訪問和查看。</p><p> ?。?)電量限制:iPhone OS設(shè)備是通過電池供電,而高速運(yùn)轉(zhuǎn)的系統(tǒng),大屏幕,上網(wǎng)或看電子書都會消耗電量。</p><p> 2.2 X
40、code開發(fā)工具介紹</p><p> Xcode: IOS集成開發(fā)環(huán)境,也是編譯器,負(fù)責(zé)管理應(yīng)用程序工程。</p><p> Interface Builder:快速原型開發(fā)工具,可視化的組裝用戶UI接口的工具,集成在Xcode中。</p><p> Instruments:功能強(qiáng)大的性能調(diào)試工具,以及內(nèi)存分析工具。</p><p>
41、 iPhone Simulator:Mac OS X平臺應(yīng)用程序,它是模擬應(yīng)用程序,但不能完全模擬所有功能。</p><p> IOS SDK:ISO軟件開發(fā)工具包。</p><p> 2.3 面向?qū)ο罄碚摰慕榻B</p><p> 從現(xiàn)實(shí)世界中客觀存在的事物(即對象)出發(fā)來構(gòu)造軟件系統(tǒng),并在系統(tǒng)構(gòu)造中盡可能運(yùn)用人類的自然思維方式,強(qiáng)調(diào)直接以問題域(現(xiàn)實(shí)世界
42、)中的事物為中心來思考問題,并根據(jù)這些事物的本質(zhì)特點(diǎn),把它們抽象地表示為系統(tǒng)中的對象,作為系統(tǒng)的基本構(gòu)成單位(而不是用一些與現(xiàn)實(shí)世界中的事物相關(guān)比較遠(yuǎn),并且沒有對應(yīng)關(guān)系的其它概念來構(gòu)造系統(tǒng))。這可以使系統(tǒng)直接地映射問題域,保持問題域中事物及其相互關(guān)系的本來面貌。</p><p> 對象是要研究的任何事物。從一本書到一家圖書館,單的整數(shù)到整數(shù)列龐大的數(shù)據(jù)庫、極其復(fù)雜的自動化工廠、航天飛機(jī)都可看作對象,它不僅能表示
43、有形的實(shí)體,也能表示無形的(抽象的)規(guī)則、計劃或事件。對象由數(shù)據(jù)(描述事物的屬性)和作用于數(shù)據(jù)的操作(體現(xiàn)事物的行為)構(gòu)成一獨(dú)立整體。從程序設(shè)計者來看,對象是一個程序模塊,從用戶來看,對象為他們提供所希望的行為。在對內(nèi)的操作通常稱為方法。</p><p> 類是對象的模板。即類是對一組有相同數(shù)據(jù)和相同操作的對象的定義,一個類所包含的方法和數(shù)據(jù)描述一組對象的共同屬性和行為。類是在對象之上的抽象,對象則是類的具體化
44、,是類的實(shí)例。類可有其子類,也可有其它類,形成類層次結(jié)構(gòu)。</p><p> 消息是對象之間進(jìn)行通信的一種規(guī)格說明。一般它由三部分組成:接收消息的對象、消息名及實(shí)際變元。</p><p><b> 三大特性:</b></p><p> 封裝性:封裝是一種信息隱藏技術(shù),它體現(xiàn)于類的說明,是對象的重要特性。封裝使數(shù)據(jù)和加工該數(shù)據(jù)的方法(函數(shù))
45、封裝為一個整體,以實(shí)現(xiàn)獨(dú)立性很強(qiáng)的模塊,使得用戶只能看見到對象的外特性(對象能接受哪些消息,具有哪些處理能力),而對象的內(nèi)特性(保存內(nèi)部狀態(tài)的私有數(shù)據(jù)和實(shí)現(xiàn)加工能力的算法)對用戶是隱蔽的。封裝的目的在于把對象的設(shè)計者和對象者的使用分開,使用者不必知曉行為實(shí)現(xiàn)的細(xì)節(jié),只須用設(shè)計者提供的消息來訪問該對象。</p><p> 繼承性:“繼承”是面向?qū)ο筌浖夹g(shù)當(dāng)中的一個概念。如果一個類A繼承自另一個類B,就把這個A稱
46、為“B的子類”,而把B稱為“A的父類”。繼承可以使得子類具有父類的各種屬性和方法,而不需要再次編寫相同的代碼。在令子類繼承父類的同時,可以重新定義某些屬性,并重寫某些方法,即覆蓋父類的原有屬性和方法,使其獲得與父類不同的功能。另外,為子類追加新的屬性和方法也是常見的做法。</p><p> 多態(tài)性: 對象根據(jù)所接收的消息而做出動作。同一消息為不同的對象接受時可產(chǎn)生完全不同的行動,這種現(xiàn)象稱為多態(tài)性。利用多態(tài)性用
47、戶可發(fā)送一個通用的消息,而將所有的實(shí)現(xiàn)細(xì)節(jié)都留給接受消息的對象自行決定,如是,同一消息即可調(diào)用不同的方法。多態(tài)的實(shí)現(xiàn)受到繼承性的支持,利用類繼承的層次關(guān)系,把具有通用功能的協(xié)議存放在類層次中盡可能高的地方,而將實(shí)現(xiàn)這一功能的不同方法置于較低層次,這樣,在這些低層次上生成的對象就能給通用消息以不同的響應(yīng)。</p><p> 類的多態(tài)性提供類方法的多樣性,多態(tài)性有兩種表示方式:重載和覆蓋。</p>&
48、lt;p> 2.4 SQLite的介紹</p><p> SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有OD
49、BC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生于2000年5月。 至今已經(jīng)有14個年頭,SQLite也迎來了一個版本 SQLite 3已經(jīng)發(fā)布。同時它還支持事務(wù)處理功能等等。也有人說它象Microsoft的Access,有時候真的覺得有點(diǎn)象,但是事實(shí)上它們區(qū)別很大。比如SQLite 支持跨平臺,操作簡單,能夠使用很多語言直接創(chuàng)建數(shù)據(jù)庫
50、,而不象Access一樣需要Office的支持。如果你是個很小型的應(yīng)用,或者你想做嵌入式開發(fā),沒有合適的數(shù)據(jù)庫系統(tǒng),那么你可以考慮使用SQLite。到2013年10月17日最新版本是 3.8.1 。它的官方網(wǎng)站是:</p><p> 3 游戲分析與總體設(shè)計</p><p> 3.1游戲功能及規(guī)則描述</p><p> 游戲在 8 × 10 格子的游戲
51、池中進(jìn)行。每個格子中有一個寶石的圖片。鼠標(biāo)連續(xù)選中兩個相鄰的圖片,它們的位置會互換,互換后如果橫排或豎排有 3 個以上相同的頭像,則可以消去該頭像,并得分。 </p><p> 基本規(guī)則交換 玩家選中相鄰(橫、豎)的兩個圖片,則這兩個圖片的位置發(fā)生互換,如果互換成功則消去圖片,否則位置交換。消去 玩家選擇兩個寶石的圖片進(jìn)行位置互換,互換后如果橫排或豎排有 3 個以上相同的寶石的圖片,
52、則消去這幾個相同的寶石的圖片,如果互換后沒有可以消去的寶石的圖片,則換位置。消去后的空格由上面的寶石的圖片掉下來補(bǔ)齊。每次消去寶石的圖片玩家都能得到一定的分?jǐn)?shù)。連鎖 玩家消去寶石的圖片后,上面的頭像掉下來補(bǔ)充空格。如果這時游戲池中有連續(xù)擺放(橫、豎)的 3 個或 3 個以上相同的寶石的圖片,則可以消去這些頭像,這就是一次連鎖??崭癖恍碌膶毷膱D片填充,又可以進(jìn)行下一次連鎖。每次連鎖會有加分。 </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 注冊模塊<
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 主頁模塊</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 注冊界面</b
57、></p><p><b> 4.3 主界面</b></p><p><b> 4.4游戲界面</b></p><p> 最上面記錄玩家的昵稱,當(dāng)前得分,以及最高分,點(diǎn)擊返回,到上一個界面。</p><p> 5 核心代碼實(shí)現(xiàn)和程序的設(shè)計模式</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> //每行是否有三個相同類型寶石在一條線上</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(@"有三個寶石連續(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> //交換完畢 延時檢測,讓寶石落到位置</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個寶石,得分:%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開發(fā)中的代理模式</p><p> 代理是一種簡單而功能強(qiáng)大的設(shè)計模式,這種模式用于一個對象“代表”另外一個對象和程序中其他的對象進(jìn)行交互。 主對象(這里指的是delegating object)中維護(hù)一個代理(delegate)的引用并且在合適的時候向這個代理發(fā)送消息。這個消息通知“代理”主對象即將處理或是已經(jīng)處理完了某一個事件。這個代理可以通過更新自己或是其它對象
111、的UI界面或是其它狀態(tài)來響應(yīng)主對象所發(fā)送過來的這個事件的消息?;蚴窃谀承┣闆r下能返回一個值來影響其它即將發(fā)生的事件該如何來處理。代理的主要價值是它可以讓你容易的定制各種對象的行為。注意這里的代理是個名詞,它本身是一個對象,這個對象是專門代表被代理對象來和程序中其他對象打交道的。</p><p> 5.3 IOS開發(fā)中的MVC模式</p><p> MVC:模型,視圖,控制器,是iOS
112、開發(fā)中用到的主要的設(shè)計模式。Model中處理邏輯與數(shù)據(jù),View展示應(yīng)用界面,接收用戶的操作,而Controller夾在View和Model中間,當(dāng)View接收到用戶操作,他將通知Controller,Controller會判斷采取什么樣的措施,Controller也負(fù)責(zé)將邏輯和數(shù)據(jù)處理交給Model完成,根據(jù)返回結(jié)果來更新View。Controller就像膠水,將兩個獨(dú)立的部分粘合在一起。</p><p>
113、Model和Controller之間可以通信,View和Controller之間可以通信,而View和Model之間是禁止通信的。</p><p> Controller可以通過直接訪問屬性、調(diào)用方法,來控制Model和View,向他們傳遞消息,對于Storyboard和XIB文件,上面的控件可以通過生成outlet來調(diào)用,如果直接代碼生成的話,就調(diào)用控件實(shí)例。</p><p> Co
114、ntroller必須實(shí)現(xiàn)View中所定義的target或者delegate方法,來實(shí)現(xiàn)View對Controller的回調(diào)。這樣,View就可以通知Controller自己的變化,以及用戶對View的操作。View還有data source方法,用于向Controller請求某些時刻需要顯式的數(shù)據(jù),比如UITableViewDataSource中,會在table view生成時,向Controller請求表格的行數(shù)和頁面上可見的單元格中
115、的內(nèi)容。</p><p> Model可以通過Notification和KVO的方式來通知Controller在Model中數(shù)據(jù)的改變。也可以使用delegate或者block來實(shí)現(xiàn),在AFNetworking中的網(wǎng)絡(luò)狀態(tài)變化通知,就是使用block來實(shí)現(xiàn)的。</p><p> 把所有的邏輯和數(shù)據(jù)都放到Model層中,Model就會變得很雜亂,所以我習(xí)慣把Model再細(xì)分:</p
116、><p> Service層,用于為Controller提供一些最直接的邏輯功能、數(shù)據(jù)封裝,并且管理下一層模塊,向下一層模塊請求數(shù)據(jù)。Controller只管理他所擁有的View,以及與他直接相關(guān)的Service類。</p><p> Manager層,用于管理一大類操作,比如:數(shù)據(jù)同步功能,寫一個數(shù)據(jù)同步的類,再類中處理網(wǎng)絡(luò)狀態(tài)判斷、緩存數(shù)據(jù)的讀寫以及緩存數(shù)據(jù)的發(fā)送,錯誤處理。Manag
117、er層位于Service層之下,接受Service的調(diào)度。</p><p> Handler層,用于實(shí)現(xiàn)具體的操作,如:FileHandler,用來處理文件存儲操作,將字符串或NSData數(shù)據(jù)轉(zhuǎn)換成文件并存放在指定路徑,以及一些多線程處理操作。Handler層接受Manager調(diào)度。</p><p> Model還有一些其它的部分:實(shí)現(xiàn)一些公共方法的Utility工具類,以及一些存儲數(shù)
118、據(jù)結(jié)構(gòu)的類。</p><p> 各個平級的層之間不允許互相調(diào)用,調(diào)用只能自上而下發(fā)生,回調(diào)都使用block來實(shí)現(xiàn)。這樣實(shí)現(xiàn),項(xiàng)目結(jié)構(gòu)看起來就清晰了許多。</p><p><b> 結(jié)束語</b></p><p> 本次畢業(yè)設(shè)計到此已經(jīng)順利結(jié)束,通過這次的畢業(yè)設(shè)計,我學(xué)到了很多。在以前的4年時間內(nèi)我學(xué)習(xí)了很多的課程及編程語言,雖然通過學(xué)習(xí)對
119、這些課程有所了解和掌握,但是始終處于理論知識的掌握階段,并沒有真正應(yīng)用于實(shí)踐設(shè)計開發(fā),所以對知識的掌握還不夠全面和熟練。而且并不能真正獨(dú)立的開發(fā)出一個完整的應(yīng)用于實(shí)際的軟件。通過這次的畢業(yè)設(shè)計,我已經(jīng)可以完成這一任務(wù),對自身的編程能力也有了很大的提高。這次開發(fā)的軟件是一款手機(jī)游戲,跟以往的PC端開發(fā)不一樣,我采用的自學(xué)的objective--C語言,它是一種兼容c和c++的語言,是c語言的超集。當(dāng)然在學(xué)習(xí)的過程中曾經(jīng)碰到過一些讓人頭痛的
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文--寶石對對碰
- 險種產(chǎn)品對對碰
- 俗語˙成語對對碰
- 軟件工程畢業(yè)論文-寶石對對碰的設(shè)計與實(shí)現(xiàn)
- 形狀對對碰—教案公開課
- 語言語言魔方對對碰(聽說游戲)
- 小班優(yōu)質(zhì)美術(shù)教案《顏色對對碰》
- 有趣女與無趣男的婚姻對對碰
- 職場對對碰之好下屬秘籍(doc_445頁)
- 小班音樂-碰一碰
- 熒光寶石及裝備寶石鑲嵌指南
- 寶石學(xué)與寶石鑒定論文
- 般寶石和少見寶石鑒定方法
- 水果搶鮮碰
- 小班健康教育教案《左腳右腳碰一碰》
- 淺析寶石充填工藝及充填寶石的鑒定
- 淺析寶石充填工藝及充填寶石的鑒定
- 寶石基礎(chǔ)復(fù)習(xí)
- 藍(lán)寶石鑒賞
- 寶石鑒定儀器
評論
0/150
提交評論