Android实现掷骰子效果

所属分类: 软件编程 / Android 阅读数: 55
收藏 0 赞 0 分享

本文实例为大家分享了Android实现掷骰子效果的具体代码,供大家参考,具体内容如下

利用handler接受子线程的消息完成骰子点数的不断更替

演示

START:开始游戏
STOP:停止游戏
RECOVER:重置色子到初始状态

代码

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;
 //记录每个色子的点数
 private int number[];
 //色子的总点数
 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();
    //总点数归零
    count = 0;
    for (int i = 0; i < 3; i++) {
    try {
     Thread.sleep(50);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    //生成随机数
    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 {
   //当子线程执行完以后才继续执行主线程
   thread.join();
   } catch (InterruptedException e) {
   e.printStackTrace();
   }
   //显示掷出的点数
   Toast.makeText(MainActivity.this, "你掷的点数为" + count, Toast.LENGTH_SHORT).show();
  }else {
   Toast.makeText(MainActivity.this, "请点击开始键进行掷色子", Toast.LENGTH_SHORT).show();
  }
  }
 });
 //将色子还原到初始状态
 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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android 自定义球型水波纹带圆弧进度效果(实例代码)

最近小编接到一个这样的需求,需要实现一个圆形水波纹,带进度,两层水波纹需要渐变显示,且外围有一个圆弧进度。今天小编给大家分享实例代码,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

Flutter 实现下拉刷新上拉加载的示例代码

这篇文章主要介绍了Flutter 实现下拉刷新上拉加载的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Windows实现Flutter环境搭建及配置这一篇就够了

这篇文章主要介绍了Windows实现Flutter环境搭建及配置这一篇就够了,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android利用碎片fragment实现底部标题栏(Github模板开源)

Fragment可以作为Activity的组成部分,一个Activity可以有多个Fragment,这篇文章主要介绍了Android利用碎片fragment实现底部标题栏(Github模板开源),需要的朋友可以参考下
收藏 0 赞 0 分享

android studio 的下拉菜单Spinner使用详解

这篇文章主要介绍了android studio 的下拉菜单Spinner使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

解析Android 8.1平台SystemUI 导航栏加载流程

这篇文章主要介绍了Android 8.1平台SystemUI 导航栏加载流程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿微信录音功能

这篇文章主要为大家详细介绍了Android仿微信录音功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿微信键盘切换效果

这篇文章主要为大家详细介绍了Android仿微信键盘切换效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android超清晰6.0权限申请AndPermission

这篇文章主要介绍了Android超清晰6.0权限申请AndPermission,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿微信录制语音功能

这篇文章主要介绍了Android仿微信录制语音功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多