作者:feintkotlin
这个小游戏是这样子的:有一组行列相同的方格组成的矩阵,其中有一个方格的颜色和其余的方格不相同,你要做的就是把那个方格挑选出来。随着等级的提升,方格的数量会不断增加,方块的颜色差异也会不断的减小。
先来看看程序的实际演示,界面比较简陋,将就着看看吧。
整个程序差不多有200来行代码,在这里就不全贴出来了,挑其中的几个关键步骤进行讲解,想要源码的同学可以到文章的底部找到源码的链接。
步骤一:生成颜色列表为了方便生成差异颜色,我定义了一个RBG类,用于存放red、green、blue三个颜色分量。
data class RGB(var red:Int,var green:Int,var blue:Int)
接下来会使用到copy函数,便将其定义成类数据类。
生成颜色列表的主要代码是这样子的:
val rgbList= List<RGB>(level.cellNum){
return@List if (it==difIndex)
difColor(color,level.level)
else
color
}
其中的difIndex表示差异颜色所在的序号。difColor函数根据当前的颜色和等级来生成具有微小差异的颜色。
步骤二:创建布局对于这种有大量重复元素的布局,使用Anko的DSL就比较方便了(可以对View进行重用)。程序的主体部分是由一个个方格组成的矩阵。在这里我使用TextView来表示那一个个方格。同过下面这段代码来生成一行方格
在DSL中你可以使用循环来生大量具有相同模式的视图。
其中的lparams是用来设置View的LayoutParams的,算是一种更加方便的写法。
在onClick中的listener是一个函数参数,用来处理方格被点击之后的事件。
步骤三:处理方格点击上一步提到的函数参数 listener,是CellFactory.create() 函数的最后一个参数,所以在这里可以直接将代码写到lambda表达式中。
在这里处理逻辑是这样子的:
判断是否选中正确的色块,如果正确转跳到 2,否转跳到5
判断当前等级是否为12,是转挑到3,否转跳到4
提示“通关”,将intent中的level置为1
将intent中的level=当前Activity的level+1
提示“失败”,将intent中的level置为1
注:上面代码中的colorPair.second就是第一步生成的颜色列表,由于贪图方便,我只使用了一个列表来存储,是一个一维的结构。在这里通过列表的切片,获取每一行方格的颜色列表。
结尾源码地址(Github):/feintKotlin/android (其中的find-color文件目录中)
喜欢的话,就点波收藏和关注;不喜欢的话也请在评论中说出,咱好进行改进。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved