java - 随机数不断变化
问题描述
所以我有一个超级简单的抛硬币游戏,但它是多人游戏,所以里面有很多代码。在游戏的翻转部分,我遇到了问题。
我想要它,这样每当硬币被翻转时,如果它落在正面,数字 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;
}
然后我在数据库中设置头部或尾部(1或2),getCoinSide()
正如您在我已经发布的这一行中看到的那样
games.child(currentGameID).child("horT").setValue(getCoinSide());
而我的 getCoinSide() 就是这样:
private int getCoinSide() {
return coinSide;
}
所以这有点工作。它获取一个数字并将其存储在数据库中,但问题是它不断地一遍又一遍地将其存储在数据库中。所以定义正面或反面的数字每半秒都会切换到 1 或 2。我怎样才能得到一个没有机会改变的静态数字?
解决方案
你写了一个无限循环。您在数据库 ( ) 中的某个位置有一个侦听器,只要该位置或其下方的任何值发生更改games
,就会调用该侦听器。在您的侦听器中,您有一些代码将值写入. 该写入值然后触发您在 处添加的侦听器,该侦听器在那里写入另一个值,依此类推。games
games
您将不得不想出一些其他方法来满足您的游戏要求,而无需编写像这样的自触发侦听器,也许是通过限制侦听器的范围,使其也不会侦听正在编写的值.
推荐阅读
- javascript - ExtJS 7.1 Tag 字段正在执行 XSS 标签
- javascript - 给定'n'个小数位的数字的最大精度是多少
- pandas - 在圆圈内动画文本 - Matplotlib
- html - 通过 slde 将同一侧并排显示为两行
- marklogic - 如何使用 REST API 查找已安装的 marklogic 9 数据中心版本
- windows-10 - 在 windows10 和 SUSE Sles 12 之间配置 IKE/Ipsec 连接时出错
- reactjs - 在“连接”的上下文中找不到“商店”(Laravel 框架中的 React 应用程序)
- android - 垂直 RecyclerView 内的动态垂直 RecyclerView
- gupshup - 显示的用户选择加入,但消息由于“未选择加入”而失败
- java - MPLab X v5.40:无法获取目标位置和“无法找到 Pack Repo Provider”