小组成员:3班程阳洋,1班谭希敏
小组分工:
程阳洋 |
1.UI设计 2.折点算法 3.变换关卡刷新界面 |
谭希敏 |
1.需求分析 2.时间,按钮监听 3.声音处理 |
在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:python、lua、tcl、php等等),还有其他诸如:Qt(qt for android)、Mono(mono for android)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序。
纵观社会现象,第一,越来越多的人使用智能移动通讯工具,其中安卓系统占据大部分份额;第二,“低头族”的队伍越发壮大,许多人士在乘坐交通工具通过手机,iPad进行娱乐放松
第三,手机游戏当下较流行,多数经典游戏(如棋类游戏,俄罗斯方块)并没有被时代淘汰,连连看也一样,在原来的基础上加上新的创意依然不减“风采”。所以可以得出的结论是:此款休闲娱乐小游戏开发人员少,开发成本低而且,但是可能获得巨大成功,至少有一点是可以提高开发者的编程经历。
该游戏支持安卓系统,而现今市场安卓和苹果系统占据主导作用,绝大部分用户可以使用
此款游戏不但有娱乐放松的功能,而且它可以增进朋友,家人…之间的感情,再则它还可满足在玩中学习的功能不仅仅局限于锻炼逻辑能力与反应能力。
安装JDK
安装Eclipse
安装Android SDK
安装ADT
第五章 项目完成及测试
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.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欢迎界面
5.2.2相关界面
(主界面 模式选择 游戏规则)
(冒险模式 开始游戏 意见反馈)
5.2.3游戏模式
冒险模式——水果派对(美食狂欢 蔬菜大战 都类似)
闯关模式中一共有8个关卡,每个关卡均有所变化,比如相除方块后剩余方块向外扩散 向内收缩 向左向右等等
经典模式
禅模式
5.5项目下载体验
http://pan.baidu.com/s/1pJJmS8z