基于Android扫雷游戏课程设计.docx
- 文档编号:10404261
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:26
- 大小:1.90MB
基于Android扫雷游戏课程设计.docx
《基于Android扫雷游戏课程设计.docx》由会员分享,可在线阅读,更多相关《基于Android扫雷游戏课程设计.docx(26页珍藏版)》请在冰点文库上搜索。
基于Android扫雷游戏课程设计
提供完整版的毕业设计
实训报告
实训项目名称基于Android扫雷游戏的开发与测试
二级学院信息工程学院
专业班级11级计科
(2)班
姓名陈家森、徐康、陈丹宜、胡安婧
学号1142151203、29、02、07
日期2014-11-19
项目
名称
基于Android扫雷游戏的开发与测试
地点
13#603
报告内容
在本报告中,首先介绍了安卓的现状以及开发的相关知识,其次是关于开发游戏过程中用到的开发工具和系统的运行环境配置等。
在本次扫雷游戏的设计与实现的过程中主要完成了从扫雷的布局设计到功能实现设计并对其进行了测试。
首先在系统设计部分中简单叙述了需求分析然后为整个游戏构建了框架并给出了游戏流程图,系统的详细设计分模块介绍了游戏各功能的实现以及代码展示,最后由各个模块的构建了游戏,从而实现扫雷
最后,实现的是对本次游戏的测试并给出测试用列同时也给出了测试结果,以及报告的结论和参考文献等。
教师评语
成绩:
教师签名:
摘要
随着无线移动设备的发展,手机也日益普及,Android系统的推出使手机的发展进入到了一个新的领域。
在此次开发基于Android扫雷游戏中首先在系统设计部分中简单叙述了需求分析然后为整个游戏构建了框架并给出了游戏流程图,系统的详细设计中分模块介绍了游戏各功能的实现以及代码展示,最后由各个模块的构建了游戏,从而实现扫雷。
近年来Android得到了社会更多的认同和应用,本次设计对基于GoogleAndroid平台上的游戏软件设计进行了研究,通过在PC机上搭建Android开发环境,并在该平台上进行扫雷游戏的程序开发。
关键字:
手机,Android,扫雷
1绪论
1.1android操作系统概述
Android早期由“Android之父”之称的Andy Rubin创办。
Google于2005年并购了成立仅22个月的高科技企业Android,展开了短信、手机检索、定位等业务,基于Linux的通用平台进入了开发。
ndroid的发展历史
Google公司在2007年,与其他33家手机制造商(包含摩托罗拉、宏达电、三星、LG)、手机晶片供应商、软硬体供应商、电信业者所联合组成的开放手持装置联盟(Open Handset Alliance),发布了名为Android的开放手机软硬体平台。
参与开放手持装置联盟的这些厂商,都会基于Android平台,来开发新的手机业务。
[1]
身为Google公司创办人之一的Sergey Brin,也在Android软体开发工具(SDK)发布的同时,现身于视讯广告影片中,为大众介绍Android平台。
Sergey Brin也同时宣布举办总奖金高达1000万美元(3亿多台币)的开发者大奖赛,鼓励程式开发者去深入探究Android平台的能力。
写出具创意、实用性十足、能提供使用者更好的手机使用经验的应用程式。
2008年9月22日,美国运营商T-Mobile USA在纽约正式发布第一款Google手机——T-Mobile G1。
该款手机是世界上第一部使用Android操作系统的手机,支持WCDMA/HSPA网络,理论下载速率7.2Mbps,并支持Wi-Fi。
2010年2月3日,Linux内核开发者Greg Kroah-Hartman将Android的驱动程序从Linux内核“状态树”(“staging tree”)上除去,从此,Android与Linux核心开发分道扬镳。
ndroid的软件架构
android一词的本义指机器人,是基于Linux内核的操作系统。
它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。
底层的Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。
ndroid的系统架构
Android 在Linux 核心的基础上,提供了各种合用的函式库,和一个完整的应用程式框架。
并采用较符合商用限制的Apache 版权。
在Linux 核心的基础上提供Google 自制的应用程式运行环境(称作Dalvik,与Sun 的J2ME 不同),并提供基于Eclipse 整合开发环境(IDE)的免费、跨平台(Windows、Mac OS X、Linux) 开发工具(SDK),便于应用程式开发者学习、使用。
ndroid的优势特色
1)开放性
在优势方面,Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来。
显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。
开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,随大的受益正是丰富的软件资源。
开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。
2)挣脱运营商的束缚
在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。
自从iPhone上市,用户可以更加方便地连接网络,运营商的制约减少。
随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈。
3)丰富的硬件选择
这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。
功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。
好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。
4)不受任何显示的开发商
Android平台提供给第三方开发商一个十分宽泛、自由的环境。
因此不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。
但也有其两面性,血腥、暴力方面的程序和游戏如可控制正是留给Android难题之一。
5)无缝结合的google应用
如今叱诧互联网的Google已经走过10年度历史。
从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。
1.2开发环境及工具
采用Eclipse开发工具,在Windows7下进行,基于Android操作系统,使用的语言是Java语言。
环境搭建:
1)JDK安装
2)Eclipse安装
3)AndroidSDK安装
4)ADT安装创建AVD
JDK(JavaDevelopmentKit)是SunMicrosystems针对Java开发员的产品。
自从Java诞生以来,JDK已经成为最广泛的JavaSDK。
JDK是整个Java的核心内容,包括了Java运行环境、Java工具和Java基础类库三部分。
从Sun的JDK1.5开始,提供了一些非常使用的功能,其版本也不断更新,运行效率得到了非常大的提高。
在windows上安装JDK非常简单首先在Sun官网上下载,按照默认路径进行安装。
安装完成之后,可以在检查JDK是否安装成功。
打开cmd窗口,输入java–version查看JDK的版本信息。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组建构建开发环境。
Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。
从官网上下载EclipseIDEforJavaDevelopers解压之后即可使用。
AndroidSDK即软件开发工具包(softwaredevelopmentkit)。
被软件开发工程师用于为特定的软件包、软件架构、硬件平台、操作系统等建立应用软件工具的集合。
因此AndroidSDK是Android专属的开发工具包。
其授权协议为Apache,开发语言为Java、需要Android操作系统的支持。
[2]
2系统分析与设计
2.1需求分析
扫雷是一个简单的单人游戏。
游戏的目的是在没有触碰任何一个地雷的情形下清空一个雷区。
在扫雷游戏中,游戏者要面对一片砖块组成的格栅,有些砖块包含随机设置的地雷。
在扫雷游戏的游戏界面中,由众多面积均等的小方块所组成的区域称之为雷区,雷区的大小由程序设置的游戏等级决定。
游戏开始时,系统会在雷区的某些小方块中随机布下若干个地雷。
安放好地雷的小方块称之为雷方块,其他的称之为非雷方块。
部署完毕后,系统会在其他非雷方块中填充一些数字。
某一个具体数字表示与其紧邻的8个方块中有多少个雷方块。
玩家可以根据这些信息去判断是否可以打开某些方块,并把认为是地雷的方块打上标识。
当玩家将所有地雷找出后,其余的非雷方块区域都已打开,此时游戏结束。
在游戏过程中,一旦错误地打开了雷方块则立即失败,游戏结束;当玩家标识的地雷数超过程序设定,虽然打开了全部其余方块,游戏仍然不会结束。
在游戏开始后,雷区上方有两个计数器。
一个计数器显示用户扫雷所花费的总时间,以秒为单位;另一个计数器显示当前还剩余多少个雷方块。
游戏需要提供提示语,如游戏的开始、游戏失败、游戏成功等。
按功能将游戏区域分成两个区域:
雷区和提示区。
提示区包括两个计数器和一个按键操作结果图像提示。
游戏过程中,当玩家用鼠标点击相应的方块,程序就会作出相应的鼠标响应事件,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。
[3]
2.2整体布局的设计
使用表格布局进行扫雷的布局,在表格布局上加入三行:
第一行包括用于计时的三列数字、新游戏按钮和剩余地雷数。
我们使用TextView显示计时和地雷数。
新游戏按钮使用ImageButton 。
第二行是50像素高的空的TextView,将第一行和雷区隔离开。
第三行是另一个表格布局,用来显示雷区,我将动态的向这个区域添加按钮。
如图2.1所示。
图2.1整体布局
2.3游戏流程图
该流程图主要介绍了游戏在开始阶段的处理以及在游戏进行过程中如何去玩直到最后取得胜利。
流程图如图2.2所示。
图2.2流程图
、
3游戏实现
3.1游戏初始化
游戏的初始化函数中,要设置整个界面的背景图片和游戏开始按钮的图片,还有设置一个提示信息(当点击其它地方时弹出),在游戏开始时要先点击游戏开始按键在弹出提示信息之后,可随意选择一个砖块点击一下开始游戏。
publicvoidonCreate(BundlesavedInstanceState)//游戏初始化
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtMineCount=(TextView)findViewById(R.id.MineCount);
txtTimer=(TextView)findViewById(R.id.Timer);
//设置定时器和雷的液晶风格的字体样式
TypefacelcdFont=Typeface.createFromAsset(getAssets(),
"fonts/lcd2mono.ttf");
txtMineCount.setTypeface(lcdFont);
txtTimer.setTypeface(lcdFont);
btnSmile=(ImageButton)findViewById(R.id.Smiley);//设置为笑脸
btnSmile.setOnClickListener(newOnClickListener()
{
@Override
publicvoidonClick(Viewview)
{
endExistingGame();//所有东西重置
startNewGame();//游戏开始
}
});
mineField=(TableLayout)findViewById(R.id.MineField);
showDialog("点击笑脸,开始新游戏",2000,true,false);
}
游戏初始化状态如图3.1所示:
图3.1游戏初始化
3.2游戏开始
游戏开始函数中,设置的是监听函数和用户界面显示函数,如果游戏要重新开始,要在这之前重置三个变量,即找到的雷数、是否游戏结束、游戏运行秒数。
privatevoidstartNewGame()//游戏开始
{
createMineField();//监听点击一次和LongClick
showMineField();//在用户界面显示所有块
minesToFind=totalNumberOfMines;
isGameOver=false;
secondsPassed=0;
}
点击笑脸以后游戏开始,界面如图3.2所示。
随便点击一个砖块,则正式开始游戏,定时器开始计时,雷数显示为10个雷,如图3.3所示。
图3.2游戏开始
图3.3游戏正式开始
如果是长按这个砖块,可以有三种状态,标记、问号和还原状态。
如果砖块上没有标记,就将其变为标记状态;如果砖块上有标记,就将其变为问号状态;如果砖块上有问号,就将其变为还原状态。
如图4.4、4.5、4.6所示。
图3.4标记块为雷
图3.5标记为?
图3.6还原空白状态
3.3功能模块设计
在设置每个砖块的描述函数中,首先设置砖块为地雷,随机产生每个地雷的行和列,而且不会使地雷的行和列重复,若没有地雷时会显示提示1、2、3分别告诉你在此提示砖块的周围有几颗地雷。
3.3.1雷数显示
设置块为雷数,检查块的左上、上、右上、左、右、左下、下、右下8个块是否有雷,如果有雷则雷数加1。
//设置雷,并设置块的雷数
privatevoidsetMines(intcurrentRow,intcurrentColumn)
{
//设置地雷排除用户点击的位置
Randomrand=newRandom();
intmineRow,mineColumn;//定义地雷所在的行和列
for(introw=0;row { //设置地雷所在的行和列 mineRow=rand.nextInt(numberOfColumnsInMineField); mineColumn=rand.nextInt(numberOfRowsInMineField); if((mineRow+1! =currentColumn)||(mineColumn+1! =currentRow)) { if(blocks[mineColumn+1][mineRow+1].hasMine()) { row--;//雷已经在那,不重复同一个块 } //雷在这个位置 blocks[mineColumn+1][mineRow+1].plantMine(); } //排除用户点击的位置 else { row--; }3 } intnearByMineCount; //计算地雷周围的块数 for(introw=0;row { for(intcolumn=0;column { //查找每个块附近的雷数 nearByMineCount=0; if((row! =0)&&(row! =(numberOfRowsInMineField+1))&&(column! =0)&&(column! =(numberOfColumnsInMineField+1))) { //检查所有附近的块数 for(intpreviousRow=-1;previousRow<2;previousRow++) { for(intpreviousColumn=-1;previousColumn<2;previousColumn++) { if(blocks[row+previousRow][column+previousColumn].hasMine()) { //发现附近的雷,自加加 nearByMineCount++; } } }blocks[row][column].setNumberOfMinesInSurrounding(nearByMineCount); } //侧行(第0个和最后一个行/列) //设置行数和列数为9 else { blocks[row][column].setNumberOfMinesInSurrounding(9); blocks[row][column].OpenBlock(); } } } } 3.3.2游戏结束 赢得游戏函数中,首先停止定时器,然后重置变量和更新地雷数,最后关闭雷区的所有按钮,设置每个砖块的状态,显示“你赢了,花费……秒”信息。 //赢得游戏 privatevoidwinGame() { stopTimer(); isTimerStarted=false; isGameOver=true; minesToFind=0;//设置雷数为0 //设置图标为酷酷的样子 btnSmile.setBackgroundResource(R.drawable.cool); updateMineCountDisplay();//更新雷数 //关闭所有按钮 //设置所有未标记的块 for(introw=1;row { for(intcolumn=1;column { blocks[row][column].setClickable(false); if(blocks[row][column].hasMine()) { blocks[row][column].setBlockAsDisabled(false); blocks[row][column].setFlagIcon(true); } } } //显示信息 showDialog("你赢了,花费"+Integer.toString(secondsPassed)+"秒! ",1000,false,true); } 如果找出了所有的雷,则赢得游戏,如图3.8所示。 图3.7赢得游戏 如果在游戏当中,触发了一个雷,则游戏结束,如图4.9。 如果游戏刚开始就触发一个雷,则游戏也结束,如图4.10所示。 图3.8结束游戏 图3.9结束游戏 3.3.3游戏重置 重置函数中,首先停止定时器,然后重置计时器、雷数量、游戏按钮,最后删除所有的雷,并重置变量。 //所有东西重置 privatevoidendExistingGame() { stopTimer();//如果计时器正在运行,停止 txtTimer.setText("000");//恢复计时器 txtMineCount.setText("000");//恢复雷数量 btnSmile.setBackgroundResource(R.drawable.smile); //删除所有的地雷 mineField.removeAllViews(); //设置所有变量,以支持所有比赛结束 isTimerStarted=false; areMinesSet=false; isGameOver=false; minesToFind=0; } 4测试用列和结果 4.1测试用列 通过以下的测试用例进行对游戏各功能模块的测试并加以修改,如表5.1所示。 测试编号 测试输入 期望结果 实际结果 001 测试第一次点击砖块时的状态 点第一次点击砖块时可能在砖块上出现数字1、2、3不会出现雷 点第一次点击砖块时可能在砖块上出现数字1、2、3不会出现雷。 002 测试当砖块显示1时,周围8个砖块中是否有一个雷 当砖块显示1时其周围8个砖块中有一个雷 当砖块显示1时其周围8个砖块中有一个雷 003 测试当砖块显示2时,周围8个砖块中是否有二个雷 当砖块显示2时其周围8个砖块中有二个雷 当砖块显示2时其周围8个砖块中有二个雷 004 测试当砖块显示3时,周围8个砖块中是否有三个雷 当砖块显示3时其周围8个砖块中有三个雷 当砖块显示3时其周围8个砖块中有三个雷 005 测试在砖块上长按时显示的状态变化 当在砖块上长按时砖块先显示F再显示? 最后显示空白 当在砖块上长按时砖块先显示F再显示? 最后显示空白 006 测试当游戏失败时笑脸是否变成哭脸 当游戏失败时笑脸变成哭脸 当游戏失败时笑脸变成哭脸。 007 当改变砖块图片的大小对扫雷布局的影响 当改变砖块图片的大小时对扫雷的布局有影响 当改变砖块图片的大小时对扫雷的布局没有影响 表4.1测试用例表 4.2测试用列展示图 1.测试第一次点击砖块时的状态如图5.2所示: 图4.2点击砖块开始图 2.测试当砖块显示1时,周围8个砖块中是否有一个雷如图4.3所示: 图4.3砖块1雷区图 3.测试当砖块显示2时,周围8个砖块中是否有二个雷如图4.4所示: 图4.4砖块2雷区图 4.测试当砖块显示3时,周围8个砖块中是否有三个雷如图4.5所示: 图4.5砖块3雷区图 5.测试在砖块上长按时显示的状态变化如图4.6所示: 图4.6状态变化图 6.测试当游戏失败时笑脸是否变成哭脸如图4.7所示: 图4.7游戏失败图 7.当改变砖块图片的大小对扫雷布局的影响如图4.8所示: 图4.8改变图片扫雷布局图 5结论 通过这次创新实践,我学到了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android 扫雷 游戏 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)