/// <summary> /// PlottingPhaseの実装セット /// </summary> #region PlottingPhase /// <summary> /// OnReceiveDataに加える。サーバから手札を受け取るときに使う。 /// データ形式...data0~Imagination番目:手札のカードID /// </summary> /// <param name="sender"></param> /// <param name="data"></param> void ReceiveHandsEvent(object sender, byte[] data) { ThrowAwayHands(); int currentIndex = 0; for (int i = 0; i < character.Imagination; i++) { if (data[i] == 255) { break; } hands |= (1 << data[i]); handObjects[i].SetCardInfo(character.GetCard(data[i])); } currentIndex = character.Imagination; if (BitCalculation.BitCount(deck) < character.Imagination) { deck = ((1 << character.Hp) - 1); discards = 0; } deck &= ~hands; currentPhase = PhaseEnum.PlottingPhase; process = PlottingPhaseProcess; signal = true; }
/// <summary> /// 山札から規定数のカードを手札に加える(ランダム) /// </summary> void DrawCards() { int i; int count = 0; while (count != players[0].Information.Chara.Imagination) { if (players[0].Information.Deck == 0) { ReturnDeckFromDiscards(); } i = BitCalculation.GetNthBit(players[0].Information.Deck, Random.Range(0, BitCalculation.BitCount(players[0].Information.Deck))); players[0].Information.Deck &= ~i; players[0].Information.Hands |= i; CardOperation.Instance.SetCardInfo(count, players[0].Information.Chara.GetCard(BitCalculation.CheckWhichBitIsOn(i))); count++; } CardOperation.Instance.NumberOfHands = count; Debug.Log("山札:" + System.Convert.ToString(players[0].Information.Deck, 2)); Debug.Log("手札:" + System.Convert.ToString(players[0].Information.Hands, 2)); }
/// <summary> /// 除外カードを指定数山札に戻す(ランダム) /// </summary> /// <param name="amount"></param> void ReturnDeckFromExclusionCards(int amount) { if (exclusionCards == 0) { return; } Debug.Log("山札:" + System.Convert.ToString(deck, 2)); int i = BitCalculation.GetNthBit(exclusionCards, UnityEngine.Random.Range(0, BitCalculation.BitCount(exclusionCards))); while (amount-- > 0 && exclusionCards != 0) { exclusionCards &= ~i; deck |= i; i = BitCalculation.GetNthBit(exclusionCards, UnityEngine.Random.Range(0, BitCalculation.BitCount(exclusionCards))); } Debug.Log("山札:" + System.Convert.ToString(deck, 2)); }
/// <summary> /// 山札からランダムなカードを除外する /// </summary> /// <param name="num"></param> void ExcludeFromDeck(int num) { int i; int count = 0; while (count != num) { if (deck == 0) { ReturnDeckFromDiscards(); } i = BitCalculation.GetNthBit(deck, UnityEngine.Random.Range(0, BitCalculation.BitCount(deck))); deck &= ~i; exclusionCards |= i; count++; } }