private void gameOver(_21MutiFightRoom room) { //给庄家发牌 brocast(room, OpCode._21Multi, _21MultiCode.TURN_DEALER_BRO, null, null); //把所有的state遍历一遍,都爆牌了就不用要了 while (room.GetDealerWeight() < 17) { CardDto card = room.DealerHit(); brocast(room, OpCode._21Multi, _21MultiCode.DEALER_HIT_BRO, card, null); } //结算 //结算对象 GameOverDto gameOverDto = new GameOverDto(); //todo 写一个总结算的对象,把玩家信息和这轮游戏的信息都发过去 状态 1 2 3 4 5 //庄家的权值 int dealerWeight = room.GetDealerWeight(); gameOverDto.dealerWeight = dealerWeight; for (int i = 0; i < 4; i++) { //不为空 if (room.PlayerList[i] != null) { List <int> StateList = new List <int>(); List <int> WeightList = new List <int>(); List <int> WinBeenList = new List <int>(); UserModel um = userCache.GetModelById(room.PlayerList[i].UserId); //ClientPeer client = userCache.GetClientPeer(room.PlayerList[i].UserId); int wager = room.PlayerList[i].Wager; //一名掉线玩家 if (room.LeaveUIdList.Contains(room.PlayerList[i].UserId)) { //扣双倍豆 um.Been -= wager * 2; gameOverDto.isLeaveList[i] = true; WinBeenList.Add(-wager * 2); gameOverDto.playerWinBeenListList[i] = WinBeenList; } //正常玩家 else { //每一把牌经验豆子结算 for (int j = 0; j < room.PlayerList[i].CardListList.Count; j++) { int multi = 1; PlayerCardDto tempPlayerCardDto = room.PlayerList[i].CardListList[j]; int tempWeight = tempPlayerCardDto.Weight; WeightList.Add(tempWeight); int tempState = tempPlayerCardDto.CardState; bool tempIsDouble = tempPlayerCardDto.isDouble; if (tempIsDouble) { multi = 2; } //21点 if (tempState == 1) { um.Been += (int)(wager * 1.5); WinBeenList.Add((int)(wager * 1.5)); StateList.Add(1); um.Exp += 150; } //闲家爆牌 else if (tempState == 2) { um.Been -= wager * multi; WinBeenList.Add(-wager * multi); if (multi == 1) { StateList.Add(2); } else { StateList.Add(3); } um.Exp += 50; } //不要 权值小于 else if (tempState == 3) { //庄家爆牌 if (dealerWeight > 21) { um.Been += wager * multi; WinBeenList.Add(wager * multi); if (multi == 1) { StateList.Add(6); } else { StateList.Add(4); } um.Exp += 100; } //闲家点大 else if (dealerWeight < tempWeight) { um.Been += wager * multi; WinBeenList.Add(wager * multi); if (multi == 1) { StateList.Add(6); } else { StateList.Add(4); } um.Exp += 100; } //庄家点大 else if (dealerWeight > tempWeight) { um.Been -= wager * multi; WinBeenList.Add(-wager * multi); if (multi == 1) { StateList.Add(7); } else { StateList.Add(5); } um.Exp += 50; } //平局 else { WinBeenList.Add(0); StateList.Add(8); um.Exp += 75; } } } } gameOverDto.playerWeightListList[i] = WeightList; gameOverDto.playerStateListList[i] = StateList; gameOverDto.playerWinBeenListList[i] = WinBeenList; int maxExp = um.Lv * 100; while (maxExp <= um.Exp) { um.Lv++; um.Exp -= maxExp; maxExp = um.Lv * 100; } userCache.Update(um); UserDto dto = new UserDto(um.Id, um.Name, um.Been, um.WinCount, um.LoseCount, um.RunCount, um.Lv, um.Exp); gameOverDto.userDtoList[i] = dto; } } //掉线的 不用发了,改一下这个函数 主要用在overpanel brocast(room, OpCode._21Multi, _21MultiCode.OVER_BRO, gameOverDto, null); //房间设置为等待 fightCache.SetRoomWait(room); //删除离开列表里的用户 foreach (int uid in room.LeaveUIdList) { fightCache.Leave(uid); } //重置房间 room.resetRoom(); }