Beispiel #1
0
    public void PlayerInitialize() //玩家初始化
    {
        int        ID;
        GameObject TheCard;
        GameObject player;

        for (int i = 1; i <= TotalPlayer; i++)
        {
            player = Instantiate(Resources.Load <GameObject>("Prefabs/Player"));
            var children = player.GetComponentsInChildren <Transform>();
            children[1].GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("graphic/" + PlayerName[i - 1]);

            player.transform.localPosition = new Vector3(Xposition[i - 1], Yposition[i - 1], 0);
            Debug.Log(Xposition[i - 1]);
            player.GetComponent <Player>().order = i;
            player.name = PlayerName[i - 1];

            for (int j = 1; j <= 7; j++)
            {
                ID = Order_To_ID(DeckTopOrder);  //先拿到位於牌堆頂端的卡牌
                player.GetComponent <Player>().PlayerCards.Add(ID);
                TheCard = IDtoGameobeject(ID);
                if (i == 1)
                {
                    TheCard.GetComponent <Card>().cardState = CardState.YourCard;
                }
                else
                {
                    TheCard.GetComponent <Card>().cardState = CardState.OthersCard;
                }
                DeckTopOrder++;
            }
            CardPositionManager(player.name);
        }
        //遊戲開始,發完牌後取牌堆最頂端的牌,作為棄牌堆第一張牌
        ID      = Order_To_ID(DeckTopOrder);
        TheCard = IDtoGameobeject(ID);

        TheCard.transform.localPosition = new Vector3(-3f, 0, 0);
        TheCard.transform.eulerAngles   = new Vector3(0, 0, 0);
        DeckTopOrder++;
        PlayCard(ID);
        TheCard.GetComponent <Card>().cardState = CardState.Used; //為使第一個玩家不受棄牌堆第一張牌的功能影響

        //如果牌堆最頂端的牌為Wild或Wild Draw Four,則再取下一張,直到不是Wild或Wild Draw Four
        CardFunction cardFunction;

        cardFunction = TheCard.GetComponent <Card>().CardFunction;
        bool ReadyForGame = false;

        while (ReadyForGame == false)
        {
            if (cardFunction == CardFunction.WildDrawFour || cardFunction == CardFunction.Wild)
            {
                ID      = Order_To_ID(DeckTopOrder);
                TheCard = IDtoGameobeject(ID);

                TheCard.transform.localPosition = new Vector3(-3f, 0, 0);
                TheCard.transform.eulerAngles   = new Vector3(0, 0, 0);
                DeckTopOrder++;
                PlayCard(ID);
                TheCard.GetComponent <Card>().cardState = CardState.Used;
                cardFunction = TheCard.GetComponent <Card>().CardFunction;
            }
            else
            {
                ReadyForGame = true;
            }
        }

        turnScript.PlayerUpdate(PlayerName);
    }