软件工程结对项目——连连看

小组成员:3班程阳洋,1班谭希敏

小组分工

 

程阳洋

1.UI设计

2.折点算法

3.变换关卡刷新界面

谭希敏

1.需求分析

2.时间,按钮监听

3.声音处理

 


第一章  同类产品比较

软件工程结对项目——连连看_第1张图片 

第二章  系统调研

2.1技术可行性

Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:pythonluatclphp等等),还有其他诸如:Qtqt for android)、Monomono for android)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序。

2.2经济可行性

纵观社会现象,第一,越来越多的人使用智能移动通讯工具,其中安卓系统占据大部分份额;第二,“低头族”的队伍越发壮大,许多人士在乘坐交通工具通过手机,iPad进行娱乐放松

第三,手机游戏当下较流行,多数经典游戏(如棋类游戏,俄罗斯方块)并没有被时代淘汰,连连看也一样,在原来的基础上加上新的创意依然不减“风采”。所以可以得出的结论是:此款休闲娱乐小游戏开发人员少,开发成本低而且,但是可能获得巨大成功,至少有一点是可以提高开发者的编程经历。

2.3操作可行性

该游戏支持安卓系统,而现今市场安卓和苹果系统占据主导作用,绝大部分用户可以使用

第三章 开发目标

3.1开发意图

此款游戏不但有娱乐放松的功能,而且它可以增进朋友,家人…之间的感情,再则它还可满足在玩中学习的功能不仅仅局限于锻炼逻辑能力与反应能力。

3.2开发环境

安装JDK

安装Eclipse

安装Android SDK

安装ADT

 

 

第四章 游戏介绍

4.1核心技术

软件工程结对项目——连连看_第2张图片

4.2功能逻辑结构图

软件工程结对项目——连连看_第3张图片


第五章  项目完成及测试

 5.1关键代码

      5.1.1 给图片增加属性,以便完成两张不同资源图片的消除(英文和图片)。    

public int getId(int res){
         	if(res==1){
			id=1;}
		if(res==2){
			id=1;}
		}
      5.1.2棋盘初始化

public void intGrid() {
		Random ad = new Random();
		for (int i = 0; i < row; i++) {
			for (int j = 0; j < col; 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);
					}}}}}

      5.1.3折点连通算法(直连型、一折型、两折型)

          5.1.3.1直连型

                     直连性又分为两种情况:横向直连,纵向直连。
                       首先是横向检测:

private function horizon(a:Point,b:Point):Boolean 
{
        if (a.x == b.x && a.y == b.y) return false;  //如果点击的是同一个图案,直接返回false;
        var x_start:int = a.y < b.y?a.y:b.y;        //获取a,b中较小的y值
        var x_end:int = a.y < b.y?b.y:a.y;          //获取a,b中较大的值
        //遍历a,b之间是否通路,如果一个不是就返回false;
        for (var i:int = x_start + 1; i < x_end;i ++ ) 
        {
                if (mapData[a.x][i] != 0) 
                {
                        return false;
                }
        }
        return true;
}

                       其次纵向连通:

private function vertical(a:Point,b:Point):Boolean 
{
        if (a.x == b.x && a.y == b.y) return false;
        var y_start:int = a.x < b.x?a.x:b.x;
        var y_end:int = a.x < b.x?b.x:a.x;
        for (var i:int = y_start + 1; i < y_end; i ++ ) 
        {
                if (mapData[i][a.y] != 0) 
                {
                        return false;
                }
        }
        return true;
}

           5.1.3.2一折型

                      如果一个拐角能连通的话,则必须存在C、D两点。其中C点的横坐标和B相同,纵坐标与A相同,D的横坐标与A相同,纵坐标与B相同

* a(4,2) , b(2,7)
* c(2,2) , d(4,7)
private function oneCorner(a:Point,b:Point):Boolean 
{
        var c:Point = new Point(b.x, a.y);
        var d:Point = new Point(a.x, b.y);
        //判断C点是否有元素                
        if (mapData[c.x][c.y] == 0) 
        {
                var path1:Boolean = horizon(b, c) && vertical(a, c);
                return path1;
        }
        //判断D点是否有元素
        if (mapData[d.x][d.y] == 0) 
        {
                var path2:Boolean = horizon(a, d) && vertical(b, d);
                return path2;
        }else 
        {
                return false;
        }
                        
}

           5.1.3.3两折型

                      这个比较复杂,如果两个拐角能连通的话,则必须存在图中所示的连线,这些连线夹在A、B的横、纵坐标之间,这样的线就以下这个                         类存储,direct是线的方向,用0、1表示不同的方向.

private function scan(a:Point,b:Point):Vector. 
{
        linkList = new Vector.();
        //检测a点,b点的左侧是否能够垂直直连
        for (var i:int = a.y; i >= 0; i -- ) 
        {
                if (mapData[a.x][i] == 0 && mapData[b.x][i] == 0 && vertical(new Point(a.x,i),new Point(b.x,i))) 
                {
                        linkList.push(new Line(new Point(a.x,i),new Point(b.x,i),0));
                }
        }
        //检测a点,b点的右侧是否能够垂直直连
        for (i = a.y; i < col;i ++ ) 
        {
                if (mapData[a.x][i] == 0 && mapData[b.x][i] == 0 && vertical(new Point(a.x,i),new Point(b.x,i))) 
                {
                        linkList.push(new Line(new Point(a.x,i),new Point(b.x,i),0));
                }
        }
        //检测a点,b点的上侧是否能够水平直连
        for (var j:int = a.x; j >= 0; j -- ) 
        {
                if (mapData[j][a.y] == 0 && mapData[j][b.y] == 0 && horizon(new Point(j,a.y),new Point(j,b.y))) 
                {
                        linkList.push(new Line(new Point(j, a.y), new Point(j, b.y), 1));
                }
        }
        //检测a点,b点的下侧是否能够水平直连
        for (j = a.x; j < row; j ++ ) 
        {
                if (mapData[j][a.y] == 0 && mapData[j][b.y] == 0 && horizon(new Point(j,a.y),new Point(j,b.y))) 
                {
                        linkList.push(new Line(new Point(j, a.y), new Point(j, b.y), 1));
                                
                }
        }
                        
        return linkList;
}

5.2项目截图

5.2.1欢迎界面  

软件工程结对项目——连连看_第4张图片

5.2.2相关界面

(主界面                                          模式选择                                           游戏规则)

软件工程结对项目——连连看_第5张图片  软件工程结对项目——连连看_第6张图片   软件工程结对项目——连连看_第7张图片

(冒险模式                                       开始游戏                                            意见反馈)

软件工程结对项目——连连看_第8张图片  软件工程结对项目——连连看_第9张图片   软件工程结对项目——连连看_第10张图片

5.2.3游戏模式

冒险模式——水果派对(美食狂欢 蔬菜大战 都类似)

闯关模式中一共有8个关卡,每个关卡均有所变化,比如相除方块后剩余方块向外扩散 向内收缩 向左向右等等

软件工程结对项目——连连看_第11张图片

经典模式

软件工程结对项目——连连看_第12张图片

禅模式

软件工程结对项目——连连看_第13张图片

5.5项目下载体验

http://pan.baidu.com/s/1pJJmS8z

你可能感兴趣的:(软件工程,移动,android,手机游戏,创意,软件工程)