예제 #1
0
        /// <summary>
        /// 手札から指定したカードを除外する
        /// </summary>
        /// <param name="num"></param>
        void ExcludeFromHands(int num)
        {
            int tmp = BitCalculation.GetNthBit(hands, num);

            hands          &= ~tmp;
            exclusionCards |= tmp;
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
        /// <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++;
            }
        }
예제 #4
0
        /// <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));
        }
예제 #5
0
        /// <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));
        }