Exemplo n.º 1
0
 void Start()
 {
     camera   = GameObject.FindGameObjectWithTag("MainCamera").GetComponent <Camera>();
     gameAct  = new MGameClientAction(this);
     gameData = new OptionData.DataBase(0);
     mask     = 1 << 1;
 }
Exemplo n.º 2
0
    /*动作*/


    //开始
    bool IMGameView.OnStart(OptionData.DataBase data)
    {
        //游戏开始
        gameStartFlag = true;
        //禁止界面操作
        globalOperateFlag = false;
        //当前状态
        previousState = Logic.add_group;
        //下一个状态
        nextState = Logic.turn_dice;
        //配置
        gameData = data;
        //发牌顺序
        SetPriority(gameData.player_priority);
        //重置
        gameAct.Reset();
        //随便连起链表便于洗牌
        gameAct.CardDirection(0);
        //洗牌 第一个出牌的总是庄家 庄家为0
        StartCoroutine(gameAct.AddGroup(() =>
        {
            //洗完牌摇色子
            StartCoroutine(LogicCprocessor(currentUserID));
        }));

        return(true);
    }
Exemplo n.º 3
0
 //游戏开始用户配置(测试)
 public OptionData.DataBase GetOption()
 {
     OptionData.DataBase optionData = new OptionData.DataBase();
     optionData.dice_num = new int[2] {
         UnityEngine.Random.Range(1, 7), UnityEngine.Random.Range(1, 7)
     };
     optionData.player_priority = UnityEngine.Random.Range(0, 4);
     //optionData.player_priority = 0;
     for (int i = 0; i < players.Length; ++i)
     {
         players[i] = new User(i);
     }
     return(optionData);
 }
Exemplo n.º 4
0
 //确认设置
 void IController.OnOption(OptionData.DataBase data)
 {
     view.OnStart(data);
 }
