基于Android的数独游戏设计说明_第1页
基于Android的数独游戏设计说明_第2页
基于Android的数独游戏设计说明_第3页
基于Android的数独游戏设计说明_第4页
基于Android的数独游戏设计说明_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、. . . . 学生班级学号专 业计算机科学与技术课程设计题目基于Android的数独游戏设计评语组长签字:成绩日期2014 年 月 日课程设计任务书学 院信息科学与工程学院专 业计算机科学与技术学生班级学号课程设计题目基于Android的数独游戏设计实践教学要求与任务:能够运用Java语言设计数独游戏,实现基本游戏效果。会搭建Android的开发环境,并学会运用 Eclipse开发工具相关Android程序进行开发;深入了解Android项目生成的文件之间的关系和它们的作用。工作计划与进度安排:第一阶段:20学时。设计阶段。学生根据所选题目,查阅有关 资料,综合所学的理论知识,完成

2、整体设计与具体设计。第二阶段:8学时。调试测试阶段。上机调试测试,要求学生务 必认真,思想高度集中,调试成功后,整理、编写设计资料与实验 报告。 第三阶段:4学时。验收答辩。指导教师: 2014 年 月 日专业负责人:2014 年 月 日学院教学副院长:2014 年 月 日摘要移动互联网时代的到来极大的改变了我们的生活,而Android是一种以Linux为基础的开放源码操作系统迅速占领了智能机操作系统,所以在android环境下开发显得尤为必要。Android是开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以与强大的浏览器。因

3、此,对于软件从业人员来说,Android平台具有无限的吸引力。本文就在分析讨论Android手机软件开发技术原理的基础上,为用户开发出基于Android平台的数独游戏的软件。通过对Android系统架构和应用开发进行初步研究,设计一款数独游戏。在对系统进行详细需求分析的基础上,确定了系统的功能和性能要求,对游戏的开机动画,菜单界面、屏幕绘制、时间控制、布局算法等进行了设计。本文详细介绍了在Android平台上以Java为语言编写游戏的过程,最终实现了一个界面友好、操作简单的手机益智游戏。关键词:Android 数独 智能机目录1、开发工具与环境52、系统分析与设计92.1数独游戏背景92.2游

4、戏功能简介93、系统详细设计123.1 欢迎界面的设计和实现123.2 游戏界面相关类的实现173.3 数独算法类的实现193.4 游戏的测试和运行234、总结28参考文献291、开发工具与环境Android 是谷歌公司发布的手机操作系统,它是基于Linux 平台的开源手机操作系统,谷歌公司将要把其打造为基于移动终端的真正开放的移动软件平台,不仅拥有移动所需要的工作软件,而且在专利权方面能够不侵犯他人权利去推动移动互联网的创新。谷歌公司为了开发Android,与开放手机联盟进行了合作,手机开放联盟由全球30 多家移动开发和手机应用的领先企业组成。谷歌公司不仅仅和运营商达成了合作关系、而且与设备

5、制造商以与开发商保持长期合作,目的就在于利用其优势建立移动软件平台,其特点是标准化、开放式的。Android是谷歌公司未来企业战略的一部分,其目的是为了在任何时候任何地点能够提供信息。Android应用程序与其他很多计算机平台的应用程序不同,他们没有唯一的启动入口,一个Android应用程序是由多个不同组件组合而成,组件间通过Intent实现通信。Android系统的基本组件包括Activity、Service、Broadcast Receiver和Content Provider等,要实现组件间通信,还需要Intent消息组件。并不是每个Android应用程序都必须具备这四个组件,很多时候只

6、需要这四种中的某几种就可以了。除此之外,应用程序的所有组件还都必须在AndroidManifest.xml中声明8。这是一个XML配置文件,这个配置文件用于定义应用程序的组件、组件的功能与必要条件等。这个配置文件是任何一个Android应用程序所必需的。1.1 ActivityActivity 可以说是开发人员最常用的组件,同时也属于Android 最基本的组成部分之一。Android 程序中,一般一个Activity 代表手机屏幕上的一屏。举例来说,如果将手机比作一个浏览器,那么一个Activity 就相当于一个网页。在Activity 中,可以添加多个视图,然后为这些视图添加一些事件处理。

