版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河北农业大学本科毕业论文(设计)题目:宝石对对碰摘要游戏设计的历史很悠久,几千年来,从最古老的非洲的Awari游戏,到现在最为优雅的游戏围棋,人们设计和玩过的游戏不计其数,许多游戏已经随着时间遗失在历史的长河中了。除了经典游戏之外,人们总是对新游戏感兴趣,因此一直有对新游戏设计的需求。手机游戏:指用户利用随身携带具有广域无线网络联机功能(GPRS或CDMA)的移动终端设备(手机),随时随地进行的游戏。简单说手机游戏是指运行于手机上的游戏软件。 本文介绍了手机游戏对对碰的开发过程。论文遵循软件工程的方法,详尽论述了从需求分析、系统分析、概要设计、详细设计、以及测试与调试的整个开发过程,总结了开发过程中的经验及本系统今后的改进方向。本系统开发成功后可以实现对对碰游戏的登陆,注册,以及游戏的娱乐功能。Xcode5.0开发工具,采用成熟的软件研制技术,后台数据库采用Sqlite3。关键词:对对碰,Xcode、Sqlite3AbstractGamedesignisalonghistory,thousandsofyears,fromthemostancientAfricaAwarigame,nowthemostelegantgame,chess,peopledesignandplaythegametoomanytocount,manygameshavethetimelostinthelongriverofhistory.Inadditiontotheclassicgame,peoplearealwaysinterestedinnewgame,sotherehasbeentothenewdemandofthegamedesign.Mobilephonegame:referstocarryawirelesswideareanetworkonlinefunctionusingtheuser(GPRSorCDMA)ofthemobileterminal(mobilephone),wheneverandwhereverpossiblethegame.Simplesaidmobilephonegameisrunningonthemobilephonegamesoftware.Thispaperintroducesthedevelopmentprocessofmobilephonegamesoncolliding.Methodsaccordingtothesoftwareengineering,discussedindetailfromthedemandanalysis,systemanalysis,outlinedesign,detaileddesign,andtestanddebugtheentiredevelopmentprocess,summeduptheimprovementdirectionoftheexperienceofthedevelopmentprocessofthesystemandfuture.Afterthesuccessofthesystemdevelopmentcanbeachievedonthepuzzlegamelanding,registration,andentertainmentfunction.Xcode5developmenttools,theuseofmaturesoftwaredevelopmenttechnology,back-enddatabaseusingSqlite3.Keywords:twoofakind,Xcode,Sqlite3目录1.绪论31.1课题背景31.2选题依据和研究意义31.3研究现状和发展态势42相关开发工具的技术简介42.1IOS开发技术52.2Xcode开发工具介绍62.3面向对象理论的介绍62.4SQLite的介绍73游戏分析与总体设计73.1游戏功能及规则描述73.2游戏流程分析83.2.1登陆模块93.2.2注册模块103.2.3主页模块113.2.4游戏模块124游戏界面实现134.1登陆界面134.2注册界面144.3主界面164.4游戏界面175核心代码实现和程序的设计模式175.1游戏规则的核心算法175.2IOS开发中的代理模式295.3IOS中的MVC设计模式306结束语317参考文献328致谢331.绪论1.1课题背景现在的移动电话是小型的计算机,它的处理能力与台式机的标准处理能力相比很有限,但是足够运行一个小型的游戏。
现在的手机的一个特性就是它们还是网络计算机,能够高速发送和接收数字数据。除了语音数据以外,它们还可以发送和接收其它类型的数据。所以类似《传奇》、《千年》这样的网络游戏也可以在手机上实现。
当然就处理能力和性能而言,当前阶段的支持Java的手机很接近第二代控制台游戏机、80年代中期的家用电脑和早期的手持游戏机。内存通常很有限--一般128KB到500KB--虽然有些智能手机比如Nokia3650有4MB内存。与PC相比,它们的输入和显示功能也很有限;小屏幕(许多仍然是黑白屏幕),为电话拨号优化的小键盘并不针对文本输入,以及有限的声音处理能力,中国电子游戏产业的发展,是从上个世纪的80年代末开始兴起的,市场展现过的有大型机游戏、家用游戏、掌机游戏、PC机游戏、动漫游戏、网络游戏、手机游戏等几大类游戏。80年代末是大型机游戏时代,主要经营游戏厅。90年初家用游戏和掌机游戏发展较快,主要产品面向家用。到了90年代中期,个人计算机普及很快,因此PC机游戏比较流行。随着网络技术的发展,从2000年开始盛行网络游戏。现在,网络游戏发展很快,是目前游戏产业中规模较大的一个种类。最近几年,手机游戏、动漫、卡通又开始迅速发展。游戏产业发展很快,游戏种类不断变化。1.2选题依据和研究意义作为运行于手持设备上的应用程序,手机的硬件特征决定了手机游戏的特点。那什么是手机游戏呢?相信大家都知道吧!手机游戏是指运行于手机上的游戏软件。目前用来编写手机最多的程序是Java语言,见J2ME。其次是C语言。
是的,就是如此,中国市场以及全球市场庞大的手机用户群,都为手机游戏的发展奠定了良好的基础。而现在手机本身硬件的发展,也为其支持多项游戏的运行提供了可靠的保障!(1)庞大的潜在用户群全球在使用的移动电话已经超过10亿部,而且这个数字每天都在不断增加。在除美国之外的各个发达国家,手机用户都比计算机用户多。手机游戏潜在的市场比其他任何平台,比如PlayStation和GameBoy都要大。
(2)便携性在控制台游戏时代,GameBoy热销的一个原因就是便携性——人们可以随时随地沉浸在自己喜欢的游戏中。和游戏控制台或者PC相比,手机虽然可能不是一个理想的游戏设备,但毕竟人们总是随时随身携带,这样手机游戏很可能成为人们消遣时间的首选。(3)支持网络因为手机是网络设备,在一定限制因素下可以实现多人在线游戏。现在腾讯的多款游戏、盛大的游戏都支持手机登陆的。是的,拥有这么大的市场前景和用户群体,手机游戏的迅猛发展是势不可挡的,接下来,都会有更多更好的网络游戏不断面世,相信对于广大的用户朋友来说都都是值得欣喜的!1.3研究现状和发展态势.在科技技术与互联网高速发展的社会中,手机游戏能够给人们带来随时随地的并具有广域无线网络联机功能的休闲互动娱乐体验,以获取在现实生活中的精神与娱乐上的享受,在某种程度上满足人们本身的希冀,是一种精神世界地释放。wsn中国行业咨询网_行业报告_行业分析_市场调研_第三方市场数据提供商wsn中国行业咨询网_行业报告_行业分析_市场调研_第三方市场数据提供商
近几年来,手机游戏快速发展的同时按内容可分为:角色扮演类、冒险类、格斗类、体育竞速类、电影改版类、棋牌类、益智类、模拟类。纷繁的手机游戏种类已成为人类线上娱乐生活的不可缺少的最主流载体而存在,各类智能手机伴随着PC网络游戏为基础、3G网络的不断强化为措施的条件下大力迅猛发展手机网络游戏。虽然手机游戏的用户越来越多,丰富多彩的游戏种类给玩家带来了更多的选择,但是我国的手机游戏行业的发展现状并不乐观,主要因素有:1)高质量游戏软件开发公司和人才的贫乏,导致无优秀游戏打人市场。2)游戏创意的匮乏。大多游戏都只是一味跟风,看到某个游戏成功赢得市场,便改换场景风格、人物造型、故事背景等,其游戏核心一沉不变的思维理念会使玩家产生审美疲劳。wsn中国行业咨询网_行业报告_行业分析_市场调研_第三方市场数据提供商wsn中国行业咨询网_行业报告_行业分析_市场调研_第三方市场数据提供商
随着手机游戏的商业模式进一步凸显,人们对手机的休闲娱乐功能需求越来越强烈,手机游戏已成为现代人们生活娱乐中必不可少的主流移动终端设备。游戏应用服务市场促使手机平台的不断提升而日新月异。据中咨网研究部调研显示,2012年底,我国手机游戏产业有了突飞猛进的发展,手机游戏使用用户比例高达到80%以上,市场规模超过16亿元人民币。在未来,游戏产品能否在市场中脱颖而出,一切取决于你能玩出什么花样来,这将激发更多的开发商和制作人员攻坚克难创造出高质量的作品,面对手机游戏自身的趣味性、易掌握性、可中断性、交互性,游戏厂商也将面临亘古未见的激烈竞争。由此可见,手机游戏已是人们日常生活中密不或缺的休闲娱乐方式。这强有力的促使具有朝阳产业的手机游戏行业朝着健康有序的方向大步前进。2相关技术的选用与介绍2.1IOS开发技术IOS是iPhone,iPodtouch以及iPad等设备的核心操作系统。IOS平台使用了构建MacOSX时积累的知识,IOSSDK提供了创建IOS应用程序所需要的环境和工具,利用IOSSDK开发应用时所用的编程语言是Objective-C。IOS平台开发工具和开发技术源于MacOSX,都是以UNIX为基础。IOS应用程序开发依赖于iPhone软件开发包(SDK),其中SDK继承与Xcode中。从整体上看,IOS扮演底层硬件和应用程序的中介。创建的应用程序不能直接访问硬件,而需要和系统接口进行交互。IOS实现可以看作多个层的集合,底层为所有程序提供基础服务,高层则包含一些复杂的服务和技术。Cocoatouch层提供了基本的系统行为支持,当需要实现更为复杂的行为和界面时,才考虑向下层探寻技术支持。UIKit框架:提供程序运行必须得关键对象,使APP能够捕获用户输入和在屏幕上显示内容。MapKit框架:IOS3.0引入该框架,可被嵌入到应用程序的地图界面,该框架包含一个可以滚动的地图视图。AddressBookUI框架:IOS3.0引入该框架,用于撰写电子邮件,并将其放入到用户的发件箱排队等候发送。MessageUI框架:显示创建或者编辑联系人的标准系统界面。Media层包含图形、音频、视频等技术。AVFoundation框架:用于播放和编辑复杂的音频和视频。CoreImage框架:包含高级图像和视频处理功能。如人脸识别和图像过滤功能。CoreGraphics框架:包含2D绘画和合成功能。MediaPlayer框架:提供典型的屏幕控件用于播放电影。QuartzCore框架:包含CoreAnimation接口。用于实现复杂的动画和视觉效果。Coreservice层用于访问较多低级的操作系统服务,如文件存取,联网和常见的数据对象类型。Foundation框架:为CoreFoundation框架的许多功能提供Objective-C封装。CoreFoundation框架:一组C语言的接口,为IOS应用程序提供基本数据管理和服务功能。CoreLocation框架:用于定位设备当前经纬度。SystemConfiguration:用于确定设备网络配置的当前状态。IOS开发限制介绍(1)平台间差异:iPhoneOS设备和台式机或笔记本电脑的开发的不同,也和桌面应用程序不同,需要意识到终端开发的特殊性。(2)屏幕大小的限制:由于iPhoneOS设备具有高分辨率的小型屏幕,在iPhone5之前设备都是3.5in,iPhone5以及iPhone5c,iPhone5s都是4.0in,在设计应用时需要注意不要放置非必要的元素。(3)内存限制:IOS的内存非常有限,避免分配超出设备的可用内存,不然应用程序将终止。当发生内存过低时,IOS系统将发出警告,需要进行及时清理内存。同时需要注意避免内存泄露。(4)窗口显示限制:在IOS环境上,用户每次只能看到单个窗口。多个窗口只能顺序访问和查看。(5)电量限制:iPhoneOS设备是通过电池供电,而高速运转的系统,大屏幕,上网或看电子书都会消耗电量。2.2Xcode开发工具介绍Xcode:IOS集成开发环境,也是编译器,负责管理应用程序工程。InterfaceBuilder:快速原型开发工具,可视化的组装用户UI接口的工具,集成在Xcode中。Instruments:功能强大的性能调试工具,以及内存分析工具。iPhoneSimulator:MacOSX平台应用程序,它是模拟应用程序,但不能完全模拟所有功能。IOSSDK:ISO软件开发工具包。2.3面向对象理论的介绍从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统)。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。三大特性:封装性:封装是一种信息隐藏技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能看见到对象的外特性(对象能接受哪些消息,具有哪些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。继承性:“继承”是面向对象软件技术当中的一个概念。如果一个类A继承自另一个类B,就把这个A称为“B的子类”,而把B称为“A的父类”。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。另外,为子类追加新的属性和方法也是常见的做法。多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的消息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。多态的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。类的多态性提供类方法的多样性,多态性有两种表示方式:重载和覆盖。2.4SQLite的介绍SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。至今已经有14个年头,SQLite也迎来了一个版本SQLite3已经发布。同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得有点象,但是事实上它们区别很大。比如SQLite支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。如果你是个很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,那么你可以考虑使用SQLite。到2013年10月17日最新版本是3.8.1。它的官方网站是:或者http://www.sqlite.com.cn,能在上面获得源代码和文档。同时因为数据库结构简单,系统源代码也不是很多,也适合想研究数据库系统开发的专业人士3游戏分析与总体设计3.1游戏功能及规则描述游戏在8×10格子的游戏池中进行。每个格子中有一个宝石的图片。鼠标连续选中两个相邻的图片,它们的位置会互换,互换后如果横排或竖排有3个以上相同的头像,则可以消去该头像,并得分。
基本规则
交换
玩家选中相邻(横、竖)的两个图片,则这两个图片的位置发生互换,如果互换成功则消去图片,否则位置交换。
消去
玩家选择两个宝石的图片进行位置互换,互换后如果横排或竖排有3个以上相同的宝石的图片,则消去这几个相同的宝石的图片,如果互换后没有可以消去的宝石的图片,则换位置。消去后的空格由上面的宝石的图片掉下来补齐。每次消去宝石的图片玩家都能得到一定的分数。
连锁
玩家消去宝石的图片后,上面的头像掉下来补充空格。如果这时游戏池中有连续摆放(横、竖)的3个或3个以上相同的宝石的图片,则可以消去这些头像,这就是一次连锁。空格被新的宝石的图片填充,又可以进行下一次连锁。每次连锁会有加分。
3.2游戏流程分析3.2.1登陆模块是否是3.2.2注册模块是否是否否是3.2.3主页模块3.2.4游戏模块是否是否4游戏界面实现4.1登陆界面4.2注册界面4.3主界面4.4游戏界面最上面记录玩家的昵称,当前得分,以及最高分,点击返回,到上一个界面。5核心代码实现和程序的设计模式5.1游戏规则的核心算法-(void)distributeStoneType{if(!_isReloading){for(inti=0;i<KRow;i++)for(intj=0;j<KCol;j++){_stoneType[i][j]=arc4random()%KStoneTypeNumber;if(j>0&&i>0){while(_stoneType[i][j]==_stoneType[i][j-1]||_stoneType[i][j]==_stoneType[i-1][j]){_stoneType[i][j]=arc4random()%KStoneTypeNumber;}continue;}if(i>0){while(_stoneType[i][j]==_stoneType[i-1][j]){_stoneType[i][j]=arc4random()%KStoneTypeNumber;}continue;}if(j>0){while(_stoneType[i][j]==_stoneType[i][j-1]){_stoneType[i][j]=arc4random()%KStoneTypeNumber;}continue;}}}else{_scoreLab.text=[NSStringstringWithFormat:@"Score:%@",_player.lastScore];NSLog(@"读取游戏进度:%@",_player.gameProcess);NSArray*arr=[_player.gameProcesscomponentsSeparatedByString:@"|"];for(inti=0;i<KRow;i++)for(intj=0;j<KCol;j++){NSIntegernum=i*KCol+j;NSString*score=[arrobjectAtIndex:num];_stoneType[i][j]=[scoreintegerValue];}}}//宝石按钮-(void)createStoneBtn{for(inti=0;i<KRow;i++)for(intj=0;j<KCol;j++){StoneBtnModel*model=[[StoneBtnModelalloc]init];UIButton*btn=[UIButtonbuttonWithType:UIButtonTypeCustom];btn.tag=KStoneImageButtonTag+i*KCol+j;model.stoneType=_stoneType[i][j];model.stoneRow=i;model.stoneCol=j;UIImage*image=[[BuildingStoneViewshareStoneView]getStoneImageWith:model.stoneType];btn.frame=CGRectMake(KStoneImageOriginX+KBackViewHeight*j,KStoneImageOriginY+i*KBackViewHeight,KImageWidth,KImageHeight);[btnsetImage:imageforState:UIControlStateNormal];[btnaddTarget:selfaction:@selector(StoneImageBtnClicked:)forControlEvents:UIControlEventTouchUpInside];model.stoneBtn=btn;model.btnTag=btn.tag;[_stoneBtnArraddObject:model];}}}-(void)exchangeStone:(NSInteger)tag1withTag:(NSInteger)tag2{StoneBtnModel*model1=[_stoneBtnArrobjectAtIndex:tag1-KStoneImageButtonTag];StoneBtnModel*model2=[_stoneBtnArrobjectAtIndex:tag2-KStoneImageButtonTag];UIButton*btn1=model1.stoneBtn;UIButton*btn2=model2.stoneBtn;//frame交换CGRectrect=btn1.frame;btn1.frame=btn2.frame;btn2.frame=rect//按钮tag交换btn1.tag=model2.btnTag;btn2.tag=model1.btnTag;NSIntegertype=model1.stoneType;model1.stoneType=model2.stoneType;model2.stoneType=type;model1.stoneBtn=btn2;model2.stoneBtn=btn1;[selfperformSelector:@selector(judgeIsThreeInLine)withObject:nilafterDelay:KTimeCheckDelay];}//判断是否可以交换-(void)isExchangeTag:(NSInteger)tag1withTag:(NSInteger)tag2{_isEXchange=NO;StoneBtnModel*model1=[_stoneBtnArrobjectAtIndex:tag1-KStoneImageButtonTag];StoneBtnModel*model2=[_stoneBtnArrobjectAtIndex:tag2-KStoneImageButtonTag];NSIntegerrow=model1.stoneRow;NSIntegercol=model1.stoneCol;NSIntegerrow2=model2.stoneRow;NSIntegercol2=model2.stoneCol;if((1==fabsf(row-row2)&&col==col2)||(1==fabsf(col-col2)&&row==row2)){_isEXchange=YES;}_firstSelectedStone=0;_secondSelectedStone=0;NSLog(@"_isExchange:%d",_isEXchange);if(_isEXchange){_isEXchange=NO;[selfexchangeStone:tag1withTag:tag2];}}#pragmamarkJudegThreeStoneIsInLine//每行是否有三个相同类型宝石在一条线上-(void)judgeIsThreeInARow{NSLog(@"judgeIsThreeInARow");NSMutableArray*stone=[[NSMutableArrayalloc]init];for(introw=0;row<KRow;row++)for(intcol=0;col<KCol-2;col++){NSIntegertype=[selfgetStoneTypeWithTag:KStoneImageButtonTag+row*KCol+col]if(type==KStoneTypeBlank){continue;}[stoneremoveAllObjects];NSIntegeri=0;NSIntegertag=KStoneImageButtonTag+row*KCol+col+i;while(type==[selfgetStoneTypeWithTag:tag]&&col+i<KCol){[stoneaddObject:[selfgetStoneBtnModelWithTag:tag]];i++;tag=KStoneImageButtonTag+row*KCol+col+i;}if(stone.count>2){NSLog(@"有三个宝石连续共线!");[_stoneInLineSetaddObjectsFromArray:stone];col+=stone.count;}}}//从视图上移除宝石-(void)deleteStoneWithStoneArr:(NSSet*)stoneArr{NSLog(@"移除宝石!");for(StoneBtnModel*modelinstoneArr){if(model.stoneType==KStoneTypeBlank){continue;}UIButton*btn=model.stoneBtn;//NSLog(@"deleteStoneBtn:%d",btn.tag);model.stoneType=KStoneTypeBlank;[btnremoveFromSuperview];}//得分[selfgetScoreWithStoneNumber:[stoneArrcount]];//刷新NSSet*set=[[NSSetalloc]initWithSet:_stoneInLineSet];[selfrefreshMapWithSet:setwithType:5];}//刷新地图-(void)refreshMapWithSet:(NSSet*)arrwithType:(NSInteger)type{NSMutableArray*tempStoneArr=[[NSMutableArrayalloc]init];for(StoneBtnModel*modelinarr){if(model.stoneType!=KStoneTypeBlank){continue;}[tempStoneArrremoveAllObjects];//得到空宝石上方不为空的宝石实例[tempStoneArraddObjectsFromArray:[selfgetColStoneWithCol:model.stoneCol]];[selfrefreshMapInCol:tempStoneArrwithCol:model.stoneCol];}//交换完毕延时检测,让宝石落到位置[selfperformSelector:@selector(judgeIsThreeInLine)withObject:nilafterDelay:KTimeCheckDelay];}-(void)getScoreWithStoneNumber:(NSInteger)number{number-=3;NSIntegerscore=25*number*(number+1)+100;_currentScore+=score;NSLog(@"消除%d个宝石,得分:%d当前得分:%d",number+3,score,_currentScore);NSString*str=[NSStringstringWithFormat:@"Score:%d",_currentScore];_scoreLab.text=str;[selfrefreshMaxScoreWith:_currentScore];}-(void)StoneImageBtnClicked:(UIButton*)btn{if(0==_firstSelectedStone){_firstSelectedStone=btn.tag;[selfcustomAnimations];}else{_secondSelectedStone=btn.tag;[_timerinvalidate];[selfisExchangeTag:_firstSelectedStonewithTag:_secondSelectedStone];}}5.2IOS开发中的代理模式代理是一种简单而功能强大的设计模式,这种模式用于一个对象“代表”另外一个对象和程序中其他的对象进行交互。主对象(这里指的是delegatingobject)中维护一个代理(delegate)的引用并且在合适的时候向这个代理发送消息。这个消息通知“代理”主对象即将处理或是已经处理完了某一个事件。这个代理可以通过更新自己或是其它对象的UI界面或是其它状态来响应主对象所发送过来的这个事件的消息。或是在某些情况下能返回一个值来影响其它即将发生的事件该如何来处理。代理的主要价值是它可以让你容易的定制各种对象的行为。注意这里的代理是个名词,它本身是一个对象,这个对象是专门代表被代理对象来和程序中其他对象打交道的。5.3IOS开发中的MVC模式MVC:模型,视图,控制器,是iOS开发中用到的主要的设计模式。Model中处理逻辑与数据,View展示应用界面,接收用户的操作,而Controller夹在View和Model中间,当View接收到用户操作,他将通知Controller,Controller会判断采取什么样的措施,Controller也负责将逻辑和数据处理交给Model完成,根据返回结果来更新View。Controller就像胶水,将两个独立的部分粘合在一起。Model和Controller之间可以通信,View和Controller之间可以通信,而View和Model之间是禁止通信的。Controller可以通过直接访问属性、调用方法,来控制Model和View,向他们传递消息,对于Storyboard和XIB文件,上面的控件可以通过生成outlet来调用,如果直接代码生成的话,就调用控件实例。Controller必须实现View中所定义的target或者delegate方法,来实现View对Controller的回调。这样,View就可以通知Controller自己的变化,以及用户对View的操作。View还有datasource方法,用于向Controller请求某些时刻需要显式的数据,比如UITableViewDataSource中,会在tableview生成时,向Controller请求表格的行数和页面上可见的单元格中的内容。Model可以通过Notification和KVO的方式来通知Controller在Model中数据的改变。也可以使用delegate或者block来实现,在AFNetworking中的网络状态变化通知,就是使用block来实现的。把所有的逻辑和数据都放到Model层中,Model就会变得很杂乱,所以我习惯把Model再细分:Service层,用于为Controller提供一些最直接的逻辑功能、数据封装,并且管理下一层模块,向下一层模块请求数据。Controller只管理他所拥有的View,以及与他直接相关的Service类。Manager层,用于管理一大类操作,比如:数据同步功能,写一个数据同步的类,再类中处理网络状态判断、缓存数据的读写以及缓存数据的发送,错误处理。Manager层位于Service层之下,接受Service的调度。Handler层,用于实现具体的操作,如:FileHandler,用来处理文件存储操作,将字符串或NSData数据转换成文件并存放在指定路径,以及一些多线程处理操作。Handler层接受Manager调度。Model还有一些其它的部分:实现一些公共方法的Utility工具类,以及一些存储数据结构的类。各个平级的层之间不允许互相调用,调用只能自上而下发生,回调都使用block来实现。这样实现,项目结构看起来就清晰了许多。结束语本次毕业设计到此已经顺利结束,通过这次的毕业设计,我学到了很多。在以前的4年时间内我学习了很多的课程及编程语言,虽然通过学习对这些课程有所了解和掌握,但是始终处于理论知识的掌握阶段,并没有真正应用于实践设计开发,所以对知识的掌握还不够全面和熟练。而且并不能真正独立的开发出一个完整的应用于实际的软件。通过这次的毕业设计,我已经可以完成这一任务,对自身的编程能力也有了很大的提高。这次开发的软件是一款手机游戏,跟以往的PC端开发不一样,我采用的自学的objective--C语言,它是一种兼容c和c++的语言,是c语言的超集。当然在学习的过程中曾经碰到过一些让人头痛的问题,我都一一解决了,直到游戏全部完成,也让我在解决问题方面的能力得到了提高。整个开发的过程对我来说是一次能力的真正提高的过程;是一次将理论应用于实践的过程;是将以前所学知识充分利用的过程,比如信息管理,数据库等等;是一次真正的实践过程。总体说来,在这次长达一个学期的毕业设计中,我真正学到了很多有用的东西,是一些在课堂内所学不到的知识,收获很大。参考文献[1]徐松林,黄猛著.cocos2D-x手机游戏开发[M].北京:人民邮电出版社.[2]Ronpatton(美)著.王钰,曹跃译.软件测试[M].北京:机械工业出版社,2006:4.[3]王水著.软件工程[M].河南:河南科学技术出版社,2008:8.[4]吴洁明著.软件工程实例教程[M].北京:清华大学出版社,2010:11.[5]郭东恩著.数据库原理及应用[M].河南:河南科学技术出版社,2008:4.[6]DanPilone著.HeadFirstiPhoneDevelopment[M].北京:东南大学出版社,2012:[7]萨丹著.iPhone开发秘籍[M].北京:人民邮电出版社,2010:1.[8]王志刚.编著应用程序开发攻略之iPhone特色传感器应用[M].北京:电子工业出版社,2011:2.[9]GeneBacklin(美)著.岳红凌冲译.iPhone&iPad高级编程[M].北京:清华大学出版社,2012:1.[10]Wei-MengLee(美)著.张龙译.IOS4编程入门经典[M].北京:清华大学出版社,2012:1.致谢这是一个特殊的时刻,是一个值得纪念的时刻。此时此刻,短暂的毕业设计就要画上句点,人生中的大学时光也即将画上句号。心中的感受复杂交错,有即将毕业的兴奋、有毕设完成的轻松感、也有对大学时光的恋恋不舍。在此论文即将完成之时,首先我要特别感谢我的指导老师张璠老师!谢谢老师给予我悉心的关怀与指导。记得第一次见到老师时,立刻体会到了一种亲近的感觉。老师认真负责的工作态度、严谨的治学风格、亲切平易近人的性格,使我深受启发,内心许多次都在感激我能在大学最后的时光遇到了张璠老师。正是在老师的督促和耐心的指导下,才让我将毕设各方面的工作完成得最好。其次,也感谢院系各级领导对我的关心,为我提供了舒适的工作、学习环境。最后,感谢同学们在开发的期间,给我的无私的帮助。曾经遇到过很多疑难,正是与同学们的相互探讨使我获益匪浅,才能让我继续前进的脚步。短短几个月时间内,除了学会了基本数据库应用系统地开发外,更重要的是学到了兢兢业业,奋发向上的精神!这种精神将是我今后人生前进道路上的一种力量,所以我再次衷心地感谢老师和我的同学们,谢谢你们了。目录TOC\o"1-2"\h\u253321总论 1311911.1项目概况 1317891.2建设单位概况 3162241.3项目提出的理由与过程 3311231.4可行性研究报告编制依据 4225921.5可行性研究报告编制原则 426521.6可行性研究范围 5265791.7结论与建议 665262项目建设背景和必要性 9302042.1项目区基本状况 9237942.2项目背景 11327472.3项目建设的必要性 11265903市场分析 14297233.1物流园区的发展概况 1479553.2市场供求现状 1669963.3目标市场定位 17108883.4市场竞争力分析
17160544项目选址和建设条件 1950564.1选址原则 1969314.2项目选址 19544.3场址所在位置现状 19297334.4建设条件 20123545主要功能和建设规模 22282555.1主要功能 22281835.2建设规模及内容 26195696工程建设方案 27137726.1设计依据 27219396.2物流空间布局的要求 27262516.3空间布局原则 2853886.4总体布局 2936766.5工程建设方案 30235856.6给水工程 33115596.7排水工程 3553126.8电力工程 38288986.9供热工程 46314656.10电讯工程 47153607工艺技术和设备方案 51276227.1物流技术方案 5142607.2制冷工艺技术方案 6769868节能方案分析 73HYPERLINK\l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区物业服务规范手册
- 地质实验员节假日后复工安全考核试卷含答案
- 堆垛车操作工春节假期安全告知书
- 乡医考试试题及答案
- 套筒卷制工春节假期安全告知书
- 企业信息安全防护操作手册
- 船体装配工春节假期安全告知书
- 己二腈装置操作工春节假期安全告知书
- 化妆培训课件制作教程图
- 肿瘤消融培训班考试试题及答案
- 2025年湖南省中考语文试卷真题及答案详解(精校打印版)
- 非遗技艺传承活动策划与实施
- 足浴店老板与技师免责协议
- GB/T 45494-2025项目、项目群和项目组合管理背景和概念
- 票务服务合同协议
- 二零二五版医院物业管理服务合同标准范例
- 2025下半年中学教师资格证英语《学科知识与教学能力》真题卷(带答案)
- 渔获物船上保鲜技术规范(DB3309-T 2004-2024)
- 东北大学2015年招生简章
- 资金管理办法实施细则模版(2篇)
- IATF16949-质量手册(过程方法无删减版)
评论
0/150
提交评论