Android开发连连看的研发背景,android开发—连连看开发技巧(12)

news/2024/7/6 1:48:08 标签: Android开发连连看的研发背景

android连连看开发技巧(12)

判断两个方块是否可以相连

在上一篇文章《android开发—连连看开发技巧(11)》我们讲解了如何获取触.碰.点的方块,那么当获取了触.碰.点之后我们要判断两个方块是否可以相连,下面来为大家讲解。

判断两个方块是否可以相连是本程序需要处理的最繁琐的地方:因为两个方块可以相连的情形比较多,大致可分为:

1、两个方块位于同一条水平线,可以直接相连。

2、两个方块位于同一条竖直线,可以直接相连。

3、两个方块的以两条线段相连,也就是有1个拐角。

4、两个方块的以三条线段相连,也就是有2个拐角。

下面link(Piece p1, Piece p2)方法把这四种情况分开进行处理,方法代码如下:

程序清单:codes18LinksrcorgcrazyitlinkoardimplGameServiceImpl.java

// 实现接口的link方法

@Override

public LinkInfo link(Piece p1, Piece p2)

{

// 两个Piece是同一个, 即选中了同一个方块, 返回null

if (p1.equals(p2))

return null;

// 如果p1的图片与p2的图片不相同, 则返回null

if (!p1.isSameImage(p2))

return null;

// 如果p2在p1的左边, 则需要重新执行本方法, 两个参数互换

if (p2.getIndexX() < p1.getIndexX())

return link(p2, p1);

// 获取p1的中心点

Point p1Point = p1.getCenter();

// 获取p2的中心点

Point p2Point = p2.getCenter();

// 如果两个Piece在同一行

if (p1.getIndexY() ==

p2.getIndexY()) //①

{

// 它们在同一行并可以相连

if (!isXBlock(p1Point, p2Point, GameConf.PIECE_WIDTH))

{

return new LinkInfo(p1Point, p2Point);

}

}

// 如果两个Piece在同一列

if (p1.getIndexX() ==

p2.getIndexX()) //②

{

if (!isYBlock(p1Point, p2Point, GameConf.PIECE_HEIGHT))

{

// 它们之间没有真接障碍, 没有转折点

return new LinkInfo(p1Point, p2Point);

}

}

// 有一个转折点的情况

// 获取两个点的直角相连的点, 即只有一个转折点

Point cornerPoint = getCornerPoint(p1Point,

p2Point,

GameConf.PIECE_WIDTH,

GameConf.PIECE_HEIGHT); //③

if (cornerPoint != null)

{

return new LinkInfo(p1Point, cornerPoint, p2Point);

}

// 该map的key存放第一个转折点, value存放第二个转折点,

// map的size()说明有多少种可以连的方式

Map turns =

getLinkPoints(p1Point,

p2Point, //④

GameConf.PIECE_WIDTH, GameConf.PIECE_WIDTH);

if (turns.size() != 0)

{

return getShortcut(p1Point, p2Point, turns,

getDistance(p1Point, p2Point));

}

return null;

}

上面程序中四条粗体字代码分别代表了两个方块位于同一个水平线可直接相连,两个方块位于同一个竖直线可直接相连,两个方块需要两条线相连,两个方块需要3条线相连等四种情况。上面方法分别考虑了这四种情况,但程序还需要为这4个方法提供实现。

为了实现上面4个方法,可以对两个Piece的位置关系进行归纳,两个Piece的位置关系可分为:

1、p1与p2在同一行(indexY值相同)。

2、p1与p2在同一列(indexX值相同)。

3、p2在p1的右上角(p2的indexX > p1的indexX,p2的indexY

< p1的indexY)。

4、p2在p1的右下角(p2的indexX > p1的indexX,p2的indexY

> p1的indexY)。

至于p2在p1的左上角、以及p2在p1的左下角这两种情况,程序可以重新执行link方法,将p1和p2两个参数的位置互换即可。(未完.摘自[疯狂android讲义].李刚)


http://www.niftyadmin.cn/n/1270921.html

相关文章

vue2.0父子组件及非父子组件间实现通信

title: vue2.0组件间通信 date: 2017年8月16日 17:57:06 tags: css categories: 教程 author: "JiaWei" vue2.0父子组件及非父子组件间实现通信 1. 父组件与子组件通信 父组件 子组件通过props来接收数据: 格式1&#xff1a; props: [childMsg] 格式2 : props: { chi…

HarmonyOS分布式教育,HarmonyOS Connect伙伴峰会,教育展品全新亮相

5月18日在上海举办的HarmonyOS Connect伙伴峰会宣布了全场景硬件生态品牌升级计划&#xff0c;将通过做好产品、卖好产品、运营好产品三个方向帮助商业伙伴打通生态全链路&#xff0c;获得全新价值&#xff0c;助力商业成功。本次峰会设置了包括智慧家居、智慧出行、智慧教育、…

vue的路由设置小结

vue的路由设置小结 // 异步路由的编写示例。其中针对component字段进行懒加载及分块处理&#xff0c;提升首屏加载速度的同时&#xff0c;也可以手动控制让某些页面合并到一个单独的js文件中&#xff0c;而不是每个页面都是一个js。//完整解释请参考官方文档&#xff1a;vue-ro…

android dxt1 support,图片纹理压缩方案 - osc_3d642bby的个人空间 - OSCHINA - 中文开源技术交流社区...

RGB Compressed DXT1压缩无符号整型整型RGB纹理。32KB (4 bits per pixel)Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra and Intel Bay Trail), WebGLNote: With linear rendering on web browser that doesn’t support sRGB DXT, textures are uncompressed…

git仓库搭建及客户端使用

这里只在linux上做git仓库搭建 这里只在linux上做git仓库搭建 这里只在linux上做git仓库搭建 linux 服务器上安装及配置git 一、安装git yum install -y git (centos) apt-get install -y git (ubuntu) 二 检测git用户是否存在&#xff0c;不存在创建  检测&#xff1a;&…

自动移动文字html,左右移动转换文字特效HTML代码解析

左右移动转换文字特效HTML代码解析发布时间&#xff1a;2010-01-12 20:41:00 作者&#xff1a;佚名 我要评论跑马灯效果就是经常看到的文字左右移动转换效果&#xff0c;这是笼统说法&#xff0c;虽然这种效果目前已经被许多很酷的JS代替&#xff0c;但在有些时候有可能会…

C语言的基本结构——循环结构

今天我们计算机协会的社长给我说让我去给小学弟小学妹们讲一次C语言入门&#xff0c;他们老师已经讲过前面我们写过的博文了&#xff0c;我打算给他们讲一下C语言的基本结构——循环&#xff0c;判断&#xff0c;分支。  今天我们就着重说说循环结构。  循环结构分为三种&a…

android+平板哪家强,安卓平板哪个好

安卓平板电脑性价比排行1. CUBE 酷比魔方 iPlay20 2020款 10.1英寸 Android 平板电脑(1920*1200dpi、4GB、64GB、LTE版、黑色、T1011)商品简介&#xff1a;iPlay 20采用10.1英寸全高清全贴合屏幕&#xff0c;1920x1200分辨率&#xff0c;双扬声器&#xff0c;采用紫光展锐虎贲S…