Случайное число постоянно меняется - PullRequest
0 голосов
/ 20 ноября 2018

Итак, у меня есть супер простая игра с монетами, но она многопользовательская, поэтому в ней много кода.В перевёрнутой части игры у меня возникла проблема.

Я хочу, чтобы при каждом подбрасывании монеты, если она падает на головы, число 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. Как я могу получить статическое число, которое не может измениться?

1 Ответ

0 голосов
/ 20 ноября 2018

Вы написали бесконечный цикл. У вас есть прослушиватель в местоположении в базе данных (games), который вызывается всякий раз, когда любое значение в или в , это местоположение изменяется. Внутри вашего слушателя у вас есть некоторый код, который записывает значение в местоположение под games. Это записанное значение затем вызывает прослушиватель, который вы добавили на games, который записывает другое значение и т. Д.

Вам нужно будет придумать какой-то другой способ удовлетворить требования вашей игры без написания самозапускающегося слушателя, такого как этот, возможно, путем ограничения области действия слушателя, чтобы он также не слушал ценит это пишет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...