带你开发个转盘抽奖小游戏【附源码】

程序IT圈

1效果图

小时候有没有玩过老虎机抽奖游戏?今天一起来用代码编程实现个简单抽奖的小游戏!首先,先带大家看看实现的效果图是怎么样的:

2分析如何实现

看了上面的效果图,头脑里有没有立刻想到用什么知识点来自己做一个呢?如果有想到,说明你非常不错,可以对知识点举一反三了!

如果没有任何想法,可以继续看本文详细分析。

1、为什么会看到旋转的效果?

这个其实简单,就是对一张图片,外围包裹一层边框,然后让其先隐藏掉,这样每次轮转到这张图片的时候,就让外边框显示出来,其他的图片隐藏。

代码如下:

//定义一个方法,用来显示指定位置的图片框背景
   //不管怎么变化,最终一定会调用该方法,并传入position参数,这个参数就是中奖结果
   public void showBg(int position) {
       //如果遍历到的ImageView的位置正好是position,就显示选中的背景图片,
       //其他都不显示背景
       valuse = position;
       for (int i = 0; i < imgs.length; i++) {
           if (i == position) {
               imgs[i].setBackgroundResource(R.drawable.img_bg);
           } else {
               //其他的,背景都去掉
               imgs[i].setBackgroundResource(0);
           }
       }
   }

2、怎么让其旋转起来,实现游戏效果?

这个如果你可以想到Android中的Handler,想必要实现这个效果,那不是so easy的一件事。

具体代码如下:

Handler handler = new Handler() {
       @Override
       public void handleMessage(Message msg) {
           super.handleMessage(msg);
           switch (msg.what) {
               case 100: {
                   //表示显示下一个图片的背景
                   //取出当前显示背景图片的位置
                   int current = msg.arg1;
                   //++
                   current++;
                   //再创建一个Message,设置其arg1
                   Message msgNew = Message.obtain();
                   //标识
                   msgNew.what = 100;
                   //参数
                   msgNew.arg1 = current;
                   //延时发送
                   handler.sendMessageDelayed(msgNew, current * 10);
                   //切换显示图片背景
                   showBg(current % imgs.length);
               }
               break;
               case 200: {
                   //收到停止的消息
                   //移除msg.what=100的所有消息
                   handler.removeMessages(100);
                   //读取最终结果
                   Toast.makeText(MainActivity.this, "恭喜你,中了:" + valuse, Toast.LENGTH_LONG).show();
               }
               break;
           }
       }
   };

3、如何让每次转到的位置都不一样?

这个就需要我们用一个随机数,来控制Handle的消息的随机发送时间长短。具体的代码如下:

public void start(View view) {
       //查看消息队列
       if (handler.hasMessages(100)) {
           //表示消息队列中含有该消息,也就是说已经启动过
           Toast.makeText(this, "游戏已经启动,请稍候~~~~", Toast.LENGTH_LONG).show();
           return;
       }
       //让Handler玩起来
       Message msg = handler.obtainMessage();
       msg.what = 100;
       msg.arg1 = 0;
       msg.sendToTarget();
       //生成一个随机数:5~10秒之间
       Random rd = new Random();
       int time = rd.nextInt(5) + 5;
       //延时发送停止消失
       Message msg_stop = Message.obtain();
       msg_stop.what = 200;
       handler.sendMessageDelayed(msg_stop, time * 1000);

}

想明白了以上三点,实现这个小游戏,应该不成问题了!

3本文源码

