基于ANDROID平台的2048游戏设计与开发.pdf
- 文档编号:14658285
- 上传时间:2023-06-25
- 格式:PDF
- 页数:15
- 大小:470.16KB
基于ANDROID平台的2048游戏设计与开发.pdf
《基于ANDROID平台的2048游戏设计与开发.pdf》由会员分享,可在线阅读,更多相关《基于ANDROID平台的2048游戏设计与开发.pdf(15页珍藏版)》请在冰点文库上搜索。
高级操作系统论文高级操作系统论文(设计设计)题题目目基于基于Android个人个人2048小游戏的设计与开发小游戏的设计与开发姓姓名名学学号号院、院、系系信息学院信息学院专专业业指导教师指导教师职称(学历)职称(学历)目目录录摘要摘要11前言11.1游戏背景11.2游戏玩法介绍12游戏设计分析12.1游戏框架的分析12.2流程分析22.3开始游戏分析22.4计分分析22.5游戏结束分析23游戏的具体实现23.1创建游戏项目23.2设计游戏布局33.3主界面的实现33.4触控交互设计53.5游戏卡片类的实现73.6添加游戏卡片83.7在游戏中添加随机数83.8游戏计分的实现93.9游戏结束设置94心得体会12参考文献12AbstractAbstract131基于基于Android个人个人2048小游戏的设计与开发小游戏的设计与开发摘要摘要:
2048这款小游戏是一款流行的数字游戏。
第一款2048小游戏是由GabrieleCirulli首度发布在GitHub上。
2048是当时基于1024和小三传奇这两款的玩法而开发的新型数字游戏,现在开发出来的版本有普通版、六边形版、朝代版、3D版、后宫版等等。
关键词:
关键词:
游戏;数字;版本11前言前言1.11.1游戏背景游戏背景生活在21世纪的我们已经进入电子时代,像如今,液晶电视,平板电脑,Ipad,手机等等,已经进入大众家庭,随着中国的经济发展,人均收入大幅度提升,很多家庭都用上了电子产品,像我们小时候用的好记星、小霸王学习机等等都已经慢慢被淘汰,淡出大众的视野,取而代之的是现在快速发展的移动设备,尤其是手机,更是大众化,价格也越来越低廉,平均每个家庭都会有几部,甚至十几部,尤其是现在的年轻人,不论是吃饭、走路、等车、睡觉之前都会热衷于玩于手机,当你感到无聊的时候,可以上上网,看看新闻,累了之后可以玩玩小游戏缓解一下疲劳,所以我就设计了这款2048的小游戏,既开发智力,又缓解疲劳,适时玩一下小游戏还是有好处的。
本游戏是基于安卓平台开发的,Android是一种以Linux为底层,用Java语言编写代码的操作系统,主要使用于Android系统的手机。
1.21.2游戏玩法介绍游戏玩法介绍游戏的规则其实很简单,就是每次可以选择上下左右其中一个方向滑动,每滑动一次,所有的数字都会往滑动的方向靠拢外全部靠拢在滑动方向的一边为基准线进行叠排,每滑动一次,系统就会在空白的方块随机出现一个数字方块,一般只出现2和4,出现2的概率会远远大于出现4的概率,相同数字的方块在靠拢、相撞时会相加。
玩家要想办法在这小小的16个方格中拼凑出“2048”这个数字方块,就表示游戏过关。
如果你是一个数字爱好者,或者是比较有天赋的数学天才,就算不是数学天才,一般的玩家也能够玩转这款游戏,都会有很大机会成功的。
22游戏设计分析游戏设计分析2.12.1游戏框架的分析游戏框架的分析对一个游戏而言,需要将各个部位分割成其对应部分的功能,并且逐步去实现该功能。
22.22.2流程分析流程分析要想把一个游戏做好,首先要把流程分析好,画出流程图,如图2-1所示图2-1流程分析2.32.3开始游戏分析开始游戏分析用户需点击开始游戏按钮,进入游戏主界面,然后用手指在屏幕上上下左右四个方向滑动即可。
2.42.4计分分析计分分析当有数字合并时,记录此时合并的的数字,加到相应的分数中。
2.52.5游戏结束分析游戏结束分析当屏幕上数字没有得到2048这个值,没有两个相同的格子的数字相同,并且已经没有空格,那么就判定为游戏结束。
3游戏的具体实现游戏的具体实现3.13.1创建游戏项目创建游戏项目创建该游戏的名称为Game_2048,所在的包目录为com.sc.game_2048,为了便于中文的显示,我们选择编码方式为UTF-8。
开始游戏初始化游戏界面,在新游戏界面的4*4的框中随机产生两个数字2或者4有相邻数字相同?
两个数字相加,并且添加一个新的随机数本次移动获得相应的分数记录相应的分数是是否有空框?
是游戏结束对框进行上下左右方向移动,以使相同的数字进行叠加否添加一个随机数否33.23.2设计游戏布局设计游戏布局本游戏的设计用到了线性布局、相对布局、表格布局等等。
(1)线性布局是最简单的,也是开发者用的最多的布局文件,是初学者最容易上手的布局之一。
若规定线性布局的方向为处置方向时,此时整个线性布局中的所有控件都会位于同一列中;若规定线性布局的方向为水平方向,则所有的控件都会为同一行中,线性布局既可以在XML中定义,也可以直接在java文件中定义,当然这需你非常熟悉之后。
(2)相对布局另外一种空间摆放的方式,相对布局通过指定当前空间与兄弟空间或者父控件之间的相对位置关系,从而达到控制控件位置的目的。
在安卓版本4.2以后,相对布局增加了新的特性,比如:
layout_alignStart,layout_aliagnEnd,layout_alignParentStart,layout_alignParentEnd。
3.33.3主界面的实现主界面的实现3.3.13.3.1开始界面开始界面
(1)本界面主要通过一个ImageView实现,通过使用Handler事件处理的postDelayed方法,实现从本界面经过5秒钟的时间自动跳转到MangeActivity界面。
(2)在本界面中,通过以下两条语句获取当前窗口的宽度和高度,并且设置窗口的高度和宽度充满整个屏幕不显示标题,使得进入游戏时,可以充满整个屏幕。
在后面的其他界面中均采用这种方式,是的所有界面充满整个屏幕。
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE);实现界面如图3-1所示图3-1开始界面43.3.23.3.2控制界面控制界面控制界面主要包括开始游戏按钮和退出游戏按钮,本界面主要采用了相对布局的方式,两个按钮均采用了ImageButton的控件,使得用户通过点击开始游戏时,通过两个Avtivity的跳转,从本界面跳转到游戏界面,点击退出游戏按钮,结束当前游戏并退出游戏界面,释放相应的资源。
实现界面如图3-2所示图3-2控制界面3.3.33.3.3游戏界面游戏界面本界面主要采用了线性布局、表格布局以及FrameLayout,通过这三种布局的有效结合,使得游戏分为计界面以及游戏界面两部分,上边部分记录游戏所得分数,下面部分用于显示游戏的16个操作框,实现游戏的运行。
具体实现界面如图3-3所图3-3游戏界面53.43.4触控交互设计触控交互设计本模块主要实现用户通过手指滑动屏幕,起始位置,获得水平或垂直方向的偏移离量,以此来判断用户的意图,主要是通过调用OnTouchListener监听器来实现的,具体代码实现如下:
setOnTouchListener(newOnTouchListener()privatefloatstartHorizontal,startVertical;privatefloatshiftHorizontal,shiftVertical;publicbooleanonTouch(Viewv,MotionEventevent)/TODOAuto-generatedmethodstubswitch(event.getAction()caseMotionEvent.ACTION_DOWN:
startHorizontal=event.getX();startVertical=event.getY();break;caseMotionEvent.ACTION_UP:
shiftHorizontal=event.getX()-startHorizontal;shiftVertical=event.getY()-startVertical;if(Math.abs(shiftHorizontal)Math.abs(shiftVertical)if(shiftHorizontal4)slipRight();elseif(shiftVertical4)slipDown();break;6returntrue;);这里列举向左滑动时的代码,其他三个方向的代码跟此方向的代码相似privatevoidslipLeft()booleanflag=false;for(inti=0;i4;i+)for(intj=0;j4;j+)for(intk=j+1;k=0)if(cardArrayji.getNumber()=0)cardArrayji.setNumber(cardArrayki.getNumber();cardArrayki.setNumber(0);flag=true;elseif(cardArrayji.equals(cardArrayki)&(k=j+1)cardArrayji.setNumber(cardArrayji.getNumber()*2);cardArrayki.setNumber(0);GameMainActivity.getMainActivity().addScore(cardArrayji.getNumber();flag=true;if(flag=true)addRadomNumber();winGame();endGame();7特殊情况:
(1)由于人的手指在滑动方向会有偏差,一般不会精准的向四个方向滑动,肯定会有偏差,所以要判断手指滑过方向的是水平方向还是垂直方向的意图,当水平方向的偏移量大于垂直方向的偏移量时,表明用户是水平滑动意图,当垂直方向的偏移量大于水平方向的偏移量,表明用户是垂直方向滑动的意图。
(2)由于人的手指只有滑动一段距离才能表明用户的意图,不可能点一下屏幕或者稍微动一下就表示滑动意图,这显然不太符合现实情况,所以要定义偏移一定的距离才能判断用户的真正意图。
规定当水平方向的偏移距离大于或者等于水平方向的偏移距离,且当偏移小于4时,用户向上滑动,大于4使,规定向下滑动;当水平方向的偏移距离大于或者等于水平方向的偏移距离,且当偏移小于4时,规定用户向左滑动,如果大于4,用户向右滑动。
3.53.5游戏卡片类的实现游戏卡片类的实现主要采用了FrameLayout布局的方式,实现每个文本框中的数字的大小,位置,背景颜色等等。
(1)重写了equals方法,来判断当前textView中的数字与其比较的textView的数字的大小。
具体实现代码如下:
publicbooleanequals(CardActivityo)/TODOAuto-generatedmethodstubReturngetNumber()=o.getNumber();
(2)通过判断不同文本框中的数字大小,来实现不同数字的使用不同的颜色北京来显示。
具体实现代码如下:
if(number=0)textView.setText();textView.setBackgroundColor(0xffB2C0CC);elsetextView.setText(number+);if(number=2)textView.setBackgroundColor(0xffDAE4EE);if(number=4)textView.setBackgroundColor(0xffC8E0EC);.83.63.6添加游戏卡片添加游戏卡片由于目前用户使用的手机的屏幕分辨率不同,所以需要动态计算游戏文本框的宽度和高度,以此来填充满整个手机屏幕。
当手机由原来的垂直方向转换到水平方向时,游戏的布局会发生改变,为了不让游戏的布局宽度和高度不发生改变,需要在Manifest.xml文件中第一次进入游戏时的Activity中添加一条语句android:
screenOrientations=portrait,以后不论手机如何放置,当前的布局宽度和高度都不会改变。
当第一次进入游戏时,动态计算文本框的宽度和高度,需要重写onSizeChanged方法,可以得到当前布局的宽度和高度,来计算文本框的宽度和高度。
定义个添加文本框的方法addCard,总共四行四列,然后用之前的卡片类来生成实例对象,再调用setNumber方法设置每个文本框的数字为0,最后调用addView方法把所有的文本框添加到游戏当中。
具体实现代码如下:
privatevoidaddCard(intcardWidth,intcardHeight)CardActivityc;for(inti=0;i4;i+)for(intj=0;j4;j+)c=newCardActivity(getContext();c.setNumber(0);addView(c,cardWidth,cardHeight);3.73.7在游戏中添加随机数在游戏中添加随机数对于每个文本框来说,规定如果文本框的数字小于等于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.83.8游戏计分的实现游戏计分的实现通过在GameMainActivity中生成一个该类的实例,为了在其他Activity可以访问到该Activity中的方法,重写该类的get方法,然后再写添加分数方法addScore,清空分数方法clearScore,显示分数方法showScore。
最后在GameActivity中有数字合并的地方,调用计分方法,使得在有合并的时候可以得到相应的分数。
计分界面如图3-4所示图3-4游戏计分3.93.9游戏结束设置游戏结束设置3.9.13.9.1判断游戏结束的条件判断游戏结束的条件
(1)所有的框都有数字;
(2)所有相邻的两个框的数字都不相同。
只有满足以上两个条件,则该局游戏结束,并且会弹出游戏结束对话框,该对话框代码如下:
privatevoidendGame()booleanflag=true;ALL:
for(inti=0;i4;i+)for(intj=0;j0&cardArrayji.equals(cardArrayj-1i)|(j0&cardArrayji.equals(cardArrayji-1)|(j3&cardArrayji.equals(cardArrayj+1i)|(i3&cardArrayji.equals(cardArrayji+1)flag=false;breakALL;10if(flag)Builderdialog=newAlertDialog.Builder(getContext();dialog.setTitle(你好,GameOver);dialog.setMessage(你太菜了,再试一次?
);dialog.setNegativeButton(取消,newAlertDialog.OnClickListener()OverridepublicvoidonClick(DialogInterfacedialog,intwhich)/TODOAuto-generatedmethodstubdialog.cancel(););dialog.setPositiveButton(确定,newAlertDialog.OnClickListener()publicvoidonClick(DialogInterfacedialog,intwhich)/TODOAuto-generatedmethodstubstartGame(););dialog.show();应用以上代码的效果图如3-5所示图3-5游戏结束3.9.23.9.2判断游戏获胜的条件判断游戏获胜的条件当某一个文本框的数字为2048时,即表示该局游戏获胜,此时会弹出获胜对话框,该对话框的代码如下:
privatevoidwinGame()All:
for(inti=0;i4;i+)for(intj=0;j4;j+)if(cardArrayji.getNumber()=2048)11Builderdialog=newAlertDialog.Builder(getContext();dialog.setTitle(恭喜您,闯关成功);dialog.setMessage(您太牛了,是否开启新的一局游戏?
);dialog.setNegativeButton(取消,newAlertDialog.OnClickListener()OverridepublicvoidonClick(DialogInterfacedialog,intwhich)/TODOAuto-generatedmethodstubdialog.cancel(););dialog.setPositiveButton(确定,newAlertDialog.OnClickListener()publicvoidonClick(DialogInterfacedialog,intwhich)/TODOAuto-generatedmethodstubstartGame();GameMainActivity.getMainActivity().clearScore(););dialog.show();breakAll;应用以上代码效果如图3-6所示图3-6赢得游戏1244心得体会心得体会经过了几个星期的研究终于把2048这个游戏完成了,这个游戏的完成使我明白了,看似很简单的事情要真的动手实践起来确实有一定的难度,还好经过我不断的耐心学习和钻研,才把这个游戏的基本功能实现了,最好只实现了计分的功能,暂时没有实现最好成绩的记录这点稍微遗憾,以后有机会我会去实现的!
俗话说,不积跬步无以至千里,不积小流无以成江海,程序中的很多方法我都是在书中和网上找了又找,试了又试,一遍又一遍,最终才把需要的方法融入到程序当中,实现了必要的功能模块。
我以前从来没有玩过这个游戏,在开发游戏之前,我先在网上找到该游戏,了解游戏的玩法,自己熟悉之后才开始慢慢琢磨如何布局,如何分析,如何设计,如何实现默写模块功能,就用户在屏幕上滑动,获取用户意图这一模块来说,以前感觉很不可思议的事情,经过我不断耐心的学习,实验,最终也实现了,感觉挺棒的,通过这一点使我了解到我现在需要学习的内容还很多,今后我一定积极去学习需要学习的知识,做到融会贯通,多做项目使自己在实践中学习,为将来打好铺垫。
最终因为本人能力有限,时间仓促,该游戏只是实现了基本功能,具体的美化、优化等等还没来得及做,虽然只做了这么一小部分,但是我还是学到了很多平时没有掌握到的知识,虽然不太完美,但是总体来看我还是比较满意,相信只要有实践就会有收获,只要肯努力就会有回报。
成功的大门永远为那些追逐目标而奋发图强的人而开。
参考文献:
参考文献:
1郑莉,王行言,马素霞.Java语言程序设计M.北京:
清华大学出版社,2010,228238.2吴亚峰,于复兴,杜化美.Android开发游戏大全M.北京:
人民邮电出版社,2013,1421.3王小科,寇长梅,于复兴等.Android入门经典M.北京:
机械工业出版社,2013,130134.4楚无咎.Android开发游戏大全M.北京:
电子工业出版社,2013,2325,82!
84,160163.5IanF.Darwin.Android开发游戏大全M.北京:
机械工业出版社,2013,290297,333334.6一辉.Android布局详解之一:
FrameLayout.http:
/益智小游戏.2048网页游戏.http:
/zyq0335.activity之间的数据传递方法.http:
/thisgameisapopulardigitalgame.Thefirst2048gamebyGabrieleCirulliforthefirsttimereleasedonGitHub.2048wasbasedon1024andmistressofthetwoparagraphoflegendofplayandthedevelopmentofnewdigitalgames,nowdevelopedversionofacommonversion,hexagonalversion,version,3Dversion,Dynastyharemversionetc.Keywords:
game;number;version附源代码下载地址:
http:
/密码:
u326
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ANDROID 平台 2048 游戏 设计 开发
![提示](https://static.bingdoc.com/images/bang_tan.gif)
文档标签
- 基于Android开发购物
- 基于Android平台酒店
- 基于Android平台物流
- 基于Android平台星座
- 基于ANDROID系统游戏
- Android平台Qt开发
- 基于Android游戏开发
- Android游戏开发
- 基于Android开发图书
- 基于Android教学平台
- 基于Android平台求职
- 基于Android平台签到
- 基于Android策略游戏
- 基于Android平台百度
- 基于Android计算器开发
- 基于IOS平台游戏
- Android游戏开发基础
- 基于Android平台图像
- Android平台开发入门Android平台开发
- 基于MSP430F149开发平台
- Android实验报告
- android手机游戏开发
- android开发报告洛阳
- Android项目开发报告
- android报告
- Android实验报告
- Android开发实习报告