7、这些视图可以是按钮、文本框、列表等。可以看到,Activity 的概念和网页的概念相当类似。一般一个Android 应用是由多个Activity 组成,同时这些Activity 相互之间可以进行跳转,例如,按下某个Activity 中的Button 按钮后,可能会跳转到一个其他的Activity。不过和网页跳转稍有不同,Activity之间的跳转可以有返回值,例如,在Activity A 跳转到Activity B 后,那么当Activity B运行结束时,可能会返回给Activity A 一个值。在多个Activity 交流的过程中,这种返回机制是相当实用的。当用户进入一个新的屏幕时,之前的

8、屏幕会转入暂停状态,并且保存在历史堆栈中。正是由于历史堆栈的存在,用户可以通过返回操作,返回到之前打开过的所有屏幕。Android默认的是将应用程序从开始到当前的每一个屏幕都保存到堆栈中,不过与此同时,Android还提供了很方便的机制,让开发人员自定义某个屏幕是否需要保存到历史堆栈。Activity 的跳转实现,必须借助于Intent 类。因此Intent 在Android 应用中占据的地位是极其重要的。简单来说,一个Intent 就是对一个将要执行的操作请求的抽象描述。Intent 的描述,主要包含有两个数据结构:动作(action)和动作对应的数据(data)。动作有很多种,系统中最常见

9、的动作类型有:MAIN(表明该Activity 是应用程序的入口)、VIEW、PICK、EDIT 等等;而动作对应的数据一般以URI 的形式表示,例如:要查看某一个网页,则需要创建Intent,它的动作类型为VIEW,对应的数据应该是该网页的网址。值得一提的是,有一个类叫IntentFilter,它是Intent的相关类。如果说Intent是一个有效的操作请求,那么一个IntentFiler则用于描述一个Activity(或者Intent Receiver等)能够接收哪些Intent的请求。比如系统浏览器的Activity用于查看某一个网页,那么它用于接收Intent的IntentFilter

10、,要定义类型为VIEW的动作并且能够过滤表示一个网页网址的URI。通常IntentFilter要被注册在AndroidManifest.xml文件中。Activity 之间的跳转正是通过解析各种Intent 来实现的。例如一个Activity 调用startActivity(intent)方法,希望跳转到其他的Activity 时,会触发系统的Intent 解析过程,在所有安装的应用程序中已注册的IntentFilter 中查找,并最终挑选出能够匹配Intent 的Activity。然后这个新的Activity 因为接收到Intent 的请求而开始运行,完成Activity 的跳转。这种跳转机

11、制提供了两个关键好处:(1)操作请求被Intent 封装起来,方便Activity 重复利用。(2)相互跳转的多个Activity 之间实现了松耦合。只要IntentFilier 保持不变,一个ctivity 可以随意修改,而不用担心其他Activity 找不到它。1.2 Broadcast Receiver应用程序可以通过Broadcast Receiver 监听一个外部的事件,并做出响应。例如,当应用程序需要对呼入这个外部事件做出反应时,可以利用Broadcast Receiver 进行处理。再如,当一个后台下载任务成功的事件发生时,需要提示用户下载完成,仍然可以利用Broadcast R

12、eceiver 来进行处理。Broadcast Receiver不能生成UI,也就是说对于用户来说是透明的,用户是看不到的。Broadcast Receiver只能通过NotificationManager来通知用户这些事件发生了。BroadcastReceiver既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceiver()进行注册。注册完成之后,当事件来临的时候,即使程序没有启动,系统依然可以根据定义,自动启动程序。各种应用也可以通过使用Context.sendBroadcast()将它们自己的Intent Broadc

13、ast广播给其他应用程序。1.3 ServiceService是一种程序,它可以运行很长时间,但是它却没有用户界面,不可交互,而且不能自己运行。它需要通过某一个Activity或者其他的Context对象来调用12。最常见的例子,比如说用户正在运行一个音乐播放器的程序,此时如果想浏览网页,那么,在用户导航到Android的浏览器以后,虽然进入了浏览器屏幕,但是歌曲的播放并没有停止,而是在后台继续播放着。其实播放的动作正是由播放音乐的Service执行着。当然,如果需要的话,Service也是可以停止。通过startService(Intent service)可以启动一个Service,通过C

