安卓开发学习日记第四天番外篇——用Kotlin炒冷饭——越炒越小

前情提要
安卓开发学习日记第一天_Android Studio3.6安装
安卓开发学习日记第二天_破坏陷阱卡之sync的坑
安卓开发学习日记第三天_新手怪button
安卓开发学习日记第四天_会爬就会跑

这一次我们就来试一下怎么用kotlin写出跟第四天日记一样的小游戏,外加自动复位效果

准备工作

如何想要在自己的Android Studio上运行以下代码,请在创建项目的时候选择kotlin语言

activity_main.xml的内容

内容与第四天的一样,可以直接从第四天的日记获取
安卓开发学习日记第四天_会爬就会跑

MainActivity.kt的主体内容

声明变量

我们可以看到kotlin作为一种强类型语言,不仅可以用varval去规定变量是可变变量还是只读变量,同时在变量的后面也可以补指定一个类型,以实现它的类型推理机制

     //声明一个对象数组类型是Button,名字是buttonsprivate var buttons = arrayOfNulls<Button>(10)//按钮的标签,用于判断按钮是否可见,用布尔数组表示private var flag: Array<Boolean> = arrayOf(true,true,true,true,true,true,true,true,true,true)//用于存放布局中按钮的ID,我们可以看出R.id.XX的类型是Intprivate val buttonID: Array<Int> = arrayOf(0,R.id.button1,R.id.button2,R.id.button3,R.id.button4,R.id.button5,R.id.button6,R.id.button7,R.id.button8,R.id.button9)//用于计算你点击了多少次private var count = 0

实例化对象数组

在这段代码里面我们可看到两个语法糖,当循环结构或选择结构里面只有一个语句的时候,写出以下形式就可以简化代码,让我们更方便地使用它(语法糖也相当于我们中文里面的成语,浓缩就是精华)

 override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//利用循环简化赋值过程for(i in 1..9)buttons[i] = findViewById(buttonID[i])//需要传入接口实现类的实例。//此时接口实现类的实例为MainActivityfor (j in 1..9) buttons[j]?.setOnClickListener(this)}

第二个for循环里面的buttons[i]后面有个" ? ",这个小问号就是用于判空,因为我们写代码时候不一定会知道实际运行的时候是否出现空指针,因此我们需要“ ? ”来对对象进行判空
与之相对应的,如果我们确定这个对象不会是空指针的时候,那么我们就可以用非空断言语句“ !! ”来提高运行的效率

第三步:写出转换按钮状态的函数将按钮状态变换接口移入内部

