随机数不断变化

时间:2018-11-20 03:11:42

标签: java android firebase firebase-realtime-database

所以我有一个超级简单的掷硬币游戏,但是它是多人游戏,因此里面有很多代码。在游戏的翻转部分,我遇到了一个问题。

我想要它,以便每当掷硬币时,如果硬币落在头上,数字1就会存储到Firebase数据库中;如果硬币落在头上,我希望数字2将存储起来。

这就是我现在的工作方式:

private void startGame() {
    flipCoin();
    games.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
            HomePage.getCurrentGameID(new HomePage.CallbackID() {
                @Override
                public void onSuccess(String currentGameID) {
                    games.child(currentGameID).child("horT").setValue(getCoinSide());
                }
            });
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

一旦两个玩家都加入游戏并达到“就绪”状态,则将调用此方法。您可以看到,它首先调用了flipCoin()方法,即:

private void flipCoin() {
    final Random r = new Random();
    coinSide = r.nextInt(2) + 1;
}

然后我使用getCoinSide()在数据库中设置头或尾(1或2),正如您已经在此行中看到的那样

games.child(currentGameID).child("horT").setValue(getCoinSide());

我的getCoinSide()就是这样:

private int getCoinSide() {
    return coinSide;
}

所以这有点奏效。它获取一个数字并将其存储在数据库中,但是问题在于它不断地将其连续地存储在数据库中。因此定义正面或反面的数字每隔半秒就会切换为1或2。如何获得没有变化机会的静态数字?

1 个答案:

答案 0 :(得分:2)

您编写了一个无限循环。您在数据库(games)的某个位置有一个侦听器,只要该位置 下的任何值发生变化,就会调用该侦听器。在您的侦听器内部,您有一些代码将值写入games下的位置。然后,该写入的值会触发您在games处添加的侦听器,该侦听器将在其中写入另一个值,等等。

您将不得不找出其他方法来满足游戏的要求,而无需编写这样的自触发侦听器,这可能是通过限制侦听器的范围以使其也不会侦听重视它的写作。