14、ontext.bindService()可以绑定一个Service。1.4 Content Provider对于数据存储,Android与其他的操作系统有一点不太一样,即数据在Android程序中都是私有的,这些数据包括文件类型和数据库类型以与其他类型的数据。这样系统和应用程序的数据就各自独立起来,以避免受到某些不正常程序或是病毒的影响。不过这并不代表各应用程序之间就因此而无法进行数据交换了。当某个应用程序希望与其它的应用共享其数据时,Android提供的Content Provider就可以发挥作用了。在实现ContentProvider的抽象接口以后,程序便可以将自己的数据暴露出去,其他程

15、序只要有权限,就可以通过这一套标准而统一的接口,读取或是删除该程序的数据13。2、系统分析与设计2.1数独游戏背景数独的前身为“九宫格”,最早起源于中国。但当时的算法比现在的更为复杂,要求纵向、横向、斜向上的三个数字之和等于15,而不是数字不能重复。儒家典籍易经中的“九宫图”也是来源于此。到了18世纪末,瑞士数学家莱昂哈德·欧文又发明了一种叫做“拉丁方块”的游戏,之后不久,美国的一家数字逻辑游戏杂志开始刊登这类游戏,使此类游戏得到良好发展,之后又在日本得到了广泛的传播。2004年,第一个“数独”游戏被刊登上了英国泰晤士报的封面,此时开始数独游戏才真正为世界所知晓。数独游戏的规则很简单

16、,只需要在空格处填写19的数字,并保证每个数字在每个九宫格只出现一次,而一般的游戏过程是系统随机生成一个棋局,然后玩家需要在空白处填上相应的数字使其满足游戏规则。由于此类游戏操作简单,不需要特定的语言基础,也不需要进行数字运算且可玩性高、锻炼思维、开发大脑,所以很快风靡全球。2.2游戏功能简介数独游戏的规则很简单,只需在空格处填入19 的数字,并保证每个数字在每个九宫格只能出现一次,且每个数字在每一行、每一列也只能出现一次,而一般的游戏过程是系统随机生成一个棋局,然后玩家需要在空白处填上相应的数字使其满足游戏规则。游戏框架如下图所示:图3.1 游戏框架图该游戏的运行步骤如下。1.启动游戏后首先

17、进入的便是欢迎界面的动画,在欢迎界面中,“点击屏幕继续”闪动,达到提示的效果。2.在游戏界面点击屏幕,便进入菜单界面。3.在菜单界面单击“关于游戏”菜单可进入“关于”界面,在“关于”界面中介绍了该游戏的目标平台与开发日期。4.在菜单界面单击“帮助游戏”菜单可进入“帮助”界面,在“帮助”界面介绍了游戏的基本规则。5.在菜单界面单击“开始游戏”菜单可进入游戏界面。6.当在游戏过程中单击“暂停”按钮时,便进入暂停状态。7在游戏过程中随时可以通过“换题”按钮来更换题目。8.当玩家单击“放弃”按钮时,会提示玩家是否真的需要退出游戏,然后根据玩家的选择进行操作。9.当玩家单击“提示”按钮时,界面上会出现一

18、个红心表示当前可以提示玩家输入数字,此时再单击空白处,便会自动填上正确答案。10.当玩家将界面中所有的空白全部填满数字时,系统会自动判断所填写的数字正确与否,当有错误时,会出现游戏失败界面;当全部填写正确时,会出现游戏胜利界面。11.在胜利或者失败状态时,玩家可以通过点击屏幕任意位置返回欢迎界面。12.在菜单界面单击“退出游戏”便可退出该游戏。3、系统详细设计3.1 欢迎界面的设计和实现3.1.1 主类KLSDActivity实现在本游戏设计中,控制调度模块主要是由KLSDActivity类来实现的KLSDActivity继承自Activity 类,它提供了整个游戏的入口。并且在游戏运行过程中

19、也随时需要KLSDActivity的管理。组成该类的成员变量如下所示:WelcomeView welcomeView; GameView gameView; AboutView aboutView; HelpView helpView; Handler myHandler 以上类都是对View的继承,其中WelcomeView是对欢迎动画界面的引用,GameView是对游戏界面的引用,AboutView是对目录界面的引用,HelpView是对帮助界面的引用,Handler Handler主要负责线程之间的通信,通过接受消息来更新UI线程中的控件。这里使用Handler类主要实现的是根据接收到的

