Android實(shí)現(xiàn)擲骰子效果
本文實(shí)例為大家分享了Android實(shí)現(xiàn)擲骰子效果的具體代碼,供大家參考,具體內(nèi)容如下
利用handler接受子線程的消息完成骰子點(diǎn)數(shù)的不斷更替
演示
START:開始游戲
STOP:停止游戲
RECOVER:重置色子到初始狀態(tài)

代碼
package com.example.homeworkten;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private ImageView imageView1,imageView2,imageView3;
private Button button1,button2,button3;
private ImageView[] imageViews;
private Handler handler;
//子線程
private Thread thread;
//記錄每個(gè)色子的點(diǎn)數(shù)
private int number[];
//色子的總點(diǎn)數(shù)
private int count;
//volatile修飾符用來保證其它線程讀取的總是該變量的最新的值
public volatile boolean isStop = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
number = new int[3];
imageView1 = findViewById(R.id.imageView1);
imageView2 = findViewById(R.id.imageView2);
imageView3 = findViewById(R.id.imageView3);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
button3 = findViewById(R.id.button3);
imageViews = new ImageView[]{imageView1,imageView2,imageView3};
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//判斷線程是否存在
if (thread != null&&isStop == true){
isStop = false;
}
handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
for(int i = 0;i < 3;i++) {
switch (number[i]) {
case 1:
imageViews[i].setImageResource(R.drawable.t1);
break;
case 2:
imageViews[i].setImageResource(R.drawable.t2);
break;
case 3:
imageViews[i].setImageResource(R.drawable.t3);
break;
case 4:
imageViews[i].setImageResource(R.drawable.t4);
break;
case 5:
imageViews[i].setImageResource(R.drawable.t5);
break;
case 6:
imageViews[i].setImageResource(R.drawable.t6);
break;
}
}
}
};
thread = new Thread(new Runnable() {
@Override
public void run() {
while (!isStop) {
Message message = handler.obtainMessage();
//總點(diǎn)數(shù)歸零
count = 0;
for (int i = 0; i < 3; i++) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
//生成隨機(jī)數(shù)
int random = (int) (Math.random() * 6 + 1);
number[i] = random;
count += random;
}
handler.sendMessage(message);
}
}
});
thread.start();
}
});
//停止擲篩子
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isStop == false) {
isStop = true;
try {
//當(dāng)子線程執(zhí)行完以后才繼續(xù)執(zhí)行主線程
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
//顯示擲出的點(diǎn)數(shù)
Toast.makeText(MainActivity.this, "你擲的點(diǎn)數(shù)為" + count, Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this, "請點(diǎn)擊開始鍵進(jìn)行擲色子", Toast.LENGTH_SHORT).show();
}
}
});
//將色子還原到初始狀態(tài)
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isStop == true) {
for (int i = 0; i < 3; i++) {
imageViews[i].setImageResource(R.drawable.t1);
}
}else {
Toast.makeText(MainActivity.this, "請先停止游戲,再重新開始", Toast.LENGTH_SHORT).show();
}
}
});
}
}
<?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"> <ImageView android:id="@+id/imageView1" android:layout_width="100dp" android:layout_height="80dp" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" app:layout_constraintEnd_toStartOf="@+id/imageView2" app:layout_constraintHorizontal_bias="0.482" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/t1" /> <ImageView android:id="@+id/imageView2" android:layout_width="100dp" android:layout_height="80dp" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" app:layout_constraintEnd_toStartOf="@+id/imageView3" app:layout_constraintStart_toEndOf="@+id/imageView1" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/t1" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" android:text="start" app:layout_constraintEnd_toStartOf="@+id/button2" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/imageView1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" android:text="stop" app:layout_constraintEnd_toStartOf="@+id/button3" app:layout_constraintStart_toEndOf="@+id/button1" app:layout_constraintTop_toBottomOf="@+id/imageView2" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" android:text="recover" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/button2" app:layout_constraintTop_toBottomOf="@+id/imageView3" /> <ImageView android:id="@+id/imageView3" android:layout_width="100dp" android:layout_height="80dp" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/imageView2" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/t1" /> </androidx.constraintlayout.widget.ConstraintLayout>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android中Fragment+RadioButton實(shí)現(xiàn)底部導(dǎo)航欄
本篇文章主要介紹了android中Fragment+RadioButton實(shí)現(xiàn)底部導(dǎo)航欄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
Android獲取WiFi網(wǎng)絡(luò)列表的流程步驟
在Android開發(fā)中,我們經(jīng)常需要獲取設(shè)備附近可用的Wi-Fi網(wǎng)絡(luò)列表,這對于開發(fā)需要基于Wi-Fi網(wǎng)絡(luò)進(jìn)行功能或者與其他設(shè)備進(jìn)行通信的應(yīng)用程序非常重要,本文將介紹如何在Android應(yīng)用程序中獲取Wi-Fi網(wǎng)絡(luò)列表,需要的朋友可以參考下2024-11-11
Android之RecycleView實(shí)現(xiàn)指定范圍的拖動(dòng)效果
這篇文章主要介紹了Android之RecycleView實(shí)現(xiàn)指定范圍的拖動(dòng)效果的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Android編程之基于Log演示一個(gè)activity生命周期實(shí)例詳解
這篇文章主要介紹了Android編程之基于Log演示一個(gè)activity生命周期,結(jié)合完整實(shí)例形式較為詳細(xì)的分析總結(jié)了Log演示activity生命周期的具體用法及Log的具體使用方法,需要的朋友可以參考下2015-12-12
Android Studio 3.0被調(diào)方法參數(shù)名提示的取消方法
這篇文章主要介紹了去掉android studio 3.0被調(diào)方法參數(shù)名提示的解決方法,在文章末尾給大家補(bǔ)充介紹了Android Studio 3.0 gradle提示太老的解決方法,非常不錯(cuò),需要的朋友可以參考下2017-11-11
Android中將View的內(nèi)容保存為圖像的簡單實(shí)例
這篇文章主要介紹了Android中將View的內(nèi)容保存為圖像的簡單實(shí)例,有需要的朋友可以參考一下2014-01-01