Exemplo n.º 5
0
    //接收
    public void EndStatusFlag(int userID, UserAction act, params List <int>[] arg)
    {
        Debug.Log("用户:" + userID + "-" + act.ToString() + "完成");
        switch (act)
        {
        case UserAction.ready:
            //洗牌
            RandCardData();
            //发牌
            SendCard();
            //发送配置
            userData = GetOption();
            control.OnOption(userData);
            //单机(测试)
            players[userData.player_priority] = new User(userData.player_priority, userID);
            break;

        //掷色子结束
        case UserAction.turn_dice:
            //界面开始发牌
            SetStatusFlag(userID, UserAction.send_card_flag, HandCard[userID]);
            break;

        //发牌结束
        case UserAction.send_card:
            //摸牌
            UserGetCard(turnID);
            break;

        //摸牌完成 等待用户出牌
        case UserAction.get_card:
            WaitOrPush(userID);
            break;

        case UserAction.put_card:
            string s = "ID:" + userID + "[";
            foreach (var item in HandCard[userID])
            {
                s += item + ",";
            }
            s += "]";
            Debug.Log("<color=green>" + s + HandCard[userID].Count + "</color>");
            //出牌判断
            OutCardAnalys();
            //下一个玩家判断
            break;

        case UserAction.insert_card:
            break;

        //吃碰等待出牌
        case UserAction.chi:
        case UserAction.peng:
            WaitOrPush(userID);
            break;

        //杠后摸牌再出
        case UserAction.ming_gang:
        case UserAction.add_gang:
        case UserAction.an_gang:
            //摸牌
            UserGetCard(turnID);
            break;

        //arg[0]
        case UserAction.chi_hu:
        case UserAction.hu:
            //游戏结束(测试 通知玩家可以开始新一局)
            SetStatusFlag(userID, UserAction.end);
            break;

        case UserAction.ting:
            break;

        case UserAction.ting_cancel:
            break;

        case UserAction.trustee:
            break;

        case UserAction.AI_cancel:
            break;

        //带flag为请求操作
        case UserAction.pass_flag:
            if (isOutChihu || isOutGang || isOutPeng || isOutChi)
            {
                //出牌判断
                OutCardAnalys();
            }
            else
            {
                //如果都没有 则自然轮到下一家出牌
                turnID   = (turnID + 1) % 4;
                analysID = turnID;
                //用户摸牌
                UserGetCard(turnID);
            }
            break;

        //出牌请求
        case UserAction.put_card_flag:
            if (userID == turnID)
            {
                int index = UserOutCard(userID, arg[0][0]);     //手中的牌插入id 如果没有则为-1
                //更新字典
                UpdateCardLib(outCard);
                //传入 出牌id 手牌插入id 出牌牌型
                SetStatusFlag(userID, UserAction.put_card, new List <int>()
                {
                    arg[0][0], index, outCard
                });
            }
            break;

        //玩家要吃
        case UserAction.chi_card_flag:
            if (userID == analysID)
            {
                List <int> card = new List <int>();
                card.Add(GetHandCard(HandCard[userID], arg[0][0]));
                card.Add(GetHandCard(HandCard[userID], arg[0][1]));
                HandCard[userID].Remove(card[0]);
                HandCard[userID].Remove(card[1]);
                card.Add(outCard);
                PengAre[userID].Add(card);
                //传入 被吃的id  吃的牌id  吃牌的牌型
                SetStatusFlag(userID, UserAction.chi, new List <int>()
                {
                    turnID
                }, arg[0], card);
                //设置当前出牌用户
                turnID = analysID;
            }
            break;

        //玩家要碰
        case UserAction.peng_card_flag:
            //玩家验证
            if (userID == analysID)
            {
                List <int> card = new List <int>();
                card.Add(GetHandCard(HandCard[userID], arg[0][0]));
                card.Add(GetHandCard(HandCard[userID], arg[0][1]));
                HandCard[userID].Remove(card[0]);
                HandCard[userID].Remove(card[1]);
                card.Add(outCard);
                PengAre[userID].Add(card);
                //传入 被碰的id  碰的牌id  碰牌的牌型
                SetStatusFlag(userID, UserAction.peng, new List <int>()
                {
                    turnID
                }, arg[0], card);
                //设置当前出牌用户
                turnID = analysID;
            }
            break;

        //玩家要家杠
        case UserAction.add_gang_flag:
            //玩家验证
            if (userID == analysID)
            {
                //大于零是手牌 小于零是手中的牌
                int jiaCard;
                if (arg[0][0] > 0)
                {
                    jiaCard = GetHandCard(HandCard[userID], arg[0][0]);
                    HandCard[userID].Remove(jiaCard);
                }
                else
                {
                    jiaCard    = handleCard;
                    handleCard = -1;
                }
                for (int i = 0; i < PengAre[userID].Count; ++i)
                {
                    //寻找加牌的位置
                    if (jiaCard == PengAre[userID][i][0])
                    {
                        PengAre[userID][i].Add(jiaCard);
                        //告诉用户加牌 哪个位置的牌 并且加哪 是什么牌
                        SetStatusFlag(userID, UserAction.add_gang, new List <int>()
                        {
                            arg[0][0], i, jiaCard
                        });
                        break;
                    }
                }
                //设置当前出牌用户
                turnID = analysID;
            }
            break;

        //玩家要杠
        case UserAction.gang_flag:
            //判断杠 并传回杠牌
            if (userID == analysID)
            {
                //传回三个以上的index
                List <int> card = new List <int>();
                card.Add(GetHandCard(HandCard[userID], arg[0][0]));
                card.Add(GetHandCard(HandCard[userID], arg[0][1]));
                card.Add(GetHandCard(HandCard[userID], arg[0][2]));

                //有手牌则是暗杠 没有则是明杠的回馈
                if (handleCard > 0)
                {
                    //第四个参数有可能是手中的牌
                    if (arg[0][3] > 0)
                    {
                        card.Add(GetHandCard(HandCard[userID], arg[0][3]));
                        //从手牌中移除杠过的牌
                        HandCard[userID].Remove(card[0]);
                        HandCard[userID].Remove(card[1]);
                        HandCard[userID].Remove(card[2]);
                        HandCard[userID].Remove(card[3]);
                    }
                    else
                    {
                        //从手牌中移除杠过的牌
                        HandCard[userID].Remove(card[0]);
                        HandCard[userID].Remove(card[1]);
                        HandCard[userID].Remove(card[2]);
                        //小于零表示手中的牌
                        card.Add(handleCard);
                        handleCard = -1;
                    }
                    PengAre[userID].Add(card);
                    //传入 杠的牌型
                    SetStatusFlag(userID, UserAction.an_gang, new List <int>()
                    {
                        turnID
                    }, arg[0], card);
                }
                else
                {
                    //从手牌中移除杠过的牌
                    HandCard[userID].Remove(card[0]);
                    HandCard[userID].Remove(card[1]);
                    HandCard[userID].Remove(card[2]);
                    //第四个参数是刚出的牌
                    card.Add(outCard);
                    PengAre[userID].Add(card);
                    //传入 杠的牌型
                    SetStatusFlag(userID, UserAction.ming_gang, new List <int>()
                    {
                        turnID
                    }, arg[0], card);
                }
                //设置当前出牌用户
                turnID = analysID;
            }
            break;

        case UserAction.hu_flag:
            if (userID == analysID)
            {
                //打包牌型数据
                List <List <int> > cardData = new List <List <int> >(HandCard);
                cardData.Add(new List <int> {
                    handleCard
                });
                //自摸
                if (handleCard > 0)
                {
                    SetStatusFlag(userID, UserAction.hu, cardData.ToArray());
                }
                else
                {
                    //吃胡 最前面加入被吃的id
                    cardData.Insert(0, new List <int>()
                    {
                        turnID
                    });
                    SetStatusFlag(userID, UserAction.chi_hu, cardData.ToArray());
                }
                turnID = analysID;
            }
            break;

        case UserAction.ting_flag:
            break;
        }
    }