20、消息做出相应的切换视图操作,从而控制调度各个视图的显示。Handler机制使得线程间的通信通过Message和Runnable对象来传递和处理。在此模块的实现中,Handler传递的消息容被封装到一个Message对象中,Message中包含了消息的描述和任何形式的可以被Handler发送的数据对象,其最主要的字段是what,此字段由用户自己定义,为消息类型码,接收方可以根据该字段的值来确定收到的消息是关于什么的。这里重点实现了Handler类中的handleMessage()方法,此方法用来接收并处理消息,接收的参数为一个Message对象。在这里定义了Message的what字段,根据接收

21、到的what字段的值来切换到不同的界面,从而实现对整个游戏运行的管理。下面介绍KLSDActivity的成员函数:onCreat():此函数是Activity 类的入口函数,在此函数中先将手机设置成全屏模式,然后切换到加载界面并在后台初始化欢迎动画界面。initWelcomeView():此函数实现欢迎界面的切换。initGameView():此函数实现游戏界面的切换。initHelpView():此函数初始化帮助界面。initAboutView():此函数初试化关于界面。上面介绍了实现控制调度模块的KLSDActivity 类,可以看出这里主要通过Android中的Handler 机制来控制

22、当前屏幕显示哪一个界面,从而完成控制调度功能。3.1.2 欢迎界面WelcomeView类的实现欢迎界面WelcomeView类实现的是开机动画的功能,简要流程图如下:图4.1 WelcomeView类功能流程图欢迎界面是通过WelcomeView 类实现的。该类继承自SurfaceView 类,采用双缓冲机制进行绘图。它可以控制表面的格式,比如大小,显示在屏幕中的位置,最关键是的提供了SurfaceHolder 类,使用getHolder 方法获取。在用WelcomeView 绘制之前必须使用lockCanvas()方法锁定画布,并得到画布,然后在画布上绘制;当绘制完成后,需要使用unloc

23、kCanvasAndPost 方法来解锁画布,于是才能显示在屏幕上。BitmapID创建了存放动画帧图片ID 的数组,将其存放到数组中方便管理,在之后进行系统维护时,如需新增动画帧,只需在此数组中添加新的ID 即可。在WelcomeView 类中,public WelcomeView(KLSDActivity activity) 是此类的构造器,主要用来初始化刷帧线程、动画线程、以与初始化图片,onDraw()方法主要用来绘制屏幕,按次序分别欢迎动画以与菜单界面。onTouchEvent()方法为屏幕的监听方法,该方法通过玩家单击位置的坐标判断出玩家单击的是菜单界面的哪些区域,并根据单击的按钮

24、向Activity 的Handler 发送消息。3.1.3 WelcomeViewDrawThread类和WelcomeViewGoThread类的实现为了实现欢迎界面的动画效果,这里设计了WelcomeViewDrawThread类,这个类主要负责界面的定时刷新,而WelcomeViewGoThread类负责动画的生成。WelcomeViewDrawThread类和WelcomeViewGoThread类的生继承自Thread 类,重写了Thread 类里的run()方法,都是通过run()方法实现功能。WelcomeViewDrawThread其run()方法的代码如下:publicvoi

25、d run() /重写的run方法Canvas c;/声明画布while (this.flag) /循环 c = null;try /锁定整个画布 c = this.surfaceHolder.lockCanvas(null);synchronized (this.surfaceHolder) /同步 welcomeView.onDraw(c);/调用绘制方法 finally /用finally保证一定被执行if (c != null) /更新屏幕显示容this.surfaceHolder.unlockCanvasAndPost(c); try Thread.sleep(sleepSpan);

