连连看项目设计分析报告.docx

上传人:b****3 文档编号:5592009 上传时间:2023-05-08 格式:DOCX 页数:33 大小:2.60MB
下载 相关 举报
连连看项目设计分析报告.docx_第1页
第1页 / 共33页
连连看项目设计分析报告.docx_第2页
第2页 / 共33页
连连看项目设计分析报告.docx_第3页
第3页 / 共33页
连连看项目设计分析报告.docx_第4页
第4页 / 共33页
连连看项目设计分析报告.docx_第5页
第5页 / 共33页
连连看项目设计分析报告.docx_第6页
第6页 / 共33页
连连看项目设计分析报告.docx_第7页
第7页 / 共33页
连连看项目设计分析报告.docx_第8页
第8页 / 共33页
连连看项目设计分析报告.docx_第9页
第9页 / 共33页
连连看项目设计分析报告.docx_第10页
第10页 / 共33页
连连看项目设计分析报告.docx_第11页
第11页 / 共33页
连连看项目设计分析报告.docx_第12页
第12页 / 共33页
连连看项目设计分析报告.docx_第13页
第13页 / 共33页
连连看项目设计分析报告.docx_第14页
第14页 / 共33页
连连看项目设计分析报告.docx_第15页
第15页 / 共33页
连连看项目设计分析报告.docx_第16页
第16页 / 共33页
连连看项目设计分析报告.docx_第17页
第17页 / 共33页
连连看项目设计分析报告.docx_第18页
第18页 / 共33页
连连看项目设计分析报告.docx_第19页
第19页 / 共33页
连连看项目设计分析报告.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

连连看项目设计分析报告.docx

《连连看项目设计分析报告.docx》由会员分享,可在线阅读,更多相关《连连看项目设计分析报告.docx(33页珍藏版)》请在冰点文库上搜索。

连连看项目设计分析报告.docx

连连看项目设计分析报告

芜湖职业技术学院

信息工程学院

电子信息工程技术

智能路径检索系统

(2013/2014学年第一学期)

小组成员:

组长:

熊韩玉

组员:

李明杰任欢庆潘宾宾

陶志超欧俊杰

指导老师:

李长波

2013年11月20日

目录

1、需求分析·········································3

1.1、功能分析·····································3

1.2、设计任务·····································3

2、设计正文·········································3

2.1、设计分析·····································3

2.1.1、连连看算法设计····························3

2.2、类的实现方法·································4

2.2.1、成员变量··································4

2.2.2、设计方法··································4

2.2.3、设计流程图································5

3、测试分析·········································5

3.1、程序运行情况·································5

3.2、测试计划与分析·······························8

3.2.1、路径分析··································8

3.2.2、检验的先后顺序····························8

3.2.3、程序代码··································8

4、课程设计总结·····································22

5、参考文献·········································23

 

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 鼠标处理事件 接口方法 

图二  方法定义

2.2.3 设计流程图

 

3.测试分析 

3.1 程序运行情况 

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

 

3.2 测试计划及分析 

3.2.1路径分析 

在检测两张图片是否可以消除之前首先要判断两图之间的路径,因为图于图之间可以有很多条路径有些路径是可行的有些路径是不可行的,在检测中当路径不满足游戏条件时,则继续检测,一直到检测到一条满足游戏条件的路径时,停止检测并按此路径进行连接。

当找到满足游戏条件的路径时,立刻按检测到的路径进行图片的连接,之后便消除连接的两张图片。

3.2.2 检验的先后顺序 

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

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

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

3.2.3 程序代码

ackage com.automan; 

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

import java.util.ArrayList; 

import java.util.Arrays; 

import java.util.List; 

import java.util.Random; 

 

import com.automan.CtrlView.Point;

  

import android.content.Context; 

import android.graphics.Bitmap; 

import android.graphics.Canvas; 

import android.graphics.Color; 

import android.graphics.Paint; 

import android.graphics.Rect; 

import android.graphics.drawable.Drawable; 

import android.util.AttributeSet; 

import android.util.Log; 

import android.view.View;