1. public class MainActivity extends AppCompatActivity {
 2. //八个ImageView数组
 3. ImageView[] imgs = new ImageView[8];
 4. //id数组
 5. int[] ids = {
 6. R.id.iv1, R.id.iv2, R.id.iv3, R.id.iv4, R.id.iv5, R.id.iv6, R.id.iv7, R.id.iv8, };
 15. @Override
 16. protected void onCreate(Bundle savedInstanceState) {
 17. super.onCreate(savedInstanceState);
 18. setContentView(R.layout.activity_main);
 19. //初始化ImageView
 20. initImgs();
 21. }
 22. /**
 23. * 找到所有的图片控件
 24. */
 25. private void initImgs() {
 26. for (int i = 0; i < imgs.length; i++) {
 27. imgs[i] = (ImageView) findViewById(ids[i]);
 28. }
 29. }
 30. //记录最终中奖位置
 31. int values = 0;
 32. //定义一个方法,用来显示指定位置的图片框背景
 33. public void showBg(int position) {
 34. //如果遍历到的ImageView的位置正好是position,就显示选中的背景图片,
 35. //其他都不显示背景
 36. values = position;
 37. for (int i = 0; i < imgs.length; i++) {
 38. if (i == position) {
 39. imgs[i].setBackgroundResource(R.drawable.img_bg);
 40. } else {
 41. //其他的,背景都去掉
 42. imgs[i].setBackgroundResource(0);
 43. }
 44. }
 45. }
 46. Handler handler = new Handler() {
 47. @Override
 48. public void handleMessage(Message msg) {
 49. super.handleMessage(msg);
 50. switch (msg.what) {
 51. case 100: {
 52. //表示显示下一个图片的背景
 53. //取出当前显示背景图片的位置
 54. int current = msg.arg1;
 55. //++
 56. current++;
 57. //再创建一个Message,设置其arg1
 58. Message msgNew = Message.obtain();
 59. //标识
 60. msgNew.what = 100;
 61. //参数
 62. msgNew.arg1 = current;
 63. //延时发送
 64. handler.sendMessageDelayed(msgNew, current * 10);
 65. //切换显示图片背景
 66. showBg(current % imgs.length);
 67. }
 68. break;
 69. case 200: {
 70. //收到停止的消息
 71. //移除msg.what=100的所有消息
 72. handler.removeMessages(100);
 73. //读取最终结果
 74. Toast.makeText(MainActivity.this, "恭喜你中奖了" + values, Toast.LENGTH_SHORT).show();
 75. }
 76. break;
 77. }
 78. }
 79. };
 80. //点击开始,动起来
 81. //重复点击,多次启动
 82. /*
 83. * 1.点击时,判断消息队列是否有what=100的消息时,如果有,说明已经启动
 84. *
 85. * 2.点击后,设置按钮不可用,当handler收到消息,重新设置可点击
 86. *
 87. * */
 88. public void start(View view) {
 89. if (handler.hasMessages(100)) {
 90. //表示该队列含有该消息,说明已经启动
 91. Toast.makeText(MainActivity.this, "游戏已经启动", Toast.LENGTH_SHORT).show();
 92. return;
 93. }
 94. //让Handler玩起来
 95. Message msg = Message.obtain();
 96. msg.what = 100;
 97. msg.arg1 = 0;
 98. handler.sendMessage(msg);
 99. //生成一个随机数:5~10秒之间
 100. Random rd = new Random();
 101. int time = rd.nextInt(5) + 5;
 102. //延时发送停止消失
 103. Message msg_stop = Message.obtain();
 104. msg_stop.what = 200;
 105. handler.sendMessageDelayed(msg_stop, time * 1000);
 106. }
 107. }

最后,提前祝大家元旦快乐!


(0)

相关推荐

  • 老问题:Android子线程中更新UI的3种方法

    在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 方法一:用Handler 1.主线程中定义Handler: Handle ...

  • 手把手教你从0开始搭建一个答题小程序 附源码!

    酷酷说钱 每天教你一个赚钱方法. 小程序是2018年的风口,今天教大家从0搭建一个小程序,废话不多说. 按照下面的教程一步一步操作即可搭建好,如果你还是不会,文末会分享大家视频教程 和 小程序源码. ...

  • 学校模拟器游戏小程序:带你体验模拟校园的小游戏

    <学校模拟器>游戏小程序好玩吗? <学校模拟器>小游戏怎么玩? 怎么进入<学校模拟器>? 只有你想不到, 没有我找不到的好游戏! 「良心好游戏推荐」 搜罗了好玩的微 ...

  • 游乐星空:《流浪地球》带着地球去流浪的小游戏!

    沐沐带你发现好游戏! 2019年春节上映的<流浪地球>火爆了, 不知道小伙伴们是不是都看过了? 电影讲述了太阳即将毁灭, 太阳系已经不适合人类生存, 而面对绝境, 人类将开启"流 ...

  • 2020年会必备,Excel轻松制作抽奖小游戏

    不知不觉就到了年底,新的一年即将从明天开始.时光流逝,不禁让人感慨万千. 当然在这个时间大家应都在期待着年终奖.年会吧.今天我想和大家分享一个Excel制作的抽奖小游戏,可以一次抽一人也可以一次抽多人 ...

  • 宅家带娃别崩溃!这些小游戏不用花钱,培养专注力,在家就能玩!

    长假宅家带娃,不少家长每天在孩子拖拉做作业.丢三落四和马虎做事等琐事中濒临崩溃,其实不是孩子智力有问题,这一切都是注意力不集中所导致的. 那么家长要如何培养孩子的专注力呢?下面这5个不用花钱的小游戏, ...

  • 可以带孩子在家玩的科学小游戏(5):气球火箭

    幼儿科学小实验▲ 人工智能学习 我们一起带娃"玩",激发孩子的求知欲 这两天,手机上被空间站的相关信息集体刷屏我们国家的宇宙空间站刚好经过中国国土,不得不感叹,中国真的崛起了,科技 ...

  • 小程序直播源码如何应用,开发模式是什么?

    小程序直播的行业热度持续攀升,品牌.商家.服务商争先入局进行小程序直播源码开发.通过小程序直播源码开发,部分品牌的订单量增长近12倍,部分品牌交易额增长5倍. 在线直播的应用场景有哪些? 在游戏直播. ...

  • 什么样团队开发出来的游戏陪玩源码才称得上是优秀

    很多想要做游戏陪玩系统的个人和公司,往往在开发初期不了解定制游戏陪玩系统开发的步骤都有哪些,在游戏陪玩源码的选择上也比较盲目,直接去找开发公司的也不是不可以,但是在后期的了解沟通方面可能还需要耗费大量 ...

  • 电竞游戏陪玩源码,陪玩APP软件开发的定位与收益

    随着电竞游戏的爆红,促进了电竞陪玩行业源码的大幅度发展,这一产业几乎是和电竞同步发展壮大起来的.电子竞技讲究技术.团队,玩家的游戏体验,而陪玩源码正是为了提高玩家的游戏体验. 目前市场陪玩平台80%的 ...