26、/睡眠指定毫秒数 catch(Exception e)/捕获异常 e.printStackTrace();/打印异常信息 分析其代码,这里主要控制c值的变化,当其值为null时,结合WelcomeView 类里的onDraw()方法,绘制背景图片,绘制完成后,c值不为null,解锁屏幕,将画布置空,c值又为null,释放和更新屏幕显示的容,从而实现刷帧作用。WelcomeViewGoThread类中run()方法代码如下所示:publicvoid run() /重写的run方法法while (flag) /循环 welcomeView.drawIndex+;/自加if(welcomeView.

27、drawIndex>welcomeView.bitmapsID.length-1) welcomeView.drawIndex = welcomeView.bitmapsID.length-10; if(welcomeView.drawIndex%5 = 0) welcomeView.drawString = !welcomeView.drawString; try Thread.sleep(sleepSpan);/睡眠 catch(Exception e) e.printStackTrace();/打印异常信息 分析该类的run()方法,控制drawIndex的值,每次循环将欢迎界面的

28、drawIndex 加1,然后判断是否到达数组的最后,当到达最后时,将其减10,然后继续进行循环。同时,判断drawIndex是否为5,这样每循环5次改变drawString的值,从而实现文字的闪动效果。3.1.4 HelpView类和AboutView类的实现游戏中关于游戏帮助和游戏说明,我们分别通过HelpView类和AboutView类的实现。HelpView类和AboutView类都是通过onDraw()方法来绘制界面。由于这两个类在很大程度上是相似的,所以下面只分析HelpView类,代码如下所示:public HelpView(KLSDActivity activity) supe

29、r(activity);this.activity = activity;/得到activity的引用surfaceHolder = this.getHolder();/获得surfaceHoldergetHolder().addCallback(this);/添加Callback接口的实现helpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.help);publicvoid onDraw(Canvas canvas) /绘制方法canvas.drawColor(Color.WHITE);/背景色canvas.

30、drawBitmap(helpBitmap, 0, 0, null);/绘制图片publicboolean onTouchEvent(MotionEvent event) /键盘监听方法if(event.getAction() = MotionEvent.ACTION_DOWN)/屏幕被按下double x = event.getX();double y = event.getY();/得到坐标if(x>270 && x<310 && y>440 && y<480)/点击确定按钮activity.myHandler.sen

31、dEmptyMessage(2);returnsuper.onTouchEvent(event);public HelpView(KLSDActivity activity) 为“帮助”界面的构造器,在构造器中先得到activity 以与surfaceHolder的引用,然后添加Callback 接口的实现并对图片资源进行初始化。onDraw()为重写的绘制方法,在该方法中,首先绘制白色背景,然后将帮助界面的背景图片绘制到指定位置。onTouchEvent()为重写的键盘监听方法,当玩家点击屏幕时,会调用该方法来处理玩家的屏幕事件,在“帮助”界面中该方法实现比较简单,只是判断玩家点击的是否为返

32、回按钮即可。当玩家点击返回按钮时,需要向activity 发送Handler 消息通知控制器切换屏幕。3.2 游戏界面相关类的实现游戏界面实现游戏展示,计时界面展示,以与功能按键。流程图如下图所示:图4.2游戏界面流程图3.2.1 游戏界面GameView的实现首先理解下GameView的运行思路,GameView在初始化时候读取相关图片信息,包括背景图片,数独背景框图片等等,在初始化同时,启动GameViewDrawThread线程进行刷帧,TimeThread 线程来更新界面中的时间。当玩家点击背景框空白位置,需要绘制数字键盘时,会启动DrawKeyThread 线程绘制数字键盘。当玩家点

33、击按钮时候,相关方法会被调用。以上的过程都需要KLSDActivity的参与管理。GameView 同样继承自SurfaceView 类,其关键也是实现onDraw()方法。onDraw()方法分别绘制游戏界面背景图片,数字背景框,选题提示等等按钮,时间显示区域等。DrawKey()方法实现了数字键盘的绘制,保证在点击空白框时候有圆盘数字选框出现。通过surfaceCreated()和surfaceDestroyed()两个方法负责相关线程的启动和调用工作。3.2.2 时间线程TimeThread的实现TimeThread线程主要用来更新界面中的时间,作为数独游戏玩家计时功能,代码如下:pub

34、licclass TimeThread extends ThreadGameView gameView;/声明GameView的引用boolean flag=true;/循环标志位public TimeThread(GameView gameView)/构造器this.gameView=gameView;/得到GameView的引用publicvoid run()/重写的run方法while(flag)gameView.time+;/时间自加tryThread.sleep(1000);/睡眠一秒种catch(Exception e)/捕获异常e.printStackTrace();/打印异常信

