智能移动终端应用开发设计报告Android-欢乐连连看.doc

上传人:b****3 文档编号:2493625 上传时间:2022-10-30 格式:DOC 页数:24 大小:1.28MB
下载 相关 举报
智能移动终端应用开发设计报告Android-欢乐连连看.doc_第1页
第1页 / 共24页
智能移动终端应用开发设计报告Android-欢乐连连看.doc_第2页
第2页 / 共24页
智能移动终端应用开发设计报告Android-欢乐连连看.doc_第3页
第3页 / 共24页
智能移动终端应用开发设计报告Android-欢乐连连看.doc_第4页
第4页 / 共24页
智能移动终端应用开发设计报告Android-欢乐连连看.doc_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

智能移动终端应用开发设计报告Android-欢乐连连看.doc

《智能移动终端应用开发设计报告Android-欢乐连连看.doc》由会员分享,可在线阅读,更多相关《智能移动终端应用开发设计报告Android-欢乐连连看.doc(24页珍藏版)》请在冰豆网上搜索。

智能移动终端应用开发设计报告Android-欢乐连连看.doc

——学院

XX学院

智能移动终端应用开发

设计报告

(20XX/20XX学年第X学期)

题目:

欢乐连连看

专业:

XXXXXX

小组成员:

设计成绩:

20XX年XX月XX日

1.需求分析

1.1功能分析

每次用户选择两个图形,如果图形满足一定条件(两个图形一样,且这两个图形之间存在转弯少于3的路径),则两个图形都能消掉。

给定任意具有相同图形的两个格子,我们需要寻找这两个格子之间在转弯最少的情况下,经过格子数目最少的路径。

如果这个最优路径的转弯数目少于3,则这两个格子可以消去。

将界面中相同的图片消去,游戏限时1000秒,如果在规定的时间内没有完成,就会跳出对话框“时间耗尽了,你输了:

(”的字样。

如果玩家赢了这局,则弹出“非常棒,你赢了!

在经典的最短路问题中,我们需要求出经过格子数目最少的路径。

而这里,要保证转弯数目最少,需要把最短路问题的目标函数修改为从一个点到另一个点的转弯次数。

虽然,目标函数修改了,但算法的框架仍然可以保持不变。

广度优先搜索是解决经典最短路问题的一个思路。

我们看看在新的目标函数(转弯数目最少)下,如何用广度优先搜索来解决图形A(x1,y1)和图形B(x2,y2)之间的最短路问题。

1.2设计任务

1、明确软件实用性,设计本次软件;

2、深入学习和理解android开发平台,掌握android软件开发机制和方法;

3、深入分析连连看软件功能流程图;

4、应用软件工程思想,小组合作完成需求分析到代码设计并完成测试;

5、按照格式要求撰写设计报告。

2.设计正文

2.1设计分析

2.1.1连连看算法设计

在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。

分3种情况:

(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。

这样就会有三条路经。

若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了。

1)相邻

2)若不相邻的先在第一个按钮的同行找一个空按钮。

1).找到后看第二个按钮横向到这个空按钮所在的列是否有按钮。

2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。

3).没有的话,再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。

没有的话路经就通了,可以消了.

3)若2失败后,再在第一个按钮的同列找一个空按钮。

1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。

没有的话,再从与第一个按钮同列的那个空按钮横向到与第二个按钮同列看是否有按钮。

没有的话路经就通了,可以消了。

4)若以上三步都失败,说明这两个按钮不可以消去。

2.2类的实现方法

2.2.1成员变量

成员变量也叫类的属性,一般带有访问控制属性的,而全局变量虽然也有类的属性,但全局变量严重影响了封装和模块化,一般的全局变量前面要加上static和fina属性其中,static使该变量任何类都可用(方法ClassName.全局变量名),而fina则使得变量不可更改,基本上算是常量了,这也在一定程度上防止对变量的非法修改。

成员变量描述

变量类型

名称

文件

File

File

文件区

Jtextarea

Textarea

菜单项

Jmenuitem

Menuitem_copy

菜单

Umenuitem

Umenuitem

标签

Jlabel

Label_seek

文件名

String

Seel

图一成员变量

2.2.2方法设计

方法名称为任何合乎语法的识别字,返回值类型是方法执行结果返回给调用者的数据类型,void表示没有返回值,参数行(parameter list)是调用时给予的参数声明,两个以上的参数声明以逗号隔开,若没有参数则参数行为空白,调用时每一个参数对应一个参数值(argument)大括号内为方法本体,也称为方法程序模块(block),包含声明(declarations)和语句(statements),声明也可以掺杂在语句之间。

