安卓开发学习日记第四天_会爬就会跑
前情提要
安卓开发学习日记第一天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.Guideline
android: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.Guideline
android: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.Guideline
android: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.Guideline
android:id="@+id/guideline4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.66" />
<Button
android: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" />
<Button
android: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" />
<Button
android: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" />
<Button
android: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" />
<Button
android: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" />
<Button
android: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" />
<Button
android: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" />
<Button
android: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" />
<Button
android: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,名字是button
public 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对象实例化
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//利用循环简化赋值过程
for(int i=1; i<=9; i++){
button[i] = findViewById(buttonID[i]);
}
//需要传入接口实现类的实例。
//此时接口实现类的实例为MainActivity
for(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();
}
}
第五步:设置点击事件(有两种方式可以实现点击事件,如下方式为实现监听接口)
@Override
public 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说没就没)