看到这里大家肯定会发现kotlin的for循环和python的for循环很像,就是比python的for循环多了个括号,其中的0..4意味着0到4的闭区间

 private fun convertBoolean(a: Int, b: Int, c: Int, d: Int, e: Int){val flags: Array<Int> = arrayOf(a,b,c,d,e)//根据传入的参数转换flag的值for(i in 0..4) if (flags[i] != 0)flag[flags[i]] = !flag[flags[i]]//按钮状态变换接口showButton()}

第四步:实现按钮显示和隐藏的函数,检测游戏是否结束,实现游戏复位

这里的for循环中使用了kotlin中的when语法,代替了Java的switch语句(奇怪的行数减少了)

 private fun showButton(){var tag = 0//根据标签的状态实现按钮是否可见for(i in 1..9)when (flag[i]) {true -> buttons[i]?.visibility = View.VISIBLE//使按钮可见false -> buttons[i]?.visibility = View.INVISIBLE//使按钮不可见}//记录点击次数count++//检查标签的状态for (i in 1..9)if(!flag[i])tag++//在屏幕中弹出消息if(tag == 9){Toast.makeText(this,"恭喜你赢得了游戏!\n本次游戏你一共点击了"+count+"次!", Toast.LENGTH_LONG).show()//完成游戏后按钮复位for (i in 1 .. 9)convertBoolean(i,0,0,0,0)}}

第五步:设置点击事件(这就是我为什么喜欢上kotlin的地方)

大家可以回去上一天的日记里数数这一段一共用了几行,用kotlin用了几行(kotlin牛逼)
第四天的日记在这里~
这里when中的v同样也进行了判空

 override fun onClick(v: View?) {when(v?.id) {R.id.button1 -> convertBoolean (1,2,4,0,0)  //改变对于按钮的状态标签R.id.button2 -> convertBoolean (1,2,3,5,0)  //改变对于按钮的状态标签R.id.button3 -> convertBoolean (2,3,6,0,0)  //改变对于按钮的状态标签R.id.button4 -> convertBoolean (1,4,5,7,0)  //改变对于按钮的状态标签R.id.button5 -> convertBoolean (2,4,5,6,8)  //改变对于按钮的状态标签R.id.button6 -> convertBoolean (3,5,6,9,0)  //改变对于按钮的状态标签R.id.button7 -> convertBoolean (4,7,8,0,0)  //改变对于按钮的状态标签R.id.button8 -> convertBoolean (5,7,8,9,0)  //改变对于按钮的状态标签R.id.button9 -> convertBoolean (6,8,9,0,0)  //改变对于按钮的状态标签}}

接下来就是运行效果

我们可以发现,效果是一样的,但是代码量却减少了

如果觉得还不错就点个赞,收藏一下,感谢您的观看

安卓开发学习日记第四天番外篇_用Kotlin炒冷饭——越炒越小_莫韵乐的欢乐笔记相关推荐

  1. 安卓开发学习日记第四天_会爬就会跑_莫韵乐的欢乐笔记

    安卓开发学习日记第四天_会爬就会跑 前情提要 安卓开发学习日记第一天Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发学习日记第三天_新手怪button ...

  2. 安卓开发学习日记第三天_新手怪button_莫韵乐的欢乐笔记

    安卓开发学习日记第三天--新手怪button (不是buttercup,虽然里面好像也有button,心中已经响起那段音乐了) 前情提要: 第一天学习日记之安装Android Studio3.6 第二 ...

  3. 安卓开发学习日记第二天_破坏陷阱卡之sync的坑_莫韵乐的快乐笔记

    安卓开发学习日记第二天 前情提要:第一天的日记 经过第一天的日记,我们顺利第安装上了Android Studio3.6 第二天内容包括: 1.推荐的文件目录结构 2.如何创建一个项目 3.遇到sync ...

  4. 安卓开发学习日记第一天(笑)_Android Studio3.6安装_莫韵乐的快乐笔记

    安卓开发学习第一天 Android Studio3.6安装 没想到终于要写出自己的第一个博客了 反正是第一篇,有没有人看都无所谓(理智:129/129) 万事开头难,做下去就容易很多了 言归正传 工欲 ...

  5. 安卓开发学习日记第五天——奇怪的bug出现了(VT-x说没就没)_莫韵乐的欢乐日记

    安卓开发学习日记第五天--奇怪的bug出现了(VT-x说没就没) 前情提要: 安卓开发学习日记第一天_Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发 ...

  6. 安卓开发学习日记 DAY5——监听事件onClick的实现方法

    今天主要学习了监听事件的是实现方法,就是说,做了某些动作后,怎么监听这个动作并作出相应反应. 方法主要有三种: 1.匿名内部类的方法 2.独立类的方法 3.类似实现接口的方法 以下分别分析: 1.匿名 ...

  7. 设备树学习(二十三、番外篇-中断子系统之softirq)

    既然开始学了,那么还是一次把中断的所有知识都系统的学一下.刚好有蜗窝大神的博客做指引. http://www.wowotech.net/irq_subsystem/soft-irq.html 一.前言 ...

  8. 设备树学习(十八、番外篇-中断子系统之初始化一个中断控制器)

    一.前言 上一篇写到,使用设备树的情况下,对所有的中断控制器进行了检索,提取到一个链表中.并对这些中断控制器中所谓的父中断控制器进行检索,并按照等级一次初始化.本文就以一种常见的中断控制器VIC的初始 ...

  9. 设备树学习(十五、番外篇-中断子系统之IRQ Domain介绍)

    之前的文章分析过没使用设备树时,中断是如何初始化的 https://blog.csdn.net/qq_16777851/article/details/82556519 用一句话总结就是,启动过程,通 ...

最新文章

  1. java导出word表格_使用PowerDesigner16.5 逆向数据库 导出word文档
  2. 不同时间段的欢迎语言
  3. 微软开放Holographic平台,意在统一VR的操作系统?
  4. C、C++ 学习经历
  5. 熬夜都要看完的 Spring 干货!
  6. NOIP2018游记题解
  7. Android学习之——ListView下拉刷新
  8. python判断密码强度并输出_Python实现的密码强度检测器示例
  9. 入选 CVPR 2020的旷视论文,到底写了啥?
  10. 【leetcode】722. Remove Comments
  11. Adobe DPS解决方案工作流程及其收费情况介绍
  12. chartControl
  13. UCI数据集+机器学习+十折交叉验证
  14. idea破解码生成地址
  15. 凸优化学习(一)凸集与凸函数、凸优化问题
  16. 数据中台的云原生机会 | 甲子光年
  17. 机器视觉入门——VisionPro软件简介
  18. SQL Server笔记心得(持续更新)
  19. MaxEnt分析流程和推荐的分析内容
  20. C语言编写SSH终端

热门文章

  1. Qt 中的动画(Animations)
  2. 重庆交通大学c语言上机试题,重庆交通大学2021硕士招生考试《C语言程序设计》复试大纲...
  3. 硬件知识--LM393的应用总结
  4. 电子书转PDF格式怎么弄?这些方法你应该要知道
  5. 从一个导出的DMP文件中,导入某一个表
  6. chrome打开本地html自动刷新,谷歌浏览器插件Auto Refresh 网页自动刷新
  7. maxcms整合html5播放器,马克斯 maxcms 二合一模板 多播放多采集 PC手机一站式多功能模板...
  8. Python爬取CCTV15
  9. java写脸萌_Linux环境下配置JDK,java环境
  10. openEuler安装GNOME图形化桌面