已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
期末设计(论文) 题 目 基于Android的 方块世界设计与实现 专 业 移动互联网应用 班 级 移动 1401 学 号 2014064146 姓 名 赵绍良 指导教师 程舒通 2016 年 6 月 5 日 1杭州科技职业技术学院信息工程学院毕业设计(论文)杭州科技职业技术学院毕业设计任务书学生姓名赵绍良专业班级移动 1401联系方导老师程舒通指导老师职称副教授联系方题名称基于Android的方块世界设计与实现课题任务要求一、设计的技术要求(或论文的主要内容):1.Android多媒体框架动态,包括Service、多线程等。2.UI设计与制作,包括动态界面布局,ListView控件等。3.对应音频文件播放成功。4.界面的制作美观。二、实施操作的技能要求:1.UI设计:游戏界面,背景图,游戏提示等!2.后台设计:通过游戏时间和积分对游戏进程进行不同的界面!三、时间安排与要求:1. 2016.6.12016.6.3 准备阶段,收集材料,项目需求分析,完成任务书。2. 2016.6.32016.6.4 对游戏界面进行设计并开始代码编写。3. 2016.6.42016.6.5 完成游戏代码并对照答辩文档进行修改 3. 2016.6.52016.6.6 熟悉程序及文档内容,准备答辩! 专业团队审批意见 专业负责人(签字) 年 月 日学院审批意见分管院长(签字) 年 月 日指导教师(签字) 年 月 日2基于Android的方块世界设计与实现【摘要】 Android是一个开源的系统,它底层是基于Linux的操作系统,本论文的方块世界采用了Android开源系统技术,利用Java语言和Eclipse编辑工具对游戏进行编写。本文以Android开发平台为基础,首先简要的介绍了安卓平台发展历程,以及当前国内外的发展现状。然后对基于Android平台的方块世界系统做了一个可行性分析。再详细介绍了Android开发平台的开发环境组建,最后交待了方块世界的详细设计。结合基于安卓平台的开发与设计的特点。此次的方块世界要分为两块来设计,一块是窗口的设计,主要定义窗口的属性和窗之间的联系;另一块是实现功能,结合当前的Android知识和java知识对游戏功能进行实现并运行!【关键词】方块世界 android 基于安卓平台的开发与设计3目 录引 言5第一章 设计任务分析61.1课题名称61.2项目的背景61.3当前国内外的发展现状61.4可行性分析6第二章 ANDROID开发环境72.1 系统框架72.1.1应用程序72.1.2应用程序框架72.1.3系统运行库72.2 应用组建72.2.1活动72.2.2服务8第三章 方块世界的预想设计83.1 界面设计83.2界面设计模块功能9第四章 项目实现94.1 欢迎界面错误!未定义书签。4.1.1页面设计错误!未定义书签。4.1.2代码实现错误!未定义书签。第五章 项目测试19结 论22致 谢23参考文献244引 言Andy Rubin创立了两个手机操作系统公司:Danger和Android。Danger 5亿美元卖给微软,2005年成为了Kin,Android4千万美元卖给Google。 Android是Google于2007年11月05日宣布的基于Linux平台的开源移动操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层(Software Stack,又名软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C+开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。在优势方面,Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,如同从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。Android平台为我们提供了如此方便的环境,因此我们很容易将此款基于Android的方块世界的游戏出来,这歀游戏必能顺应时代,符合一些人的风格,让那些喜欢它的人依赖于它,带给他们快乐。55第一章 设计任务分析1.1课题名称基于Android的方块世界设计与实现1.2项目的背景随着手机市场的快速发展,各种手机游戏普片存在于广大手机用户的手机之上,游戏已成为手机用户不可或缺的一部分。而基于手机内存的问题,用户不得不卸载那些占用空间的,运行慢的软件。于是乎小巧灵动的软件便成为广大用户优先的选择。本游戏便是以小来吸引客户使用的,无论是运行,体积等都已小巧为主!一定等引来广大用户下载使用的!1.3当前国内外的发展现状随着科技的快速发展,游戏已成为人们打发、消磨时间及娱乐必备的存爱。游戏市场可谓是广而又广!而市场的需求却已饱满!优化软件。减小内存等必将盛行!由于Android基于Linux内核且具有开源、免费的特性,为游戏开发和优化提升提供了便利条件。所以小巧实用的软件必然可行!1.4可行性分析技术可行性现在智能手机的迅速发展,用户对手机的软件功能要求越来越高,由于该项目基于Android平台开发的方块世界游戏,所以采用Eclipse为软件工具,以Java语言为基础。当然还得用到一些图片的处理,例如图形处理软件PhotoShop等等,多参考一些Android播放器类的资料。最好设计出一个具有美好的界面和良好的功能的游戏,去满足大多数用户的需求。经济可行性随着中国国民经济的高速发展和信息化进程的快速推进,各行各业对软件产品的迫切需求以及软件外包业务的急剧扩大,为软件行业的发展提供了庞大的市场。加上国外对中国急需的软件的禁运和限制,就是我们认识到必须依靠自己的力量来发展中国的软件产业,以满足国民经济建设的需要。发展软件产业以成为全社会的迫切需求。第2章 Android开发环境2.1 系统框架2.1.1应用程序Android会同一系列核心应用程序包一起发布,该应用程序包包括客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。2.1.2应用程序框架开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统, 其中包括:丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(Lists),网格(Grids),文本框(Text boxes),按钮(Buttons), 甚至可嵌入的web浏览器。内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件。通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。2.1.3系统运行库Android 包含一些C/C+库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:系统 C 库 - 一个从BSD继承来的标准C系统函数库 Libc ), 它是专门为基于Embedded linux的设备定制的。媒体库 - 基于PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合。LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。2.2 应用组建2.2.1活动Android 中,Activity是所有程序的根本,所有程序的流程都运行在Activity 之中,Activity可以算是开发者遇到的最频繁,也是Android 当中最基本的模块之一。在Android的程序当中,Activity 一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么Activity就相当于一个网页。在Activity 当中可以添加一些Button、Check box 等控件。可以看到Activity 概念和网页的概念相当类似。一般一个Android 应用是由多个Activity 组成的。这多个Activity 之间Android的应用可以进行相互跳转,例如,按下一个Button按钮后,可能会跳转到其他的Activity。和网页跳转稍微有些不一样的是,Activity 之间的跳转有可能返回值,例如,从Activity A 跳转到Activity B,那么当Activity B 运行结束的时候,有可能会给Activity A 一个返回值。这样做在很多时候是相当方便的。当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。可以选择性的移除一些没有必要保留的屏幕,因为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。2.2.2服务Service 是android 系统中的一种组件,它跟Activity 的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service 是没有界面的长生命周期的代码。Service是一种程序,它可以运行很长时间,但是它却没有用户界面。这么说有点枯燥,来看个例子。打开一个音乐播放器的程序,这个时候若想上网了,那么,打开Android浏览器,这个时候虽然已经进入了浏览器这个程序,但是,歌曲播放并没有停止,而是在后台继续一首接着一首的播放。其实这个播放就是由播放音乐的Service进行控制。当然这个播放音乐的Service也可以停止,例如,当播放列表里边的歌曲都结束,或者用户按下了停止音乐播放的快捷键等。Service 可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD 卡上文件的变化,再或者在后台记录地理信息位置的改变等等,总之服务嘛,总是藏在后头的。第三章 方块世界的预想设计3.1 界面设计针对方块世界的游戏及功能的分析,对界面进行设计: 图3-1 界面设计预想图 这就是主界面预想图。3.2界面设计模块功能 图片:作为游戏的背景图,需要考虑到光线及图大小。左键:向左移动游戏图标右键:向右移动游戏图标上键:改变游戏图标形状下键:移动游戏图标到可移动的最下方第4章 项目实现 4.1 游戏界面图4.1.11游戏界面游戏界面:其布局主要就是控件的布局 Button android:layout_width=wrap_content android:layout_height=wrap_content android:i 提示界面:这里就是几个文本框图4.1.11提示界面 4.1.2代码实现 4.1.2-1删除行public void rowDelete()int deleteCount=0;int deletescore=0;for(int i=0;iheight_count;i+)int count=0;for(int j=0;j0;m-)for(int n=0;nwidth_count;n+)unit_Statusnm=unit_Statusnm-1;int scoreNum=score.getScoreNum();for(int k=0;k0)OnLoadscore.OnLoadscores(scoreNum+deletescore*10); 4.1.2-2定时下降public void Down_ontime()/isNewmoveStart_temp记录下 是否为新开始 (在loadMoveData()后isNewmoveStart会改变)boolean isNewmoveStart_temp=isNewmoveStart;loadMoveData();int MovePositon_x=constant.getMovePositon_x();int MovePositon_y=constant.getMovePositon_y();if(isIllegal(MovePositon_x,MovePositon_y+1)=true)/if(isNewmoveStart_temp=false)constant.setMovePositon_x(MovePositon_x);constant.setMovePositon_y(MovePositon_y+1);elsefor(int i=0;iconstant.getMoveunit_count();i+)for(int j=0;jconstant.getMoveunit_count();j+)int i_x=i+MovePositon_x;int j_y=j+MovePositon_y;boolean movestatus=moveunit_Statusij;if(j_y0)continue;if(movestatus=true)unit_Statusi_xj_y=true;isNewmoveStart=true;rowDelete();/判断是否结束if(isGameOver()=true)GameOver.OnGameOver(0);constant.resetMovePosition();4.1.2-3形状的移动及变形public void Change_press()changeMoveData();/下键public void Down_press()int MovePositon_x=constant.getMovePositon_x();int MovePositon_y=constant.getMovePositon_y();int cols=downLogical(moveunit_Status,MovePositon_x,MovePositon_y);/未得到正确结果if(cols=-1)return;for(int i=0;iconstant.getMoveunit_count();i+)for(int j=0;jconstant.getMoveunit_count();j+)int i_x=i+MovePositon_x;int j_y=j+MovePositon_y+cols;boolean movestatus=moveunit_Statusij;if(j_y0)continue;if(movestatus=true)unit_Statusi_xj_y=true;isNewmoveStart=true;rowDelete();if(isGameOver()=true)Log.d(gameoverQ,over);constant.resetMovePosition();loadMoveData();private boolean isIllegal(int position_x,int position_y)boolean illegal=true;for(int i=0;iconstant.getMoveunit_count();i+)for(int j=0;jconstant.getMoveunit_count();j+)int i_x=i+position_x;int j_y=j+position_y;boolean movestatus=moveunit_Statusij;if(movestatus=true)if(i_x(constant.getWidth_count()-1)|j_y(constant.getHeight_count()-1)return false;/if 纵坐标小于0 继续循环if(j_y0)continue;if(unit_Statusi_xj_y=true)return false;return illegal;/是否能变形private boolean isChange(boolean moveunit_Statusm,int position_x,int position_y)boolean illegal=true;for(int i=0;iconstant.getMoveunit_count();i+)for(int j=0;jconstant.getMoveunit_count();j+)int i_x=i+position_x;int j_y=j+position_y;boolean movestatus=moveunit_Statusij;if(movestatus=true)if(i_x(constant.getWidth_count()-1)|j_y(constant.getHeight_count()-1)continue;if(unit_Statusi_xj_y=true)return false;return illegal;/变形时的 边界调整private void borderDetect_change(boolean moveunit_Status,int position_x,int position_y)int leftMax=0;int rightMax=constant.getMoveunit_count();int topMax=0;int bottomMax=0;for(int i=0;iconstant.getMoveunit_count();i+)for(int j=0;jconstant.getMoveunit_count();j+)int i_x=i+position_x;int j_y=j+position_y;boolean movestatus=moveunit_Statusij;if(movestatus=true)/左边界判断if(i_x0)if(leftMaxconstant.getWidth_count()-1)if(rightMax=i)rightMax=i;/int x=constant.getMovePositon_x()-i_x;constant.setMovePositon_x(position_x-(constant.getMoveunit_count()-i);/返回需要 停止的行private int downLogical(boolean moveunit_Status,int position_x,int position_y)for(int k=0;kheight_count;k+)for(int i=0;iconstant.getMoveunit_count();i+)for(int j=0;j(constant.getHeight_count()-1)return k-1;/if 纵坐标小于0 继续循环if(j_y0)continue;if(unit_Statusi_xj_y=true)return k-1;return -1;private boolean isGameOver()boolean isover=false;for(int i=0;iconstant.getWidth_count();i+)isover= unit_Statusi0;if(isover=true)return true;return false;private void changeMoveData()/int Shape_count=constant.getShapes_count().get(shapeall_index);int Shape_count=constant.getShapes_count().get(shapeArrayIndex_Now.getShapeall_index();/*int index_temp=shape_index;if(shape_index=Shape_count-1)shape_index=0;else if(shape_indexShape_count-1)shape_index+;*/int index_temp=shapeArrayIndex_Now.getShape_index();if(index_temp=Shape_count-1)shapeArrayIndex_Now.setShape_index(0);else if(index_tempShape_count-1)shapeArrayIndex_Now.setShape_index(index_temp+1);moveunit_Status=ListMove_Data.get(shapeArrayIndex_Now.getShapeall_index().get(shapeArrayIndex_Now.getShape_index();/不能改变 则保持原来的索引if(isChange(moveunit_Status,constant.getMovePositon_x(),constant.getMovePositon_y()=false)moveunit_Status=ListMove_Data.get(shapeArrayIndex_Now.getShapeall_index().get(index_temp);elseborderDetect_change(moveunit_Status,constant.getMovePositon_x(),constant.getMovePositon_y();constant.setMoveunit_Status(moveunit_Status); private void loadMoveData() if(isNewmoveStart=true)isNewmoveStart=false;4.1.2-4 形状的产生改变/如果是第一次 则自动产生形状if(isLoadMoveDatafirsttime=true)isLoadMoveDatafirsttime=false;/isNewmoveStart=false;/随机获取数据int shapeAll_count=constant.getShapeAll_count();shapeArrayIndex_Now.setShapeall_index(int) (Math.random()*shapeAll_count);int Shape_count=constant.getShapes_count().get(shapeArrayIndex_Now.getShapeall_index();shapeArrayIndex_Now.setShape_index(int) (Math.random()*Shape_count);moveunit_Status=ListMove_Data.get(shapeArrayIndex_Now.getShapeall_index().get(shapeArrayIndex_Now.getShape_index();/*shapeArrayIndex_Now.setShape_index(1);shapeArrayIndex_Now.setShapeall_index(4);moveunit_Status=ListMove_Data.get(4).get(1);*/constant.setMoveunit_Status(moveunit_Status) ;beginMovePotion(moveunit_Status);elseshapeArrayIndex_Now.setShape_index(ShapeArrayIndex_Next.getShape_index();shapeArrayIndex_Now.setShapeall_index(ShapeArrayIndex_Next.getShapeall_index();moveunit_Status=ListMove_Data.get(shapeArrayIndex_Now.getShapeall_index().get(shapeArrayIndex_Now.getShape_index();constant.setMoveunit_Status(moveunit_Status) ;beginMovePotion(moveunit_Status);/产生下一个形状/随机获取数据int shapeAll_count=constant.getShapeAll_count();ShapeArrayIndex_Next.setShapeall_index(int) (Math.random()*shapeAll_count);int Shape_count=constant.getShapes_count().get(ShapeArrayIndex_Next.getShapeall_index();ShapeArrayIndex_Next.setShape_index(int) (Math.random()*Shape_count);/moveunit_Status=ListMove_Data.get(ShapeArrayIndex_Next.getShapeall_index().get(ShapeArrayIndex_Next.getShape_index(); 4.1.2-5形状开始时的移动位置坐标private void beginMovePotion(boolean moveunit_Status)/*for(int i=0;iconstant.getMoveunit_count();i+)for(int j=0;jconstant.getMoveunit_count();j+)boolean movestatus=moveunit_Statusij;if(movestatus=true)int movenum=constant.getMoveunit_count()-j;constant.setMovePositon_y(-movenum);return;*/*public static Logical getInstance(Context context) if (instance = null) instance = new Logical(context);return instance;return instance;*/加分回调private OnLoadscoreListener OnLoadscore;public void setLoadscoreLintener(OnLoadscoreListener listener)OnLoadscore = listener;public interface OnLoadscoreListenerpublic void OnLoadscores(int score);/结束回调private OnGameOverListener GameOver;public void setGameOverLintener(OnGameOverListener listener)GameOver = listener;public interface OnGameOverListenerpublic void OnGameOver(int GameOverTyp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 竞争与合作演讲稿7篇
- 2026年高层建筑护栏施工合同三篇
- 肾动脉狭窄支架术前后BNP浓度变化:洞察其临床意义与医学价值
- 肺鳞癌患者手术与化疗前后血清CYFRA21 - 1水平动态变化及其临床价值深度剖析
- 肺血栓栓塞患者的临床特征、预后影响因素及生活质量研究
- 肺癌组织中胰岛素α受体与β受体表达特征及其临床意义探究
- 肺动脉血栓栓塞:精准影像诊断与介入疗效多维评价
- 肢体缺血预处理对兔肝脏延迟性保护作用及潜在机制探究
- 股骨粗隆间骨折治疗中髓外与髓内固定系统的疗效对比与选择策略探究
- 股权视角下机构投资者持股对A股上市公司业绩的影响探究
- 核酸扩增检测实验室设计及工作流程
- 幼儿园教师防欺凌培训内容
- 石油钻井井电方案
- 得每通产品培训2015品牌版
- 青海省循化县谢坑铜金矿(二、四釆区)矿山地质环境保护与土地复垦方案
- FANUC O加工中心编程说明书
- 滕王阁序注音全文打印版
- GB/T 6451-2015油浸式电力变压器技术参数和要求
- 2023高中学业水平合格性考试历史重点知识点归纳总结(复习必背)
- Unit4 写作课 A Funny Story教案-高中英语北师大版(2019)选择性必修第二册
- 果树学实验-主要果实类型与构造认识解答课件
评论
0/150
提交评论