Foor l oop продолжается до присвоения значения объекту - PullRequest
0 голосов
/ 30 апреля 2020

Я создаю приложение для карточных игр с Node / Express / MongoDB и использую для l oop, чтобы раздать 4 карты каждому игроку. Команда for l oop продолжает следующую итерацию до того, как она завершила присвоение значения объекту cards.

В приведенном ниже примере в игре участвуют 4 игрока, которым должно быть роздано по 4 карты каждый.

Функция для сдачи карт:

exports.start = async (_id) => {
  const deck = await this.get(_id);
  deck.cards = casinoDeck.cards; // json object with the cards initial state

  // deal 4 cards to each player
  for (let i=0; i<4; i++) {
    for (const player of deck.players) {
      const remainingDeckCards = deck.cards.filter(card => card.state === 'deck').length
      console.log(remainingDeckCards);

      const randomCardIndex = this.getRandomInt(remainingDeckCards);

      deck.cards[randomCardIndex].player = player;
      deck.cards[randomCardIndex].state = 'hand';
    };
  };

  deck.save();
  return deck;
};

Назначение случайного индекса оставшихся карт:

exports.getRandomInt = max => Math.floor(Math.random() * Math.floor(max));

Схема колоды:

const deckSchema = new Schema({
  cards: [{
    name: {type: String, enum:['A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3', '2']},
    suit: {type: String, enum:['C', 'D', 'H', 'S']},
    rank: {type: Number},
    altRank: {type: Number},
    player: {type: Schema.Types.ObjectId, ref: 'user', default: null},
    state: {type: String, enum: ['deck', 'table', 'hand', 'won'], default: 'deck'},
    image: {type: String}
  }],
  players: [{type: Schema.Types.ObjectId, ref:'user', default: null}]
});

Журналы console.log(remainingDeckCards) ниже, где на некоторых итерациях оставшиеся карты в колоде остаются неизменными. Это указывает на то, что для l oop продолжается итерация до того, как она присвоит значение deck.cards.state (и возможно также deck.cards.player). Это приводит к тому, что некоторые карты «сдаются дважды» ...

52 51 50 49 48 47 46 45 44 43 42 42 41 40 39 39

Как обеспечить присвоение колоды .cards before для l oop продолжается до следующей итерации?

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