安卓开发学习日记第四天_会爬就会跑

前情提要

安卓开发学习日记第一天Android Studio3.6安装
安卓开发学习日记第二天_破坏陷阱卡之sync的坑
安卓开发学习日记第三天_新手怪button

经历了之前的学习,我们从出生到眨眼睛,然后会爬了

今天就开始跑吧!


这个小游戏其实就是我们小时候经常玩的关灯游戏

首先我们明确一下项目所需的文件

主活动:MainActivity.class

主布局:activity_main.xml

首先我们从主布局开始

第一步,将屏幕分割成九宫格

放置垂直指导线,并拖至33%处(没有33.3,强迫症表示很难受)

同理,放下水平指导线

最后我们要得到一个九宫格

第二步,放置按钮

把按钮放置到屏幕里面,然后添加约束

用按钮填充格子
如此类推,最后九宫格如下

activity_main的代码如下

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.33" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.66" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.33" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.66" /><Buttonandroid:id="@+id/button1"android:layout_width="0dp"android:layout_height="0dp"android:text="Button"app:layout_constraintBottom_toTopOf="@+id/guideline3"app:layout_constraintEnd_toStartOf="@+id/guideline"app:layout_constraintHorizontal_bias="0.625"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.474" /><Buttonandroid:id="@+id/button2"android:layout_width="0dp"android:layout_height="0dp"android:text="Button"app:layout_constraintBottom_toTopOf="@+id/guideline3"app:layout_constraintEnd_toStartOf="@+id/guideline2"app:layout_constraintHorizontal_bias="0.666"app:layout_constraintStart_toStartOf="@+id/guideline"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/button3"android:layout_width="0dp"android:layout_height="0dp"android:text="Button"app:layout_constraintBottom_toTopOf="@+id/guideline3"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline2"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/button4"android:layout_width="0dp"android:layout_height="0dp"android:text="Button"app:layout_constraintBottom_toTopOf="@+id/guideline4"app:layout_constraintEnd_toStartOf="@+id/guideline"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline3" /><Buttonandroid:id="@+id/button5"android:layout_width="0dp"android:layout_height="0dp"android:text="Button"app:layout_constraintBottom_toTopOf="@+id/guideline4"app:layout_constraintEnd_toStartOf="@+id/guideline2"app:layout_constraintStart_toStartOf="@+id/guideline"app:layout_constraintTop_toTopOf="@+id/guideline3" /><Buttonandroid:id="@+id/button6"android:layout_width="0dp"android:layout_height="0dp"android:text="Button"app:layout_constraintBottom_toTopOf="@+id/guideline4"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline2"app:layout_constraintTop_toTopOf="@+id/guideline3" /><Buttonandroid:id="@+id/button7"android:layout_width="0dp"android:layout_height="0dp"android:text="Button"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/guideline"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline4" /><Buttonandroid:id="@+id/button8"android:layout_width="0dp"android:layout_height="0dp"android:text="Button"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/guideline2"app:layout_constraintStart_toStartOf="@+id/guideline"app:layout_constraintTop_toTopOf="@+id/guideline4" /><Buttonandroid:id="@+id/button9"android:layout_width="0dp"android:layout_height="0dp"android:text="Button"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline2"app:layout_constraintTop_toTopOf="@+id/guideline4" />
</androidx.constraintlayout.widget.ConstraintLayout>

接着就是实现这个小游戏逻辑的地方了

第一步:声明变量
 //声明一个对象数组类型是Button,名字是buttonpublic Button[] button = new Button[10];//按钮的标签,用于判断按钮是否可见,用布尔数组表示private boolean[] flag = {true,true,true,true,true,true,true,true,true,true};//用于存放布局中按钮的ID,我们可以看出R.id.XX的类型是整数private int[] buttonID ={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 int count = 0;
第二步:实例化对象数组

将刚刚声明的Button对象实例化

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//利用循环简化赋值过程for(int i=1; i<=9; i++){button[i] = findViewById(buttonID[i]);}//需要传入接口实现类的实例。//此时接口实现类的实例为MainActivityfor(int i=1; i<=9; i++) {button[i].setOnClickListener(this);}}
第三步:写出转换按钮状态的函数
     public void convertBoolean(int a, int b, int c, int d, int e){int[] flagx = {a,b,c,d,e};for(int i=0; i<5; i++)if(flagx[i]!=0) {flag[flagx[i]] = !flag[flagx[i]];}}
