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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XX学院
智能移动终端应用开发
设计报告
(20XX/20XX学年第X学期)
题目:欢乐连连看
专业:XXXXXX
小组成员:
设计成绩:
20XX年XX月XX日
1.需求分析
功能分析
每次用户选择两个图形,若是图形知足必然条件(两个图形一样,且这两个图形之间存在转弯少于3的路径),则两个图形都能消掉。

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

若是这个最优路径的转弯数量少于3 ,则这两个格子可以消去。

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

若是玩家赢了这局,则弹出“超级棒,你赢了!”
在经典的最短路问题中,咱们需要求出通过格子数量最少的路径。

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

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

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

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

设计任务
一、明确软件实用性,设计本次软件;
二、深切学习和理解android开发平台,掌握android软件开发机制和方式;
3、深切分析连连看软件功能流程图;
4、应用软件工程思想,小组合作完成需求分析到代码设计并完成测试;
五、依照格式要求撰写设计报告。

2.设计正文
设计分析
连连看算法设计
在查验两个方块可否消掉的时候,咱们要让两个方块同时知足两个条件才行,就是二者配对而且连线成功。

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

这样就会有三条路经。

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

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

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

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

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

没有的话路经就通了,可以消了.
3) 若2失败后,再在第一个按钮的同列找一个空按钮。

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

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

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

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

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

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

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

方法名功能备注
MyTextEditor 创建文本编辑器构造方法
Dialog 创建对话框
addMenu 添加菜单栏菜单项
writeToFile 向文本区写文件
readFromFile 读文件
openDialog 打开文件
saveDialog 保存对话框
actionPerformed 事件处理
itemStateChanged ItemListener事件处理
mouseClicked 鼠标处理事件接口方法
mouseEvent 鼠标处理事件接口方法
mouseReleased 鼠标处理事件接口方法
mouseEntered 鼠标处理事件接口方法
mouseExit 鼠标处理事件接口方法
mouseDragged 鼠标处理事件接口方法
图二方式概念
设计流程图
3.测试分析
程序运行情况
连连看游戏规则很简单,就是点中两个彼此匹配而且可以通过不多于两个折点的折线连在一路的方块后,这两个方块就可以够消掉。

图三游戏开始界面
图四游戏赢了的界面
图五游戏时间耗尽时的界面
测试计划及分析
最短路径分析
由于用户每次只能消除一对图形,即只会用到一个最短路径,但由于实现并非知道用户会选择哪一对图形,所以需要事前计算出所有可能的最短路径并保留起来。

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

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

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

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

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

查验的前后顺序
在查验两个方块可否消掉的时候,咱们要让两个方块同时知足两个条件才行,就是二者配对而且连线成功。

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

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

程序代码
package ;
etDrawable(imageType[i]);
(1,1, 30, 30);
(canvas);
image[i] = bitmap;
}
}
public void initType()
{
("gametest","inittype");
int size=(row-2)*(col-2);
int count=size/;
for(int j=0;j<;j++)
{
for(int i=0;i<count;i++)
{
(imageType[j]);
}
}
}
public void select(int x,int y)
{
invalidate(selRect);
selX =(x,0),9);
selY=(y,0),9);
getRect(selX,selY,selRect);
invalidate(selRect);
}
private void getRect(int x,int y,Rect rect)
{
((int)(x*width),(int)( y*height), (int)(x*width+width),(int) (y*height+height));
}
@Override
protected void onDraw(Canvas canvas) {
Paint background= new Paint();
;
(0, 0,getWidth(),getHeight(),background);
Paint hilite= new Paint();
(getResources().getColor Paint light= new Paint();
(getResources().getColor
for (int i=0;i<9;i++)
{
(0, i * height,getWidth(),i * height,light);
(0,i * height+1,getWidth(),i * height+1,hilite);
(i * width,0,i * width,getHeight(),light);
(i * width+1,0,i * width+1,getHeight(),hilite);
}
if
{
Paint selected= new Paint();
(getResources().getColor (selRect, selected);
}
for (int i=0;i<9;i++)
{
for (int j=0;j<9;j++)
{
if(grid[i][j]!=0)
{
(image[(imageType, grid[i][j])], i*width, j*height, null);
}
}
}
if(isLine)
{
Paint lineColor= new Paint();
;
switch(lineType)
{
case V_LINE:
(p[0].x*width+width/2,p[0].y*height+height/2,p[1].x*width+width/2,p[1].y*height+height/2, lineColor);
break;
case ONE_C_LINE:
(p[0].x*width+width/2,p[0].y*height+height/2,p[1].x*width+width/2,p[1].y*height+height/2, lineColor);
(p[1].x*width+width/2,p[1].y*height+height/2,p[2].x*width+width/2,p[2].y*height+height/2, lineColor);
break;
case TWO_C_LINE:
(p[0].x*width+width/2,p[0].y*height+height/2,p[1].x*width+width/2,p[1].y*height+height/2, lineColor);
(p[1].x*width+width/2,p[1].y*height+height/2,p[2].x*width+width/2,p[2].y*height+height/2, lineColor);
(p[3].x*width+width/2,p[3].y*height+height/2,p[2].x*width+width/2,p[2].y*height+height/2, lineColor);
break;
default:
break;
}
}
(canvas);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
("gametest","sizechanged");
width=w/row;
height=h/col;
*/
private ProgressBar pb;
private CtrlView cv;
public static final int START_ID=;
public static final int REARRARY_ID=+1;
public static final int END_ID=REARRARY_ID+1;
@Override
public void onCreate(Bundle savedInstanceState) {
(savedInstanceState);
setContentView findViews();
(1000);
}
private RefreshHandler mRedrawHandler = new RefreshHandler();
class RefreshHandler extends Handler {
@Override
public void handleMessage(Message msg) {
run();
}
public void sleep(long delayMillis) {
(0);how();
}
else if!=0 && ==0)
{
(false);
,"非常棒你赢了!:)", .show();
}
}
private void findViews()
{
pb=(ProgressBar)findViewById cv=(CtrlView)findViewById ;
(-1);
;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
课程设计总结
这次课程设计使我们知道了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的进程中碰到问题,可以说得是困难重重,不过通过咱们小组认真的讨论,和向老师请教许多问题取得了解决。

在这次课设中咱们发现了自己的许多不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固,但通过这次课程设计以后,咱们把以前所学过的知识从头温故,对Java,android有了更深切的了解。

这次课设不仅增强了咱们的团队协作能力,还让咱们的思维更活跃,我相信在咱们未来的学习中会记住从本次课程设计中所学到的东西,并将它用到未来的学习中去。

在这里谢谢老师的指导,咱们会加倍尽力的学习。

5. 参考文献
[1]ED 基础教程(第三版).人民邮电出版社.2010年8月
[2] 徐明浩.Java编程基础、应用与实例.人民邮电出版社.2005年10月
[3]Bruce Eckkel .Java编程思想.机械工业出版社.2007年6月。

相关文档
最新文档