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

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

小组分工

 

程阳洋

1.UI设计

2.折点算法

3.变换关卡刷新界面

谭希敏

1.需求分析

2.时间,按钮监听

3.声音处理

 


第一章  同类产品比较

 

第二章  系统调研

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核心技术


4.2功能逻辑结构图



第五章  项目完成及测试

 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.<Line> 
{
        linkList = new Vector.<Line>();
        //检测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欢迎界面  


5.2.2相关界面

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

     

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

     

5.2.3游戏模式

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

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


经典模式


禅模式


5.5项目下载体验

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值