移动设备应用程序开发大作业(共17页).doc

上传人:飞****2 文档编号:16689177 上传时间:2022-05-18 格式:DOC 页数:17 大小:754KB
返回 下载 相关 举报
移动设备应用程序开发大作业(共17页).doc_第1页
第1页 / 共17页
移动设备应用程序开发大作业(共17页).doc_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《移动设备应用程序开发大作业(共17页).doc》由会员分享,可在线阅读,更多相关《移动设备应用程序开发大作业(共17页).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上淮阴工学院移动设备应用程序开发大作业系(院): 计算机与软件工程学院 专 业:计算机科学与技术 班 级: 计算机3132 学生姓名: 王奇奇 学 号: 任课教师: 张海艳 学年学期: 2016 2017 学年 第 1 学期2016年 12 月 26 专心-专注-专业基于Android平台2048游戏开发第1章 绪论1.1 游戏开发背景Android 智能手机功能非常强大,具有很高的性价比,非常深受人们的喜爱,可能正式因为如此,在2014年中,Android 智能手机在全世界占据着81.5%很夸张的市场份额,一举成为使用的人数最多,市场份额占据最大的Android 智能

2、手机系统。而Android 智能手机游戏的出现正是为了娱乐心神,并且随着智能移动终端和全球移动通信网络的不断进步,Android 智能也正在经历从简单到复杂的进化过程。从全球来看,智能移动终端的娱乐服务一直被认为是带动移动数据业务加速并快速发展的重要力量。也是作为手机娱乐服务的重要内容之一。近年来,一直伴随着全球移动网络和移动终端性能不断的提高和完善。由于近几年来,Android智能手机游戏的快速发展,游戏的分类也变得越来越丰富,目前手机游戏按内容可分为:角色扮演类(RPG)、冒险类(AVG)、格斗类(FTG)、棋牌类、电影改版类、益智类、体育竞技类、模拟类。手机游戏种类目前已成为人类线上娱乐

3、生活的不可或缺的最主流的载体而存在,现代人对于移动终端的休闲娱乐功能所需求越来越强大,移动终端上的游戏或已以成为了现代人们娱乐生活中不可或缺的一部分了。1.2 国内外研究现状目前国内外的Android开发还是主要以应用开发为主,主要分成3类:企业应用、通用应用以及游戏应用。第一类应用的开发主要是一些大公司为了自己的品牌而开发的。第二类的应用主要是一些创业型公司或者独立开发者为了盈利开发的应用。第三类应用目前跟第二类应用相同4。2048小游戏是一款最近风靡全球的手机游戏,简单的游戏模式和趣味的玩法,几乎游戏下载排行榜的前10名都可以看到“他的身影”。1.3 游戏开发意义现如今,手机游戏已在我们的

4、生活中占据一席之地,并在一步步的壮大。可以说,随着他的迅猛发展,现今的手机游戏已经不单单是一种缓解压力的工具,而是形成了一种文化现象。随着游戏软件在市场的一步步壮大,与其有关的文化也随之传播。2048游戏的制作属于电子游戏中的益智类小游戏,它做到了娱乐性、趣味性、教育性相统一。益智类的游戏即是需要去开动大脑去思考从而获得游戏的胜利。简单的益智类游戏可以使玩家在娱乐中不断的开发大脑。这样一来就实现了在娱乐中学习。现有2048游戏最大的不足在于过度强调简洁,它是由数字组成的游戏,所以在长时间的游戏后就会感觉无聊,同时在熟知玩法后就会知道下一个要拼出的数字,这就缺乏神秘感,当一款游戏缺乏了神秘和趣味

5、时就注定失败。所以我们要勇于创新,将2048游戏开发出不同的版本,当玩家觉对拼接数字感到无聊时可以有不同的选择。2048还有一大缺点就是当玩家拼出2048时游戏就会结束,这样就会让玩家感到失落,所以我们要创作一个永无止境的游戏,让玩家去不断的超越自己。第2章 系统的需求分析和概要设计2.1 系统需求分析2.1.1 系统功能需求分析系统主要实现以下的几个功能:关卡选择、呈现游戏界面、重新开始游戏、当前分数和最高分数、游戏帮助等功能。关卡选择是当玩家点击此按钮时,游戏就会从主界面跳转到关卡选择界面,当玩家选择相应的关卡时,先判断此关卡是否开启,如果没有开启此关卡就会弹出对话框提示玩家此关卡未开启,

6、如果此关卡已经开启就会跳转到主界面同时开始此关卡。重新开始游戏是当玩家无法满足当前进度时点击此按钮就会重新开始游戏,如果玩家处于不同关卡时重新开始游戏还是停留在此关卡。游戏帮助是当新手玩此游戏时无法知道游戏玩法时给予相应的提示。呈现游戏界面是游戏开始时主界面在游戏区域会生成44的矩阵同时在矩阵里面随机生成两个2或4的卡片。当前分数和最高分数是显示此局玩家所获得的分数和历史最高的分数,如果当前的分数超过最高分数那么最高分显示当前的分数,如图2-1所示。图2-1系统功能图2.1.2 游戏基本规则在开始游戏后玩家通过滑动屏幕来操控卡片的移动方向,当卡片滑动中如果有两张卡片相同且他们的中间也没有其他卡

