【Android学习】使用RxJava完成益智翻牌游戏

没接触RxJava之前,初学Android之时,用原生控件ImageView写了个翻牌的小游戏。

但是有bug就是如果迅速点击相同的牌两下后将会计入错误中。

当时还不太了解怎么防止控件多次点击,当时的解决方案是第二次点击时对比一下上次点击控件的ID,如果一致则不计数。

现在有了RxJava,可以更简洁的实现这个功能。

看效果图:

防止多次代码:(两秒内只能点击该控件一次)

RxView.clicks(PictureBoxs[i])
        .throttleFirst(2, TimeUnit.SECONDS)
        .subscribeOn(AndroidSchedulers.mainThread())
        .subscribe(new Action1<Void>() {
            @Override
            public void call(Void avoid) {DoSomething();});

后台计时:

Observable.interval(1, TimeUnit.SECONDS)
        .compose(this.<Long>bindToLifecycle())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeOn(Schedulers.newThread())
        .subscribe(new Action1<Long>() {
                       @Override
                       public void call(Long aLong) {
                           tvShow.setText("" + Integer.toString(alltime++));};

游戏逻辑很简单。

随机出6各不同的数字,赋值给数组num[0]-----num[5],

然后让num[0]---num[5]顺序打乱后的值赋给num[6]---num[11]。

这样 0---11 中就有6对相同的,且顺序是乱的。

然后呢。控件ImageView[12]  它们背后隐藏的值就是数组num中的值。

每2次点击后看看点击的控件对应的num[x]值是否相等。

相等就隐藏控件,不等就再把牌统一显示成背面并且错误次数+1.

很简单对吧~~~

控件消除的粒子效果是在Github上的,忘记地址了,很抱歉,但十分感谢作者。

关于随机数如何不同有很多方法,由于数组不大,可以直接两个for循环,也可以递归实现

static int GetNumber(int[] a, int index, int minValue, int maxValue, int temp, Random r)
{
    for (int i = 0; i < index; i++)
    {
        if (a[i] == temp)
        {
            int newTemp = r.nextInt(maxValue)+minValue;
            a[index] = newTemp;
            return GetNumber(a, index, minValue, maxValue, newTemp, r);
        }
    }
    return temp;
}

github地址:https://github.com/VongVia1209/MemoryCard

时间: 2024-10-02 21:58:25

【Android学习】使用RxJava完成益智翻牌游戏的相关文章

给 Android 开发者的 RxJava 详解

作者:扔物线 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 .而最近这几个月,我也发现国内越来越多的人开始提及 RxJava .有人说『RxJava 真是太好用了』,有人说『RxJava 真是太难用了』,另外更多的人表示:我真的百度了也谷歌了,但我还是想问: RxJava 到底是什么? 鉴于 RxJava 目前这种既火爆又神秘的现状,而我又在一年的使用

Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

Android 基于ijkplayer+Rxjava+Rxandroid+Retrofit2.0+MVP+Material Design的android万能播放器aaa

MDPlayer万能播放器 MDPlayer,基于ijkplayer+Rxjava+Rxandroid+Retrofit2.0+MVP+Material Design的android万能播放器,可以播放本地和在线视频,可以浏览宅男杀手妹纸图片,UI设计遵循 Material Design. GitHub地址:https://github.com/Dawish/MDPlayer UI浏览:         1.UI设计: 列表使用RecyclerView,item为CardView并设置rippl

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

【转】Android学习系列(1)--为App签名(为apk签名)

原文网址:http://www.cnblogs.com/qianxudetianxia/archive/2011/04/09/2010468.html Android学习系列(1)--为App签名(为apk签名) 写博客是一种快乐,前提是你有所写,与人分享,是另一种快乐,前提是你有舞台展示,博客园就是这样的舞台.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Pack

九、Android学习笔记_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

Android学习笔记(三七):再谈屏幕切换

切换需注意数据保存和恢复 在Android学习笔记(三六):横屏竖屏的切换中,我们配置了两个layout,一个用户普通的portrait,一个用户landsapce方式.如果只有一个layout,我们沿用上一个例子,删除了在layout-land/中的xml文件,则在屏幕切换时,会按照原来的排版,适配新的屏幕.程序我进行了简化,每按一次pick,就加一,用此来跟踪是否需要进行数据保存和恢复,如下: [java] view plaincopy public class Chapter19Test3

白手起家之android学习第一天

今天晚上没去实验室,自己一个人跑到教室来学android了,教室很凉快,很安静,是一个学习的好地方,闲话不多说,记录自己的学习过程,没写过博客,也许有写的有点水,见谅啦~ 第一讲:android的学习路线 (1)android学习基础与内容 学习android需要具备以下基础:(当然本人现在小白,从未学过java,只能学一点补一点) java语言基础,面向对象基础,Java常用设计模式(工厂模式,单例模式等),java数据结构和算法,关系型数据库(mysql和Oracle),JDBC数据库编程,

Android学习资源网站大全

https://github.com/zhujun2730/Android-Learning-Resources 整理了一些 Android 的博客链接.学习资源网站.站在巨人的肩膀上,会看得更远.整理这一份资源也方便更多的Android开发者能享受到技术分享的力量.首先,在这里要感谢所有开源项目的作者,感谢Trinea,CodeKK,张明云,胡凯等等大大无私的技术分享,感谢所有乐于分享学习经验的人.最后,若有侵权,请联系本人,本人将及时删除侵权内容. #目录 1.官方学习资源[推荐必看] 2.