35、息TimeThread 类的实现比较简单,只需每隔一秒钟通过gameView.time自加更改一下GameView 中表示时间的属性即可。public TimeThread(GameView gameView) 为时间线程的构造器,在构造器中先得到GameView的引用。然后重写run()方法,通过时间的自加,实现一秒钟功能。3.3 数独算法类的实现数独算法类主要实现数独的生成以与填入数字的检测功能,流程图如下:图4.3 WelcomeView类功能流程图3.3.1数独算法基本逻辑本节将对数独算法类ShuDuSuanFa.java进行解释,该类基本上是数学计算,通过一定的算法产生所需要的数独数

36、组,通过特定的接口供其他类使用。该类的目的是创建一个二维数组来表示数独矩阵。使矩阵的每行、每列、每块都没有重复的数字。算法的简单思路是先随机取出一个09 的数字,然后检查其所在的行、列、块是否都符合要求。当符合要求时继续填充下一个,而当不符合要求时,再次随机取出一个没有取出过的数字,再判断。当9 个数字都取出过后还没有找到符合要求的数字时,进行回退处理,即将最后一个取出的符合要求的数字进行重新取值,直到所有数字全部填充完毕。在求解数独时候,运用到回溯法,将所有的解(问题的解空间)按照一定结构排列,再进行搜索。一般解空间构造成为为树状结构,用深度优先的策略搜索,一般有两种方式:1.只需要一个解的

37、话,找到解即停止。2.需要求出所有解,则需做“树的遍历”找到所有解。回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。回溯法是一种搜索算法,其基本思路是:在一个问题中,根据题意给出的边界条件划定出所有可能解的围(称为可能解),根据题意确定出约束条件。利用程序顺次在所有可能解中搜索时按照

38、深度搜索的方式进行。即在第一层选定一个满足约束条件的解,然后以该可能解为出发点,搜索第二层的一个可能解(试探)。如果搜索到第二层的一个可能解,则继续搜索第三层得一个可能解。依次类推,直到所有层得可能解都被找到,则得到了该问题的一个完整解。如果第二层所有的肯可能解都不满足约束条件,则返回第一层,放弃原有的可能解,使用第一层的下一个可能解(回溯)。一次类推,寻找第二层的一个可能解。回溯法相对于其他穷举的特点在于,不必把问题的每一层的所有可能解都遍历一遍,只要当前的可能解不满足约束条件就抛弃该解,寻求下一个可能解,而不必求解其余的下层解。当当前层得所有可能解都不满足约束条件,则回溯到上一层,抛弃上一

39、层的当前可能解。从以上分析中结合数独问题的规则,得出数独问题的约束条件为:每一格的数值围仅限1-9每一格的数字在当前行不允许重复每一格的数字在当前列不允许重复每一格的数字在当前小宫格不允许重复由此,回溯法通过约束条件的筛选,在所有解中除掉不可能的解,从而获得问题的一个或者全部解。3.3.2 检测填充结果根据数独游戏的规则,玩家填充81个宫格之后,要满足所有行,所有列和所有小九宫格不能出现重复的数字,并以此为条件进行检测。列检测首先对各列进行检测,提供了检测列9个数字是否有重复数据的方法checkLine (),该方法以此遍历列中的9个数字,当遍历到某个数字时,检测该数字后面的数字是否出现重复。

40、比如,当检测到第3个数字是7时,则检测第4-9个数字是否出现7,如果出现重复则停止检测,只有既可以避免重复检测,又可以避免遗漏。publicboolean checkLine(int col)/ 检查列是否符合要求 for(int j = 0;j < 8;j+) if(njcol = 0)continue; for(int k =j + 1;k< 9;k+)if(njcol = nkcol)returnfalse; returntrue;行检测类似于对列数据的检测,还需要对每行进行检测,因此程序提供了对行数据的检测方法checkRow (),该方法代码如下:publicboolea

41、n checkRow(int row)/检查行是否符合要求for(int j = 0;j < 8;j+)if(nrowj = 0)continue; for(int k =j + 1;k < 9;k+)if(nrowj = nrowk)returnfalse; returntrue;小九宫格检测除了对行和列的重复数据检测之外,还需要对小九宫格的所有数字进行检测,避免出现重复现象。检测原理与行,列检测一样,但需要计算九宫格数字的位置。Row和Col指定了检测九宫格的位置,数独单元格中一共有3×3个九宫格,Row和Col的围为0到2。用以下程序完成九宫格重复数字的检测。pub

