程序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() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 100: {//表示显示下一个图片的背景//取出当前显示背景图片的位置int current = msg.arg1;//++current++;//再创建一个Message,设置其arg1Message 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. @Override16. protected void onCreate(Bundle savedInstanceState) {17. super.onCreate(savedInstanceState);18. setContentView(R.layout.activity_main);19. //初始化ImageView20. 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. @Override48. 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,设置其arg158. 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. }

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


推荐阅读:

  • 福利篇 | 1T编程学习视频免费领取

  • 福利篇 |  推荐你有用的编程电子书

  • 福利篇 |  给你两个重要的实战项目

关注【程序IT圈】,让我们一起成长

合适分享 | 值得留言

©文章声明:如未特殊声明,就是原创,转载需要联系

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

  1. 分享Python开发的13个小游戏(附源码)

    导语 哈喽哈喽~铁汁萌!愉快的周末到了天气也变好了不知道大家有没有出去玩吖!小编这几天太累了周末就宅在家里啦

  2. html实现扫雷小游戏(附源码)

    文章目录 实现功能 1.扫雷设计 1.1 主界面 1.2 扫雷难度 1.3 附带功能 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blo ...

  3. 【Python游戏】Python基于pygame实现的人机大战的斗兽棋小游戏 | 附源码

    前言 有粉丝说要我出一期Python版本的斗兽棋,今天宠粉狂魔的我不就来啦!! 虽然是一个简单的小游戏,但是对于新手小伙伴来说还是有一定的小难度的哟!要是不理解都可以找到小编的哈!! 相关文件 关注小 ...

  4. 【Python游戏】基于化学方程式的基础上,用Python实现一个消灭泡泡小游戏 | 附源码

    前言 halo,包子们下午好 今天实现的这个小游戏呀,说实话化学不太好的小伙伴可能看起来会有点懵逼 不过不用担心,咱们今天不是来学化学的,我们是来学习Python的 所以呀,不要太担心啦,大家先好好看 ...

  5. 【Python游戏】用Python 和 Pyglet 编写一个我的世界小游戏 | 附源码

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! 需要源码的小伙伴可以在公众号回复我的世界 Pytho ...

  6. 【Python游戏】基于pygame实现的一个Dino Rush 恐龙宝贝冲冲冲的小游戏 | 附源码

    前言 halo,包子们晚上好 很久没有更新啦,主要是小编这边最近有点小忙 今天给大家整一个Dino Rush 恐龙宝贝冲冲冲的小游戏 还是一个比较记经典的小游戏,还记这可谷歌浏览器上没有网也能打发时间 ...

  7. 整理了30款Python小游戏附源码,五一有的玩了

    快到五一了,整理了 30 款 Python 小游戏源码分享给大家,具体内容可以点击下方视频号查看: 点击上方视频后,源码获取方式:①关注上方视频号.②点赞当前视频.③在当前视频评论区扣1 友情提示:获 ...

  8. 【博主推荐】html好看的拼图小游戏(附源码)

    拼图目录 html好看的拼图小游戏 1.拼图效果示意图 1.1 第一级 九宫格拼图 1.2 第二级 十六宫格拼图 1.3 第三级 三十二宫格拼图 14 第三级 八十一宫格拼图 2.图片切图说明 3.实 ...

  9. 一口气用Python写了13个小游戏 (附源码)

    大家好,今天给大家分享13个游戏源码,可以自己复现玩玩,研究下里面的编程逻辑,对学习编程(特别是初学者)应该会有很大帮助. 由于文章较长,大家记得滑到文末点个赞哈- 1.吃金币 源码分享: impor ...

最新文章

  1. windows下faster-rcnn遇到的检测框重复很多问题 nms
  2. Java知识点:条件编译
  3. 【论文解读】多视图多示例多标签的协同矩阵分解
  4. 牛客 - Yuki with emofunc and playf(同余最短路)
  5. java jpa性能_[Java Performance] 数据库性能最佳实践 - JPA和读写优化
  6. js 操作java对象_JavaScript 对象基础
  7. 服务器内存型号与频率,一张图看懂如何选择DDR4内存的频率和容量
  8. 请求报文的方法及get与post的区别
  9. DotNetZip使用简介
  10. 约瑟夫环c语言代码加注释,约瑟夫环c语言代码原创.doc
  11. Oracle认证(ocjp)通关之路
  12. 实现:首页--上一页--下一页--末页的简单分页实现
  13. ELK-使用nxlog+filebeat采集不同类型的日志输出到logstash
  14. tomcat 热部署的实现
  15. addr2line方法使用总结
  16. 金融类自定义View(二)--股票分时图
  17. 泰勒公式的计算机应用,泰勒公式应用
  18. 使用Python-OpenCV将图片批量转换为jpg格式
  19. Aseprite Dark Mort HD 主题
  20. 我们都是被宫崎骏爱过的孩子

热门文章

  1. git小乌龟解决代码冲突
  2. Python入门基础(6)--面向对象/类和对象/魔术方法
  3. 基于R语言的主成分回归(PCR)与Lasso回归在水稻基因组预测中的对比(生信数基实验作业)
  4. ip地址的分类和特殊的网络地址-——计算机网络笔记
  5. LaKSA: A Probabilistic Proof-of-Stake Protocol
  6. 斯坦福SCI论文写作课笔记(十三)
  7. 高数巨占座问题(c语言)
  8. 厘米换算英尺英寸 (15 分)
  9. DDOS攻击监测工具软件DDOS_Monitor下载
  10. 联合搜索:搜索中的所有需求