public class GameView extends View {

public final int row=10;  

public final int col=10;  

public float width;  

public float height;   

private int selY;  

private int selX; 

public boolean isLine=false;  

public int grid[][]=new int[row][col];  

private Rect selRect = new Rect();  

public int lineType=0;  

public final int V_LINE=1;  

public final int H_LINE=1;  

public final int ONE_C_LINE=2;  

public final int TWO_C_LINE=3;  

public int much=0;  Point[] p; 

public int[] imageType=new int[]{

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 

}; 

Public Bitmap[] image; 

Public List type=new ArrayList();   

Public GameView(Context context, AttributeSet attrs) {          super(context, attrs);         

this.setFocusable(true);    

this.setFocusableInTouchMode(true); 

Public GameView(Context context, AttributeSet attars, int defStyle) {       super(context, attrs, defStyle);       

this.setFocusable(true); 

   this.setFocusableInTouchMode(true);   

}

public void reset()  

{     

public void fillImage(Context context)  

{   

int lth=imageType.length;   

image=new Bitmap[lth];   

for(int i=0;i

{    

Bitmap bitmap = Bitmap.createBitmap((int)width, (int)height, Bitmap.Config.ARGB_8888); 

   Drawable drw; 

   Canvas canvas = new Canvas(bitmap); 

  drw=context.getResources().getDrawable(imageType[i]); 

     drw.setBounds(1,1, 30, 30);          

drw.draw(canvas);          

image[i] = bitmap;   

public void initType()  

{

Log.e("gametest","inittype");   

int size=(row-2)*(col-2);   

int count=size/imageType.length;   

for(int j=0;j

{    

for(int i=0;i

{     

type.add(imageType[j]); 

   } 

  } 

public void select(int x,int y)  

{   

invalidate(selRect); 

selX =Math.min(Math.max(x,0),9);   

selY=Math.min(Math.max(y,0),9);   

getRect(selX,selY,selRect);   

invalidate(selRect); 

private void getRect(int x,int y,Rect rect)  

{   

rect.set((int)(x*width),(int)( y*height), (int)(x*width+width),(int) (y*height+height)); 

}  

@Override 

protected void onDraw(Canvas canvas){   

Paint background= new Paint();   

background.setColor(Color.WHITE); 

canvas.drawRect(0, 0,getWidth(),getHeight(),background);   

  Paint hilite= new Paint(); 

  hilite.setColor(getResources().getColor(R.color.hilite));   

Paint light= new Paint(); 

  light.setColor(getResources().getColor(R.color.light));    

  for (int i=0;i<9;i++)   

{    

canvas.drawLine(0, i * height,getWidth(),i * height,light);    canvas.drawLine(0,i * height+1,getWidth(),i * height+1,hilite);    canvas.drawLine(i * width,0,i * width,getHeight(),light);    

canvas.drawLine(i * width+1,0,i * width+1,getHeight(),hilite);  } 

if(CtrlView.CURRENT_CH)   

{    

Paint selected= new Paint();  

   selected.setColor(getResources().getColor(R.color.puzzle_selected));    canvas.drawRect(selRect, selected);   

}  

for (int i=0;i<9;i++)   

{    

for (int j=0;j<9;j++)    

{     

if(grid[i][j]!

=0)     

{      

canvas.drawBitmap(image[Arrays.binarySearch(imageType, grid[i][j])], i*width, 

j*height, null); 

    } 

   } 

}      

if(isLine)   

{

Paint lineColor= new Paint();    

lineColor.setColor(Color.RED);   

 

  switch(lineType)    

{     

case V_LINE:

 

  

canvas.drawLine(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:

 

  

 

canvas.drawLine(p[0].x*width+width/2,iip[0].y*height+height/2,p[1].x*width+width/2,ip[1].y*height+height/2, lineColor); 

 

 canvas.drawLine(p[1].x*width+width/2i,p[1].y*height+height/2,p[2].x*width+width/2,p[2].y*height+height/2, lineColor); 

     break; 

case TWO_C_LINE:

canvas.drawLine(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); 

  

canvas.drawLine(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); 

  

canvas.drawLine(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;      

}    

super.onDraw(canvas); 

}

@Override 

protected void onSizeChanged(int w, int h, int oldw, int oldh) {  Log.e("gametest","sizechanged");   

width=w/row;   

height=h/col; 

//getRect(1,1,selRect);   

fillImage(this.getContext()); 

super.onSizeChanged(w, h, oldw, oldh); 

public void initGrid()  

{   

Log.e("gametest","initGrid");   

Random ad=new Random();   

for(int i=0;i

{    

for(int j=0;j

{     

if(i==0 || i==row-1 || j==0 || j==col-1)     

{      

grid[i][j]=0; 

    }  

else

{       

 if(type!

=null && type.size()>0)      

{       

int index=ad.nextInt(type.size());       

grid[i][j]=type.get(index);       

type.remove(index); 

  }       

}      

}

第二部分

package com.automan;  

import java.util.ArrayList; 

import java.util.LinkedList; 

import java.util.List; 

import java.util.Random;  

import android.content.Context; 

import android.os.Handler; 

import android.os.Message; 

import android.util.AttributeSet; 

import android.view.MotionEvent;   

public class CtrlView extends GameView{  

public final int GAMETIME=300;  

public final int UPTIME=1;  

public int PROCESS_VALUE=300;  

public static boolean CURRENT_CH=false;  

public int CURRENT_TYPE=0;  

private Point C_POINT;  

private Point P_POINT;

LinkedList li;  

public CtrlView(Context context, AttributeSet attrs) {  

su

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2