7、片时,在滑动的过程中这两张卡片会合并,显示为这两张卡片之和。在滑动之中有三张卡片相同时只会合并向滑动方向两张卡片。在滑动中如果有两张卡片一样同时又有一张卡片的值跟这两张卡片相加的值时,滑动只会使那两张相同的卡片合并而不会接着让合并后的卡片和另一张卡片合并。2.2 系统概要设计2.2.1 系统流程的设计游戏开始进入开始页面,能够进入游戏的主界面并开始普通开局,从主界面能够重新开始游戏、查看帮助和进入关卡选择界面。当玩家点击重新开始按钮会弹出相应的对话框让玩家选择,如果玩家选择“是”时则重新开始游戏,如果选择“否”则返回游戏界面不做任何处理。当玩家点击关卡按钮会跳转到关卡选择界面,关卡界面将显示所

8、有的关卡,当玩家点击相应的关卡时后台会判断此关卡是否开启,如果已经开启将会跳转到主界面并运行此关卡,如果没有开启将给予玩家提示“此关卡未开启”对话框。在开始界面按返回按钮时则会退出游戏。游戏的流程图如图2-2所示:图2-2系统流程图2.2.2 系统模块设计算法设计(1)当有两张卡片相同时,向它们可以碰撞的方向滑屏,卡片会移动到最底边并生成其两倍数字的卡片,并且生成一个“2”或“4”的卡片,如图2-3所示:图2-3 简单卡片合成(2)当有两张卡片相同时,且在他相同的方向有张跟它们之和的卡片,向它们可以碰撞的方向滑屏,相同的卡片会移动到无法移动的位置并生成期两倍数字的卡片,但合成的卡片不会跟那张两

9、倍数字的卡片合并,并且生成一个“2”或“4”的卡片,如图2-4所示:图2-4 复杂卡片合成(3) 当界面上没有空位并且两两相邻的卡片不相同时游戏结束。如图2-5所示:图2-5游戏结束第3章 系统实现3.1 开始界面的实现游戏的主界面是按钮图片,只是实现了界面的跳转,当玩家点击此界面时就会调用ZuomianActivity此函数让页面跳转到游戏界面开始游戏,如图3-1所示:public class ZuomianActivity extends Activityprotected void onCreate(Bundle savedInstanceState) super.onCreate(sa

10、vedInstanceState);setContentView(R.layout.activity_main0);图3-1 开始界面3.2 游戏界面的实现游戏界面主要是在MainActivity_main.xml中当前分数、最高分数、游戏区域,当跳转到游戏界面时就会调用并执行MainActivity.java函数来展示游戏界面,如图3-2所示。protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);图