42、licboolean checkNine(int row,int col)/检查3X3区域是否符合要求int j = row/3*3;/获得左上角的坐标int k = col/3*3;for(int i = 0;i < 8;i+)/循环比较if(nj + i/3k + i % 3 = 0)continue;for(int m = i+ 1;m < 9;m+)if(nj + i/3k + i % 3 = nj + m/3k + m % 3)returnfalse; returntrue; 3.4 游戏的测试和运行3.4.1游戏测试概述当游戏软件制作完成之后,为了验证本游戏是否存在缺陷

43、、能否达到预期的设计标,我们还需要在预设环境(如:模拟环境或真实移动终端设备)中进行调试和运行,以发现游戏中可能存在的问题和不足、解决这些缺陷,从而完善软件功能并进而提升产品质量。作为软件测试的重要组成部分,游戏测试具备软件测试的一切共同特性,但由于游戏本身又具有一定的特殊性,因而游戏测试主要由两个部分组成:(1)传统的软件测试由于测试是软件开发过程中极为重要的组成部分,因而针对软件本身的测试贯穿于软件存在的整个生命周期。首先,程序员需要在程序设计开发过程中按阶段对产生的模块集中测试,以保证系统各模块能实现各自的功能,在此阶段软件的测试一般主要集中在程序的细节部分。当软件制作开发出来之后,为保

44、证软件整体的完善性,还需要在软件工程理论的指导下对整个系统进行测试,这阶段的测试主要有黑盒测试和白盒测试。所谓黑盒测试就是把要测试的对象当作一个黑盒子,不需要知道里面是怎么处理的,只要对输入和输出数据进行测试,这种测试方案属于高端测试,主要是在操作层面对游戏进行测试;而白盒测试正好相反,基于白盒测试的测试方案属于低端测试,是对各种设计细节方面的测试,测试者必须对测试对象的部处理过程非常了解,对里面所有的分支和循环进行实验从而达到测试的目的。在进行软件测试的过程中,测试人员应根据需要把墨盒和白盒测试有效的结合,以达到发现软件错误并进而完善软件的目的。(2)对游戏性的测试由于游戏特别是在很大程度上

45、是对现实世界的一种模拟,因而它不但包含了人类社会的一部分特性,同时还涉与娱乐性、可玩性等独有特点,所以针对游戏的测试还包括三个部分:游戏情节的测试:主要是针对体现游戏主线的故事情节和游戏世界中的任务系统等进行测试。游戏世界的平衡测试:平衡性主要体现在经济平衡、能力平衡(包含技能、属性等等),测试的目的是为了能保证游戏世界的公平竞争。游戏文化的测试:比如整个游戏世界的风格,是中国文化主导,还是日风格等等,大到游戏整体,小到NPC 对话,比如一个书生,他的对话就必需斯文,不可以用江湖语言。目前在游戏开发过程中,对游戏性的测试主要有以下几种实现途径:一是通过部测试人员对以下的三个方面进行测试,由于他

46、们往往都是经过精选而来的职业玩家,对游戏有很深的认识,因而也能较好完成游戏的测试目标;二是邀请一定数量的玩家或游戏媒体人员对外围系统进行测试,其目的主要是测试游戏的可玩性和易用性,与一些外围的Bug;三是通过大围的测和公测,让更多的玩家进行试玩。3.4.2测试环境本游戏的测试环境包括两种,一种是基于 Android 虚拟设备AVD 的测试,在测试之前,首先要创建一个AVD。在测试游戏时选用的是基于Android 2.3的AVD。还有一种便是基于 Android 手机的测试,在测试之前,需要首先将游戏文件夹下的bin 目录下的游戏的apk 文件通过数据线传到Android 手机上,然后通过Android 手机上的第三方文件浏览器找到需要安装的apk 文件,即可安装。本人在基于 Android 手机的测试时,选用的手机为SONY WT19I,SONY WT19I的主要参数为:主屏尺寸:3.2 英寸;主屏色彩:彩屏,1600万

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论