第四步:实现按钮显示和隐藏的函数,在内部检测游戏是否结束
 public void showbutton(){int i,tag=0;for(i = 1; i <= 9; i++) {if (flag[i]) {//使按钮可见button[i].setVisibility(View.VISIBLE);tag-=1;} else {//使按钮不可见button[i].setVisibility(View.INVISIBLE);tag+=1;}}count++;if(tag == 9){//在屏幕中弹出消息Toast.makeText(MainActivity.this,"恭喜你赢得了游戏!\n本次游戏你一共点击了"+count+"次!",Toast.LENGTH_LONG).show();}}
第五步:设置点击事件(有两种方式可以实现点击事件,如下方式为实现监听接口)
 @Overridepublic void onClick(View v) {switch (v.getId()){case R.id.button1:convertBoolean(1,2,4,0,0);//改变对于按钮的状态标签            showbutton();//改变按钮的状态break;case R.id.button2:convertBoolean(1,2,3,5,0);//改变对于按钮的状态标签showbutton();//改变按钮的状态break;case R.id.button3:convertBoolean(2,3,6,0,0);//改变对于按钮的状态标签showbutton();//改变按钮的状态break;case R.id.button4:convertBoolean(1,4,5,7,0);//改变对于按钮的状态标签showbutton();//改变按钮的状态break;case R.id.button5:convertBoolean(2,4,5,6,8);//改变对于按钮的状态标签showbutton();//改变按钮的状态break;case R.id.button6:convertBoolean(3,5,6,9,0);//改变对于按钮的状态标签showbutton();//改变按钮的状态break;case R.id.button7:convertBoolean(4,7,8,0,0);//改变对于按钮的状态标签showbutton();//改变按钮的状态break;case R.id.button8:convertBoolean(5,7,8,9,0);//改变对于按钮的状态标签showbutton();//改变按钮的状态break;case R.id.button9:convertBoolean(6,8,9,0,0);//改变对于按钮的状态标签showbutton();//改变按钮的状态break;default:}}

那么这个简单小游戏就完成了

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

安卓开发学习日记第四天番外篇_用Kotlin炒冷饭——越炒越小
安卓开发学习日记第五天——奇怪的bug出现了(VT-x说没就没)

安卓开发学习日记第四天_会爬就会跑_莫韵乐的欢乐笔记相关推荐

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

    安卓开发学习日记第四天番外篇--用Kotlin炒冷饭--越炒越小 前情提要 安卓开发学习日记第一天_Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发学 ...

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

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

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

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

  4. 终于要把魔爪伸向shell编程了_命令行参数数量预检测——莫韵乐的小脚印笔记

    终于要把魔爪伸向shell编程了_命令行参数数量预检测 有时候我们在时使用shell的时候都需要传入一些参数,但是有时候我们传入的命令行参数数量不正确就很容易发生错误,因此我们需要在需要传入参数的sh ...

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

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

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

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

  7. 在Linux中实现文本文件的复制_莫韵乐的小脚印笔记

    在Linux中实现文本文件的复制 写这个程序这个当然要带一点挑战 挑战一:文件的长度不确定 挑战二:只能用底层I/O (反正我觉得找这个的都是来抄作业的,如果这篇博客能帮助到你,点个赞然后在评论里写个 ...

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

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

  9. Linux命令总汇表(持续更新中)_莫韵乐的linux笔记

    Linux命令(持续更新中) 以下是Linux中各种命令的汇总表,欢迎大家进行查阅,语法格式中的有部分蓝色字体的超链接(持续更新),可以查看更详细的用法 命令类型 命令 说明 语法格式 常用命令 ca ...

最新文章

  1. 理论+实操: linux中firewalld防火墙基础讲解(转载)
  2. python编程 语言-Python成为2018年度编程语言,遥遥领先于其他语言
  3. ActiveMQ 学习(VM Transport)
  4. android 查找字符在字符串的位置
  5. HDU - 1427 速算24点(dfs)
  6. java如何引入qq登陆,Java Swing仿QQ登录界面 学习之用
  7. 金电联行程小龙:企业数字化转型的目标、决策与实践
  8. 商汤押注AI教育,成立“商汤教育”子品牌
  9. 使用windows2008R2自带磁盘管理进行分区
  10. Proxy pattern-代理模式
  11. 跟踪某个类所创建对象的个数
  12. 使用 jQuery 避免鼠标双击
  13. [R语言绘图]绘图样式设置(符号、线条、颜色、文本属性)
  14. 如何打开 Excel VBA 及 我的第一个代码
  15. python3.5中文手册chm_python3官方帮助文档-python3.5.2官方chm参考手册-东坡下载
  16. GoComb.com搜索引擎问世:改进搜索体验
  17. 基于主定理以及递推树求解递归算法的时间复杂度
  18. 解绑定和释放弹性云服务器的弹性公网IP
  19. ESP8266入门教程-ESP8266睡眠和唤醒功能
  20. Tp5 实现短信发送及页面倒计时

热门文章

  1. 一个国家到底能不能没有化工企业?
  2. raspberry pi_6个Raspberry Pi教程试用
  3. kubernetes(4):Centos7 使用docker 安装kubeadm-dind-cluster
  4. java中副本的意思,副本是什么意思?
  5. 钛备份Titanium Backup pro (Android)v5.4.1捐赠完整版
  6. 黄牛是怎样抢票的?——从业务分析师角度看买票难问题
  7. 罗斯蒙特3051压力变送器菜单内容
  8. 高手详细介绍JVM是什么?
  9. spring与flex blazed整合(一般方式或注解)
  10. PHPChina学院jQuery Mobile与Phone