APP下载

Android 平台连连看游戏控制逻辑设计与实现

2017-03-27孔祥龙

电脑知识与技术 2017年3期

孔祥龙

摘要:该文介绍了连连看游戏的控制逻辑设计,以及在Android平台的实现过程。提供一个设计Android手机游戏的参考案列,该游戏可运行于以 Android作为操作系统的手机。

关键词 :可通;控制逻辑;伪代码

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)03-0206-03

1 背景

Android手机开发平台被称为“第一个真正开放的手机开发平台”,学会Android平台的应用对于手机应用程序的开发有非常重要的意义。

连连看游戏规则简单,容易上手,是一款适合大众的经典休闲小游戏,所以将它移植到广泛使用的Android手机开发平台上就很有意义。

连连看游戏的规则是只要将相同的两个图标用三条以内的直线连在一起就可以消除这两个图标,这三條以内的直线都不能经过非空闲区(有图标的方块)。所有的图标在规定的时间内全部消除完毕则取胜,如果在规定的时间内没有消完则失败。

控制逻辑可分为三种情况,分别是在一条直线上可通的判断,两条直线上可通的判断(转一个弯)和三条直线上可通的判断(转两个弯)。

2 控制逻辑设计

2.1 同一条直线上的算法实现

同一条直线上分为水平(如图1,从点1到点2)和垂直(如图2,从点1到点2)两种情况,这两种情况相似。

如果两个选中的图标在一条直线上有可通的路径,则它们只需要一条直线就可以连接。

这时我们可以用一个循环从一个点扫描到另一个点,查看它们之间的路径上是否有障碍。如果没有障碍则这两个点可消,否则不可消。

此算法实现的伪代码如下:

public boolean Vertical(Point a , Point b)//垂直方向可通的算法

{

int start,end; //start,end分别为所选图标起点和终点的一个坐标

if(a.x==b.x&&a.y==b.y) //如果两次所选是同一点则退出

return false; //返回不可通标记

start=Math.min(a.y,b.y); //取两点中纵坐标小的点为起始点的纵坐标

end=Math.max(a.y,b.y); //取两点中纵坐标大的点为终点的纵坐标

for(int i=start+1; i

if(Grid[a.x][i]!=0) //此点不通

return false; //有任意一点不通则所选的两点之间便垂直方向不通

p = new Point [] {a,b}; //此两点可通,记录下这两点的坐标

LineType=V_LINE; //标记可通类型为“垂直可通”

return true; //返回可通标记

}

public boolean Horizontal(Point a , Point b) //水平方向可通的算法

{

int start,end; //start,end分别为所选图标起点和终点的一个坐标

if(a.x==b.x&&a.y==b.y) //如果两次所选是同一点则退出

return false; //返回不可通标记

start=Math.min(a.x,b.x); //取两点中横坐标小的点为起始点的横坐标

end=Math.max(a.x,b.x); //取两点中横坐标大的点为终点的横坐标

for(int i=start+1;i

if(Grid[i][a.y]!=0) //此点不通

return false; //有任意一点不通则所选的两点之间便水平方向不通

p = new Point[]{a,b};//此两点可通,记录下这两点的坐标

LineType=H_LINE; //标记可通类型为“水平可通”

return true; //返回可通标记

}

2.2 转一个弯算法实现

如图3所示,转一个弯,可以先看它们的对角点3,如果3这个点没有图标,再测试3和1是否是垂直可通并且3和2是否是水平可通。如果条件都成立则1和2是转一个弯可通的。

如图4所示,同样的道理。如果对角点3处没有图标,并且3和1水平可通,3和2垂直可通,则1和2是转一个弯可通的。

当然上面两种情况都是转一个弯可通,它们都需要2条直线相连。

此算法实现的伪代码如下:

public boolean oneCorner(Point a , Point b) //转一个弯可通的算法

{

Point c = new Point(a.x,b.y); //定义第一个点为所选两点的对角点

Point d = new Point(b.x,a.y); //定义第二个点为所选两点的另一个对角点

if(Grid[c.x][c.y]==0) //判断第一个对角点是否可通

{

//判断对角点和所选两点是否分别垂直可通和水平可通

boolean x1 = Vertical(c,a) && Horizontal(c,b);

//可通则保存对角点和所选两点的坐标

p = new Point [] {a, new Point (c.x,c.y),b};

LineType=ONE_CORNER;//

return x1;

}

if(Grid[d.x][d.y]==0)

{

boolean x2 = Vertical(d,b) && Horizontal(d,a);

p = new Point [] {a , new Point (d.x,d.y) , b};

LineType=ONE_CORNER; //標记可通类型为“转一个弯可通”

return x2; //返回是否可通标记

}

return false; //返回不通标记

}

图3 二直线可通(1) 图4 二直线可通(2)

2.3 转二个弯算法实现

如图5、6、7、8、9所示,我们通过观察这5张图可以发现转二个弯可通的这5种类型的图形都过3和4这两点。这样我们可以用4个循环分别从1和2两点的上、下、左、右四个方向扫描,找出像3和4这类的一对点,将它们依次放入一个队列中。然后每取出一对点(例如取出的是图5中的3和4点),就测试1和3是否垂直相通,并且4和2是否也垂直相通。如果这两个条件都满足,则1和2这两个点是转两个弯相通的。其它图的类似。

此算法实现的伪代码如下:

public boolean twoCorner(Point a , Point b) //转二个弯可通的算法

{

QList=find(a,b);//找出所有如图5、6、7、8、9中的3和4方块对

if(QList.isEmpty())//如果没有3和4这样的方块对

return false;//返回不通标记

//扫描所有的3和4这样的块

for(int index=0;index < QList.size();index++)

{

Line line = (Line)QList.get(index);//获得当前方块对

if(line.direct==0)//如果3和4是水平方向

{

//判断所选的两点分别和3、4是否垂直可通

if(Vertical(a,line.a)&&Vertical(line.b,b))

{

p = new Point [] {a,line.a,line.b,b};//保存可通路径

LineType=TWO_CORNER; //标记可通类型为“转二个弯可通” return true; //返回可通标记

}

}

//如果3和4是垂直方向,判断所选的两点分别和3、4是否水平可通

else if (Horizontal(a,line.a)&&Horizontal(line.b,b))

{

p = new Point [] {a,line.a,line.b,b};//保存可通路径

LineType=TWO_CORNER; //标记可通类型为“转二个弯可通”

return true; //返回可通标记

}

}

return false; //返回不可通标记

}

3 结束语

文章详细介绍了Android平台连连看游戏控制逻辑的设计与实现过程,希望能为有志从事Android游戏开发的朋友提供些许帮助。

参考文献:

[1] 任玉刚. Android开发艺术探索[M]. 北京: 电子工业出版社, 2015.

[2] 何红辉. Android 源码设计模式解析与实战[M]. 北京: 人民邮电出版社, 2015.