一个方法不能声明在另一个方法内。

方法名

功能

备注

MyTextEditor

创建文本编辑器

构造方法

Dialog

创建对话框

addMenu

添加菜单栏菜单项

writeToFile

向文本区写文件

readFromFile

读文件

openDialog

打开文件

saveDialog

保存对话框

actionPerformed

事件处理

itemStateChanged

ItemListener事件处理方法

mouseClicked

鼠标处理事件

接口方法

mouseEvent

鼠标处理事件

接口方法

mouseReleased

鼠标处理事件

接口方法

mouseEntered

鼠标处理事件

接口方法

mouseExit

鼠标处理事件

接口方法

mouseDragged

鼠标处理事件

接口方法

Main

程序开始运行

图二方法定义

2.2.3设计流程图

3.测试分析

3.1程序运行情况

连连看游戏规则很简单,就是点中两个互相匹配并且可以通过不多于两个折点的折线连在一起的方块后,这两个方块就可以消掉。

图三游戏开始界面

图四游戏赢了的界面

图五游戏时间耗尽时的界面

3.2测试计划及分析

3.2.1最短路径分析

由于用户每次只能消除一对图形,即只会用到一个最短路径,但由于实现并不知道用户会选择哪一对图形,所以需要事先计算出所有可能的最短路径并保存起来。

此外,采用这种方法的话似乎每次用户消去一对相同图像之后都需要重新计算出当前所有可能被连接的相同图形之间最短路径,这是因为当某些图像被消去之后可能会产生很多新路径,而我们又不能确定这些空出来的格子到底能够影响哪些路径,所以就只好都重新计算一遍。

其缺点很明显就是每次消去图形动作之后重新计算所有可能的最短路径所需要消耗的时间;而该方法的优点则是可以很快地判断两个相同图形之间是否存在满足条件的最短路径。

如果用户很厉害,每次都能选中可以消除的图形对,那么用这种方法浪费的时间就会相当可观,毕竟用户未选中的其他可以连接的图形对之间的最短路径都被浪费掉了;而如果用户很差劲,每轮选择的次数都远远大于当前可能的连接数量时,该方法就会比书中正文提到的方法高效。

但这种情况是比较少的,因为在整个游戏中用户主要是会用眼睛“找”而不是频繁的用鼠标去“试”。

所以总的来看,维护所有最短路径的方法的效率相对比较低。

3.2.2检验的先后顺序

在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。

所以,这里应该先检验配对,如果该条件不成立的话,就不要再进行连线检查了,这样可以避免很多不必要的复杂运算。

当然,如果你在做这个游戏的时候,配对规则不够如此简单的话,那么就看哪个算起来麻烦就把它放在后面。

3.2.3程序代码

packagecom.automan;

//画出网格,并对应的画上分布好图像

importjava.util.ArrayList;

importjava.util.Arrays;

importjava.util.List;

importjava.util.Random;

importcom.automan.CtrlView.Point;

importandroid.content.Context;

importandroid.graphics.Bitmap;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.Rect;

importandroid.graphics.drawable.Drawable;

importandroid.util.AttributeSet;

importandroid.util.Log;

importandroid.view.View;

publicclassGameViewextendsView{

publicfinalintrow=10;

publicfinalintcol=10;

publicfloatwidth;

publicfloatheight;

privateintselY;

privateintselX;

publicbooleanisLine=false;

publicintgrid[][]=newint[row][col];

privateRectselRect=newRect();

publicintlineType=0;

publicfinalintV_LINE=1;

publicfinalintH_LINE=1;

publicfinalintONE_C_LINE=2;

publicfinalintTWO_C_LINE=3;

publicintmuch=0;

Point[]p;

publicint[]imageType=newint[]{

R.drawable.aa,

R.drawable.bb,

R.drawable.cc,

R.drawable.dd,

R.drawable.ee,

R.drawable.ff,

R.drawable.gg,

R.drawable.hh,

R.drawable.ii,

R.drawable.jj,

R.drawable.kk,

R.drawable.ll,

R.drawable.mm,

R.drawable.nn,

R.drawable.oo,

R.drawable.pp

};

publicBitmap[]image;

publicListtype=newArrayList();

publicGameView(Contextcontext,AttributeSetattrs){

super(context,attrs);

this.setFocusable(true);

this.setFocusableInTouchMode(t

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1