11、3-2 主界面3.3 游戏滑屏卡片移动的实现当玩家滑动屏幕时,主要是通过initGameView函数来监听玩家手指滑动的位置,先通过获取开始坐标和结束坐标,然后通过比较结束坐标跟开始坐标的差值来判断玩家是怎样滑动屏幕的。判断出玩家的滑动轨迹后,通过调用swipeLeft、swipeRight、swipeUp、swipeDown方法来实现卡片的移动,如图3-3所示。图3-3 卡片移到public void initGameView() setColumnCount(4);setOnTouchListener(new OnTouchListener() private float startX,

12、startY, offsetX, offsetY;public boolean onTouch(View v, MotionEvent event) switch (event.getAction() case MotionEvent.ACTION_DOWN:startX = event.getX();startY = event.getY();break;case MotionEvent.ACTION_UP:offsetX = event.getX() - startX;offsetY = event.getY() - startY;if (Math.abs(offsetX) Math.ab

13、s(offsetY) if (offsetX 5) swipeRight(); else if (offsetY 5) swipeDown();break;return true;);private void swipeLeft() boolean merge = false;for (int y = 0; y 4; y+) for (int x = 0; x 4; x+) for (int x1 = x + 1; x1 0) if (cardsMapxy.getNum() = 0) cardsMapxy.setNum(cardsMapx1y.getNum();cardsMapx1y.setN

14、um(0);x-;merge = true; else if (cardsMapxy.equals(cardsMapx1y) cardsMapxy.setNum(cardsMapxy.getNum() * 2);cardsMapx1y.setNum(0);MainActivity.getMainActivity().addScore(cardsMapxy.getNum(); merge = true;break;if (merge) addRandomNum();checkComplete();private void swipeRight() boolean merge = false;fo

15、r (int y = 0; y = 0; x-) for (int x1 = x - 1; x1 = 0; x1-) if (cardsMapx1y.getNum() 0) if (cardsMapxy.getNum() = 0) cardsMapxy.setNum(cardsMapx1y.getNum();cardsMapx1y.setNum(0);x+;merge = true; else if (cardsMapxy.equals(cardsMapx1y) cardsMapxy.setNum(cardsMapxy.getNum() * 2);cardsMapx1y.setNum(0);M

16、ainActivity.getMainActivity().addScore(cardsMapxy.getNum();merge = true;break;if (merge) addRandomNum();checkComplete();private void swipeUp() boolean merge = false;for (int x = 0; x 4; x+) for (int y = 0; y 4; y+) for (int y1 = y + 1; y1 0) if (cardsMapxy.getNum() = 0) cardsMapxy.setNum(cardsMapxy1

17、.getNum();cardsMapxy1.setNum(0);y-;merge = true; else if (cardsMapxy.equals(cardsMapxy1) cardsMapxy.setNum(cardsMapxy.getNum() * 2);cardsMapxy1.setNum(0);MainActivity.getMainActivity().addScore(cardsMapxy.getNum();merge = true;break;if (merge) addRandomNum();checkComplete();private void swipeDown()

18、boolean merge = false;for (int x = 0; x = 0; y-) for (int y1 = y - 1; y1 = 0; y1-) if (cardsMapxy1.getNum() 0) if (cardsMapxy.getNum() Math.abs(shiftVertical)if(shiftHorizontal4)slipRight();elseif(shiftVertical4)slipDown();break;特殊情况:由于人的手指在滑动方向会有偏差,一般不会精准的向四个方向滑动,肯定会有偏差,所以要判断手指滑过方向的是水平方向还是垂直方向的意图,当

19、水平方向的偏移量大于垂直方向的偏移量时,表明用户是水平滑动意图,当垂直方向的偏移量大于水平方向的偏移量,表明用户是垂直方向滑动的意图。由于人的手指只有滑动一段距离才能表明用户的意图,不可能点一下屏幕或者稍微动一下就表示滑动意图,这显然不太符合现实情况,所以要定义偏移一定的距离才能判断用户的真正意图。规定当水平方向的偏移距离大于或者等于水平方向的偏移距离,且当偏移小于5时,用户向上滑动,大于5使,规定向下滑动;当水平方向的偏移距离大于或者等于水平方向的偏移距离,且当偏移小于5时,规定用户向左滑动,如果大于5,用户向右滑动。3.6 在游戏中添加随机数对于每个文本框来说,规定如果文本框的数字小于等于

20、0,清空当前文本框的数字小于等于0的文本框的数字,把每个空的文本框存储在一个空点数组中,最后取出一个空点,然后把改所在的文本框的数字设置为0或4,并且规定0和4出现的概率为9比1。具体实现代码如下:privatevoidaddRadomNumber()emptyPoint.clear();for(inti=0;i4.;i+)for(intj=0;j4;j+)if(cardArrayji.getNumber()0.1?2:4);3.7 游戏计分的实现通过在GameMainActivity中生成一个该类的实例,为了在其他Activity可以访问到该Activity中的方法,重写该类的get方法,然

21、后再写添加分数方法addScore,清空分数方法clearScore,显示分数方法showScore。最后在GameActivity中有数字合并的地方,调用计分方法,使得在有合并的时候可以得到相应的分数。计分界面如图3-5所示图3-5 游戏计分的实现第4章 心得体会经过了几周的研究终于把2048这个游戏完成了,这个游戏的完成使我明白了,看似很简单的事情要真的动手实践起来确实有一定的难度,还好经过我不断的耐心学习和钻研,才把这个游戏的基本功能实现了,最后只实现了记录历史最好成绩的功能,暂时没有实现排行榜这点稍微遗憾,以后有机会我会去实现的!俗话说,不积跬步无以至千里,不积小流无以成江海,程序中的

22、很多方法我都是在书中和网上找了又找,试了又试,一遍又一遍,最终才把需要的方法融入到程序当中,实现了必要的功能模块。我以前从来没有玩过这个游戏,在开发游戏之前,我先在网上找到该游戏,了解游戏的玩法,自己熟悉之后才开始慢慢琢磨如何布局,如何分析,如何设计,如何实现默写模块功能,就用户在屏幕上滑动,获取用户意图这一模块来说,以前感觉很不可思议的事情,经过我不断耐心的学习,实验,最终也实现了,感觉挺棒的,通过这一点使我了解到我现在需要学习的内容还很多,今后我一定积极去学习需要学习的知识,做到融会贯通,多做项目使自己在实践中学习,为将来打好铺垫。最终因为本人能力有限,时间仓促,该游戏只是实现了基本功能,具体的美化、优化等等还没来得及做,虽然只做了这么一小部分,但是我还是学到了很多平时没有掌握到的知识,虽然不太完美,但是总体来看我还是比较满意,相信只要有实践就会有收获,只要肯努力就会有回报。成功的大门永远为那些追逐目标而奋发图强的人而开。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