void Start() { camera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent <Camera>(); gameAct = new MGameClientAction(this); gameData = new OptionData.DataBase(0); mask = 1 << 1; }
/*动作*/ //开始 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); }
//游戏开始用户配置(测试) 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); }
//确认设置 void IController.OnOption(OptionData.DataBase data) { view.OnStart(data); }
//接收 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; } }